Zig*_*igu 1 recursion haskell list pattern-matching
我正在尝试编写一个接受列表的函数,如果它是按排序顺序则返回true,否则返回false:
到目前为止我所拥有的是:
myordered [] = True
myordered [x] = True
myordered list1
| (head list1) <= (head (tail list1)) = myordered(tail list1)
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
根据我们的分配,所有头部和尾部操作都应记为"x:xs"类型语法.
我提出的有关警卫部分的翻译是:
myordered y:x:xs
| (y) <= (x) = myordered(xs)
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
基本上这个问题归结为:你如何用"x:xs"类型语法表达(head(tail list1))?
干杯,-Zigu
你的模式几乎是正确的,你只需用括号括起来:
myordered (y:x:xs)
Run Code Online (Sandbox Code Playgroud)
另外请注意,没有必要包围y,并x在括号中y <= x.
你的第二个版本中也存在语义错误:
myordered(xs)这里xs指的是尾巴的尾巴,但你想要整个尾巴,所以你应该这样做myordered (x:xs)或者:
myordered (y:xs@(x:_))
| y <= x = myordered xs
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
其中说:xs是该列表的尾部,是该尾部x的头部,并且_(被忽略)是尾部的尾部.
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |