【发布时间】:2011-05-16 17:08:54
【问题描述】:
定义一个列表:
nat2::[(Integer, Integer)]包含所有非负数对 按已知关系排序的整数 来自康托尔定理的证明:
(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 中运行您的代码,然后再询问我们是否正确。
-
现在它正在工作,有问题更新
-
为什么所有这些反对票? OP显示了一个问题,发布了他的所作所为并寻求帮助。我认为没有理由投反对票。顺便说一句,您可以通过缩进四个空格来将某些内容格式化为代码。您甚至可以嵌套引号和代码。 (我以前不知道这个;)