河内的塔,python – >计划,显示错误.我错过了什么?

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&gt ;;争论是:#< void> #&LT无效&GT

上一篇:作图的配色


下一篇:ActiveMQ|客户端原理及源码分析