python实现
import sys
def move(src, dst, tmp, num):
if num == 1: print 'Move from', src, 'to', dst
else:
move(src, tmp, dst, num-1)
move(src, dst, tmp, 1)
move(tmp, dst, src, num-1)
move('left', 'right', 'middle', int(sys.argv[1]))
为河内塔提供正确的解决方案.但我的方案端口,
(define move
(lambda (src dst tmp num)
(if (= num 1) (printf "Move from ~s to ~s \n" src dst)
((move src tmp dst (- num 1))
(move src dst tmp 1)
(move tmp dst src (- num 1))))))
提供正确的解决方案但最终会引发以下错误.
procedure application: expected procedure, given: #<void>; arguments were: #<void> #<void>
我知道我的打印声明正在抛出错误,但我无法弄清楚为什么会发生这种情况?
解决方法:
((move src tmp dst (- num 1))
(move src dst tmp 1)
(move tmp dst src (- num 1)))
上面的代码不符合你的想法:)
要执行一系列表达式/语句,您需要这样的事情:
((λ ()
(move src tmp dst (- num 1))
(move src dst tmp 1)
(move tmp dst src (- num 1))))
Scheme中的语法糖是
(begin
(move ...)
(move ...)
(move ...)
...)
((move ...) (move ...) (move ...))
将被评估,代码似乎工作.但是一旦递归结束,
解释器将尝试执行它(op param1 param2)并且有位置
你收到错误#< void> ;;争论是:#< void> #<无效>