2011-05-16 37 views
1

定义列表:

nat2::[(Integer, Integer)] 

包含所有对由康托尔定理的证明知 关系有序非负整数 的:NAT2 :: [(整数,整数)定义

(x1,y1) < (x2,y2) <=> x1+y1 < x2+y2 v (x1+y1=x2+y2^x1 < x2) 

[^ - 意味着替代]

使得:

nat2 = [(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),(0,3),(1,2),(2,1),(3,0),...] 

提示:

定义应该适合在一个 线和短于45个 字符。请注意, 相同对角线上的点的坐标总和为 是恒定的。

我做了一些定义,但我不知道这是否是正确的,你可以检查/维修/给出提示:

nat2::[(Integer,Integer)] 
nat2=[(a,b-a)|b<-[0...],a<-[0...b]] 

编辑:改为:

nat2 :: [(Integer,Integer)] 
nat2 = [(a,b-a) | b <- [0..], a <- [0..b]] 

与结果:

Prelude> :load "nat2.hs" 
[1 of 1] Compiling Main    (nat2.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> take 10 nat2 
[(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),(0,3),(1,2),(2,1),(3,0)] 
+1

该代码甚至没有编译,因此它是不正确的。在询问我们是否正确之前,请尝试在ghci中运行您的代码。 – 2011-05-16 17:15:00

+0

现在它工作,更新问题 – Tom 2011-05-16 17:26:38

+0

为什么所有这些downvotes? OP显示了一个问题,张贴了他所做的并寻求帮助。我看不出投票的理由。顺便说一句,你可以通过用四个空格缩进来将代码格式化为代码。你甚至可以嵌套引号和代码。 (我以前不知道这个;) – fuz 2011-05-16 17:46:58

回答

4

你有一个语法错误(你尝试运行我T和检查输出)

Prelude> [(a,b-a)|b<-[0...],a<-[0...b]] 

<interactive>:1:14: 
    A section must be enclosed in parentheses thus: (0 ...) 

因为你只需要在列表枚举2 ..

Prelude> take 10 [(a,b-a)|b<-[0..],a<-[0..b]] 
[(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),(0,3),(1,2),(2,1),(3,0)]  

看起来合理,但你是最好的判断。

+0

nat2 :: [(Integer,Integer)] nat2 = [(x,s-x) s < - [0 ..],x < - [0..s]] 这是一个作品,称为:采取10 nat2 – Tom 2011-05-16 17:25:28

+0

是的我犯了语法错误,而在这里写....ryry。 好ver。在编辑问题后更新。 – Tom 2011-05-16 17:34:39