n:整数列表的元素.[家庭作业]

Sud*_*ha 0 recursion haskell

嗨我需要找到来自[Int]的n:th元素

我想出了代码

getelemt::[Int]->Int->Int
getelemt _ 0 = 0
getelemt (x:xs) n | x==n = x
                  | otherwise = getelemt xs n
Run Code Online (Sandbox Code Playgroud)

我知道 getelemt (x:xs) n | x==n = x它返回我的x元素==输入元素

作为逻辑,我认为我需要跟上这个函数 如何被递归的时间如何保持这个索引?或任何其他方法?

新规范

getelemt::[Int]->Int->Int
getelemt _ n = 0
getelemt (x:xs) n | n==0 = x
                  | otherwise = getelemt xs n-1
Run Code Online (Sandbox Code Playgroud)

peo*_*oro 7

你不能只使用!!

无论如何你的function(getelemt (x:xs) i)应该这样工作:

  • 如果i是0,你的函数返回x(它得到的参数列表中的第一个元素:x:xs)

  • 否则它会递归,返回 getelem xs (i-1)


OP更新后编辑:

  1. 你不需要getelemt _ n = 0:它说getelemt应该总是0,因为它总是匹配.

  2. getelemt xs n-1等价于(getelemt xs n)-1你不想要的,你需要n-1加入括号,因为中缀函数的优先级较低.


我建议你从这里学习Haskell ,这对初学者来说很棒.阅读前几章,它们将非常快速而且很好地运行,并且您将更深入地理解Haskell.