F# 中使用递归和帮助程序函数的两个列表的笛卡尔积



我正在尝试获取两个列表的笛卡尔乘积,但收到一个错误,指出我的函数产品帮助未定义。我不太确定如何在没有帮助程序函数的情况下解决这个问题,我什至不确定如果它让我调用我的帮助程序函数,这是否有效。

let rec product A B =
match A, B with
| [], [] -> [ [] ]
| e1::rest1, [] -> productHelp A B :: product rest1 B
let rec productHelp A B =
match A, B with
| [], [] -> [ [] ]
| _, [] -> [ [] ]
| e1::rest1, e2::rest2 -> [e1::e2]::productHelp A rest2

/home/codio/workspace/program/set/set.fs(144,24): error FS0039: The value or constructor 'productHelp' is not defined. Maybe you want one of the followi
ng:   product [/home/codio/workspace/program/set/set.fsproj]
5 Warning(s)
1 Error(s)

例:

// Example:
//   A = [1;2]
//   B = [3;4]
//   ==> [ [1;3]; [1;4]; [2;3]; [2;4] ]
// 

在 F# 中,必须对文件中的声明进行排序,以便声明仅引用其上方的声明。也就是说,在产品函数之前声明帮助程序。

使用理解呢?

let product A B = [for a in A do for b in B -> [a; b]]

相关内容

  • 没有找到相关文章

最新更新