gpt4 book ai didi

list - F# : Writing a function that builds a list of tuples recursively, 语法错误

转载 作者:行者123 更新时间:2023-12-04 02:20:15 25 4
gpt4 key购买 nike

我正在尝试编写一个返回 List 的递归函数,但我在语法上遇到了一些问题。

函数应该在递归结束时返回一个空列表,否则一个元组 (int * int) 与递归调用自身返回的列表合并:

let rec foobar () : List<int * int> =
if (recursionIsEnded) then
[]
else
foobar () :: (10, 10) // this is wrong
// (10,10) works, but I need to concatenate it with the elements returned by foobar recursive call

有人可以向我解释我做错了什么吗?

编辑:

我会尽力提供更多细节。其实我的功能有点复杂。我正在遍历一个二维数组,并用满足特定条件的数组索引元素构建一个元组列表。实际上这是我的代码:

let rec GetSameColorNeighs(grid : Option<Ball> [,], row : int , col : int, color : Microsoft.Xna.Framework.Color) : List<int * int> =
if (row < 0 || col < 0 || row > MaxLineNumber - 1 || col > BallsPerLine - 1) then
[]
else
let ball = grid.[row,col]
match ball with
|Some(ball) ->

if (!ball.visited = false || not <| ball.color.Equals(color)) then
[row , col]
else
ball.visited := true
(row,col) ::GetSameColorNeighs(grid, row + 1, col + 1, color) :: GetSameColorNeighs(grid, row - 1, col - 1, color)

|None -> []

所以这里还有 2 个问题:):

  1. 如何修改下一行使其通过编译?

    (row,col) ::GetSameColorNeighs(grid, row + 1, col + 1, color) ::  GetSameColorNeighs(grid, row - 1, col - 1, color) 
  2. 有更好的方法吗?

我不关心列表的元素顺序。

最佳答案

Daniel 的解决方案在我看来不错,但您不需要使用可变状态 (ResizeArray)。相反,您可以将 loop 函数编写为使用 yield 生成结果并使用 yield! 进行递归调用的序列表达式:

let GetSameColorNeighs (grid:Option<Ball>[,], row, col, color:Color) =
let rec loop (row, col) = seq {
if not (row < 0 || col < 0 || row > MaxLineNumber - 1
|| col > BallsPerLine - 1) then
let ball = grid.[row,col]
match ball with
| Some(ball) ->
if (!ball.visited = false || not <| ball.color.Equals(color)) then
// Not sure what you want here - yield items using 'yield'?
// [row , col]
else
ball.visited := true
yield row, col // Add single item to results
yield! loop(row + 1, col + 1) // Add all generated to results
yield! loop(row - 1, col - 1) // -- || --
| None -> () }
loop(row, col) |> Seq.toList

关于list - F# : Writing a function that builds a list of tuples recursively, 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com