OCaml的河内塔

时间:2013-10-05 21:19:21

标签: list recursion ocaml tuples towers-of-hanoi

我是初学者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出现在'列表

我不确定如何修复它。 任何人都可以帮我纠正我的错误吗?感谢

1 个答案:

答案 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 

我不知道结果代码是否正确,但我希望这会让你再次进入。