定义列表:
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)]
该代码甚至没有编译,因此它是不正确的。在询问我们是否正确之前,请尝试在ghci中运行您的代码。 – 2011-05-16 17:15:00
现在它工作,更新问题 – Tom 2011-05-16 17:26:38
为什么所有这些downvotes? OP显示了一个问题,张贴了他所做的并寻求帮助。我看不出投票的理由。顺便说一句,你可以通过用四个空格缩进来将代码格式化为代码。你甚至可以嵌套引号和代码。 (我以前不知道这个;) – fuz 2011-05-16 17:46:58