使用列表递归 - Haskell

use*_*972 5 recursion haskell list

我正在尝试编写一个递归函数,该函数将包含整数列表的列表作为输入并返回类型([Int],Int)的元组.([INT],智力)

这是一个"棋盘游戏",你提供了一个板:

 [[5,4,3,8,6],
  [0,2,1,0,7],
  [0,1,9,4,3],
  [2,3,4,0,9]]
Run Code Online (Sandbox Code Playgroud)

这将是一个4行5列的电路板.列表中的数字是"硬币值".这个棋盘游戏的目标是从列表的顶部到收集硬币的底部.您可以从顶行的任何位置开始向下移动,您可以直接向下或向左或向右对角线.您需要的路径将为您提供最大的总硬币值.

我创建了第一个函数,您输入路径列表[([Int],Int)]并返回具有最大硬币值的路径([Int],Int).

现在我需要创建一个函数来实际生成我将输入到第一个函数中的路径列表.

我知道我将不得不使用递归.我将输入电路板(如上图所示)和起始列.我将不得不取列号,然后创建所有可能路径的列表.如果我从列号开始,我的下一个可能的步骤是位置(在下一行) - 相同的列号,列号-1和列号+1.我需要递归调用它直到我到达底部.

我怎样才能存储这些路径步骤,然后存储所有可能路径的最终列表?

([Int],Int) - [Int]是列表/列号或行中的位置,Int是硬币值.

我是haskell的新手,虽然我明白自己要做什么,但编写代码真的很难.

scl*_*clv 1

您不会在惯用的功能代码中将中间值“存储”在某些变量中。相反,您可以将它们保留为累积参数,并使用诸如foldr 之类的函数传递该参数。

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:foldr