gpt4 book ai didi

python - 汉诺塔,python -> 方案,显示错误。我错过了什么?

转载 作者:太空狗 更新时间:2023-10-30 03:07:56 25 4
gpt4 key购买 nike

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>; arguments were: #<void> #<void>

关于python - 汉诺塔,python -> 方案,显示错误。我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com