我是初学者OCaml程序员试图在解决方案中创建一个函数来解决OCaml中的河内问题塔的问题,表示一个移动列表,其中“移动”存储在窗体的元组中(startPeg, endPeg)。
这是我到目前为止所做的:
type peg = A | B | C
type move = peg * peg
let towers (m : int) : (move list) =
let rec solve n a b c = match n with
|0 -> []
|_ -> (solve (n-1) a c b) :: (a,b) :: (solve (n-1) c b a) in
solve m A B C
我收到错误:
文件“induction.ml”,第8行,字符8-27: 错误:此表达式的类型为“列表” 但预计表达式为'a 类型变量'a出现在'列表
中我不确定如何修复它。 任何人都可以帮我纠正我的错误吗?感谢
答案 0 :(得分:7)
运算符::
将元素添加到列表的头部。您正在使用它来连接列表。如果将第一个::
更改为列表并置运算符@
,则代码将编译。
type peg = A | B | C
type move = peg * peg
let towers (m : int) : (move list) =
let rec solve n a b c = match n with
|0 -> []
|_ -> (solve (n-1) a c b) @ (a,b) :: (solve (n-1) c b a) in
solve m A B C
我不知道结果代码是否正确,但我希望这会让你再次进入。