嗨,我需要获取列表的第n个元素,但不使用!! 运营商.我对haskell非常陌生,所以如果您能够更详细地回答而不仅仅是一行代码,我将不胜感激.这就是我现在正在尝试的:
nthel:: Int -> [Int] -> Int
nthel n xs = 0
let xsxs = take n xs
nthel n xs = last xsxs
Run Code Online (Sandbox Code Playgroud)
但我得到:解析错误(可能是不正确的缩进)
先感谢您!
Dan*_*zer 12
这里有很多东西,
nthel :: Int -> [Int] -> Int
Run Code Online (Sandbox Code Playgroud)
在技术上是正确的,我们真的想要
nthel :: Int -> [a] -> a
Run Code Online (Sandbox Code Playgroud)
所以我们可以在任何列表中使用它(可选)
nthel n xs = 0
Run Code Online (Sandbox Code Playgroud)
你刚刚说的是"无论你给什么nthel回报0".这显然是错的.
let xsxs = ...
Run Code Online (Sandbox Code Playgroud)
这不是合法的哈克尔.let ... in ...是一个表达式,它不能用于顶级.
从那里我不确定应该做什么.
也许这会帮助你走上正轨
nthelem n [] = <???> -- error case, empty list
nthelem 0 xs = head xs
nthelem n xs = <???> -- recursive case
Run Code Online (Sandbox Code Playgroud)
尝试<???>用你最好的猜测填写,我很乐意从那里帮助.
或者,您可以使用Haskell的"模式匹配"语法.我在这里解释如何使用列表来完成此操作.
这改变了我们的上述
nthelem n [] = <???> -- error case, empty list
nthelem 0 (x:xs) = x --bind x to the first element, xs to the rest of the list
nthelem n (x:xs) = <???> -- recursive case
Run Code Online (Sandbox Code Playgroud)
这样做很方便,因为它无需使用explicit head和tails.
我想你的意思是:
nthel n xs = last xsxs
where xsxs = take n xs
Run Code Online (Sandbox Code Playgroud)
...你可以简化为:
nthel n xs = last (take n xs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5465 次 |
| 最近记录: |