Haskell 递归映射函数

Haskell 递归映射函数,haskell,recursion,map-function,Haskell,Recursion,Map Function,我有一个函数,包含三个变量。变量y由另一个函数调用,该函数将其转换为列表 我想将map应用于这个变量列表。这样我就可以一次使用列表中的所有元素递归函数 因为这个函数接受三个变量,其中一个是一个列表,我想调用这个函数并应用列表中的每个元素,直到列表为空。我不知道如何做到这一点,每次都返回剩余的两个变量 search :: State -> Int -> Int -> Int search state n1 n2 = case n1 of 0 -> 1 * n2

我有一个函数,包含三个变量。变量y由另一个函数调用,该函数将其转换为列表

我想将map应用于这个变量列表。这样我就可以一次使用列表中的所有元素递归函数

因为这个函数接受三个变量,其中一个是一个列表,我想调用这个函数并应用列表中的每个元素,直到列表为空。我不知道如何做到这一点,每次都返回剩余的两个变量

search :: State -> Int -> Int -> Int 
search state n1 n2 = case n1 of 
  0 -> 1 * n2
  num -> average( map (search s) n1-1 n2)
     where s = turnStateToList s
我还没有包括要列出的状态,但我认为不需要回答这个问题。基本上,它将产生一个新的州的名单。把它想象成一棵树

我得到的错误是

* map is applied to too many functions 
* y has been given arguments however yy takes in 0 arguments 

我理解它是如何得到这些错误,但我不知道还有什么可以做来修复它。我试着把括号改大,这只会产生一个不同的参数错误。

正如对你的问题的评论中提到的,在Haskell中,你可以递归地定义变量,所以s=turnStateToList s并不意味着你要做一个新的s,它得到旧s的turnStateToList的值。相反,它根据自身递归地定义s,这导致无限表达式s=turnStateToList turnStateToList turnStateToList。。。这可能不是你想要的

要在保持某些参数不变的情况下映射列表,可以引入一个匿名函数,在这种情况下,我想您需要\s->search s n1-1 n2 n1-1周围的括号是必需的

哦,我想你把州和州混在一起是偶然的

因此,只要对您的样式进行最小的更改,我认为您需要以下代码:

搜索::状态->整数->整数->整数 搜索s n1 n2=的情况n1 0->1*n2 数值->平均地图\s->搜索n1-1 n2' 其中s'=转向政治家s 我认为避免case语句和避免将turnStateToList s绑定到变量更为惯用,然后您会得到以下代码:

搜索::状态->整数->整数->整数 搜索u0 n2=n2 搜索s n1 n2=平均$map\s'->搜索s'n1-1 n2转州列表s
其中y=anotherfunc y mj没有意义,因为你用y来定义y,所以是一个递归定义。坦白地说,这些都没有多大意义。请举例说明您实际希望如何在实践中使用func。顺便说一句,不要调用函数func!我想将map应用于变量y,这样每次调用函数时,都会给出y列表中不同的y值。我正在努力理解它的真正含义。你能展示几个函数输入和期望输出的例子吗?我已经更新了这个问题。感谢您的帮助和反馈。您能提供一些输入和预期输出吗?我们很难弄清楚你到底想做什么,这可能会有很大帮助。事实上,我真的试过了,但不知道你们在这里想要实现什么。