gpt4 book ai didi

random - Common Lisp 随机骰子

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:55 29 4
gpt4 key购买 nike

我是 c 的初学者。 Lisp,实际上我的第一个代码有一些问题。主题是带有随机数的“骰子游戏”。如果你得到两个 1 你赢了,如果你得到两个 6 你也赢了。

首先我写了这段代码:

(defun dice ()
(+ (random 6) 1))


(defun dicegame (dice dice)
(and (and (or
(equal (print (dice)) 1)
(equal (print (dice)) 6))
(or
(equal (print (dice)) 1)
(equal (print (dice)) 6)))
(or (equal (print (dice)) (print (dice))))))

(dicegame (dice) (dice))

它不工作。我得到的结果有 6 个数字是零,我得到的结果是 for ex。 3 5 4 5 3 4 这是正确的。我不明白。

比起我写了一个正在运行的新的:

(defun dicegame-s (dice dice)
(or (and (equalp (print (dice)) 1)
(equalp (print(dice)) 1))
(and (equalp (print(dice)) 6)
(equalp (print(dice)) 6))))

我的问题是:为什么第一个不起作用而第二个起作用。

谢谢!

最佳答案

首先,dicegame-s 不是真正 工作。您的代码存在一些问题:

  • dicegame 函数的所有参数都具有完全相同的名称

这应该会使代码解析失败。您可以将它们命名为 (dice-1 dice-2)

  • 您不使用传递给函数的参数

在您的函数中,您使用(dice),这是一个函数调用。因此,您无需使用赋予函数的值,而是每次都掷一个新的骰子!

因此,当您编写 (dicegame (dice) (dice)) 时,就是您掷骰子的时候;该函数仅检查值,并告诉您是否赢了。

  • 打印太多了

print 函数打印一个值并返回它;这就是为什么有时 dicegame 有多达 6 个值的原因,因为每个 (print (dice)) 都会写入其输出。事实上,即使在 dicegame-s 中,如果两个骰子都是 6,也会打印 3 个结果。

与其每次都调用 print,不如调用一次——在函数的开头或结尾,或者函数之外的某个地方。

一个工作示例

要纠正之前的错误,您可以这样做:

(defun dicegame (dice-1 dice-2)
(or (and (equalp dice-1 1)
(equalp dice-2 1))
(and (equalp dice-1 6)
(equalp dice-2 6))))

(dicegame (print (dice)) (print (dice)))

关于random - Common Lisp 随机骰子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800375/

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