您好我需要找到来自[Int]
的第n个元素我想出了代码
getelemt::[Int]->Int->Int
getelemt _ 0 = 0
getelemt (x:xs) n | x==n = x
| otherwise = getelemt xs n
我知道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
答案 0 :(得分:7)
你不能只使用!!
吗?
无论如何,你的函数(getelemt (x:xs) i
)应该是这样的:
如果i
为0,则您的函数返回x
(作为参数获取的列表的第一个元素:x:xs
)
否则它会递归,返回getelem xs (i-1)
您不需要getelemt _ n = 0
:它说getelemt
应始终为0,因为它始终匹配。
getelemt xs n-1
等同于(getelemt xs n)-1
,这不是您想要的,您需要将n-1
放入括号中,因为中缀函数的优先级较低。
我建议你从here学习Haskell,它是初学者的伟大的指南。阅读前几章,它们将非常快速而且很好地运行,您将更深入地理解Haskell。