Haskell n:整数列表的第n个元素。[家庭作业]

Haskell n:整数列表的第n个元素。[家庭作业],haskell,recursion,Haskell,Recursion,Hi im需要从[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它返回myx元素==input元素的位置 作为逻辑,我想我需要保持这个函数的递归次数是多少?或者其他可用的方法 新代码 你就不能用它吗

Hi im需要从[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
它返回myx元素==input元素的位置

作为逻辑,我想我需要保持这个函数的递归次数是多少?或者其他可用的方法

新代码 你就不能用它吗

无论如何,您的函数(
getelemt(x:xs)i
)应该是这样工作的:

  • 如果
    i
    为0,则函数返回
    x
    (作为参数获取的列表的第一个元素:
    x:xs

  • 否则它将递归,返回
    getelemxs(i-1)


OP更新后编辑:
  • 您不需要
    getelemt\un=0
    :它说
    getelemt
    应该始终为0,因为它始终匹配

  • getelemt xs n-1
    相当于
    (getelemt xs n)-1
    ,这不是您想要的,您需要将
    n-1
    放在括号中,因为中缀函数的优先级较低



  • 我建议你学习Haskell,它是一本很棒的初学者指南。阅读前几章,它们将非常快速而准确地运行,您将更加深入地理解Haskell。

    我已经有一段时间没有研究Haskell了,但您的尾部递归永远不会结束,因为没有终止。尝试“否则=getelemt xs(n-1)”。只是一次疯狂的刺杀;)谢谢,但我不认为这是这里不需要的;-)请为负数添加一些错误-因为你的-固定递归不会终止,因为我刚刚学习了abt
    从你的答案,但我不能解决这个函数的问题@苏丹塔:你有什么问题
    i
    表示需要移动多少个元素(从第一个元素开始):当值为0时,您已找到您的值。如果大于0,则表示您需要继续:放弃第一项(因此您向前迈出了一步),并将
    i
    减少一。如果你写了/理解了问题中的代码片段,那么编写这样一个函数的语法应该相当简单。我完全理解了这个理论,我的问题是我不能把代码写出来,用新代码更新
    getelemt::[Int]->Int->Int
    getelemt _ n = 0
    getelemt (x:xs) n | n==0 = x
                      | otherwise = getelemt xs n-1