【问题标题】:nat2::[(Integer,Integer)] definitionnat2::[(Integer,Integer)] 定义
【发布时间】: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显示了一个问题,发布了他的所作所为并寻求帮助。我认为没有理由投反对票。顺便说一句,您可以通过缩进四个空格来将某些内容格式化为代码。您甚至可以嵌套引号和代码。 (我以前不知道这个;)

标签: list haskell syntax


【解决方案1】:

您有语法错误(您是否尝试运行它并检查输出?)

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

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

因为列表枚举中只需要两个..

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)]    

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

【讨论】:

  • nat2 :: [(Integer,Integer)] nat2 = [(x,s-x) | s
  • 是的,我在这里写的时候犯了语法错误..对不起。好版本。在有问题的编辑后更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2019-05-05
  • 2017-10-13
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
相关资源
最近更新 更多