OCaml的河内塔

1 recursion ocaml tuples list 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 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

文件"induction.ml",第8行,字符8-27:错误:此表达式具有类型'列表但是表达式需要类型'a类型变量'a出现在列表中

我不知道如何解决它.任何人都可以帮我纠正我的错误吗?谢谢

Jef*_*eld 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 
Run Code Online (Sandbox Code Playgroud)

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