D. *_*nga 1 lisp clisp common-lisp
好的,所以我是lisp的新手,我一直在研究这个程序几天,了解lisp并研究lisp的某些部分,例如cons,cdr,let,funcall和其他一些部分.我正在尝试创造一种随机分配颜色的糖果机.我已多次运行此代码,起初我花了一段时间才停止获取随机函数的错误,现在它说我对于generate-candy-supply中的缺点有太少的争论.任何人都有任何关于去哪里和任何解决方案的建议?
到目前为止我的代码是......
(defvar candy-color '(yellow red blue green pink orange))
(defun generate-candy-supply (size)
(if (= 0 size)
(cons (nth (random (length candy-color)) candy-color))
(generate-candy-supply (- size 1))))
(defun candy-machine (supply-of-candy)
(function
(lambda ()
(prog1
(car supply-of-candy)
(setq supply-of-candy
(cdr supply-of-candy))))))
(defvar *gummy-bear*
(candy-machine (generate-candy-supply 4)))
(defvar *easter-egg*
(candy-machine (generate-candy-supply 6)))
(defun get-candy (machine)
(funcall machine))
Run Code Online (Sandbox Code Playgroud)
我的任务是......
CANDY计划的原型是
(defun get-candy (machine)
(funcall machine))
Run Code Online (Sandbox Code Playgroud)
在下面的样本中,我们定义了两个CANDY-MACHINE,一个是有4个糖果的软糖熊机器,另一个是有6个糖果的复活节蛋机器.示例代码如下所示:
(defvar *gummy-bear*
(candy-machine (generate-candy-supply 4)))
(defvar *easter-egg*
(candy-machine (generate-candy-supply 6)))
Run Code Online (Sandbox Code Playgroud)
此程序的示例运行如下所示:
[1]> (load 'candy.lisp)
;; Loading file candy.lisp ...
;; Loaded file candy.lisp
T
[2]> (get-candy *gummy-bear*)
BLUE
[3]> (get-candy *gummy-bear*)
BROWN
[4]> (get-candy *gummy-bear*)
YELLOW
[5]> (get-candy *gummy-bear*)
YELLOW
[6]> (get-candy *gummy-bear*)
NIL
[7]> (get-candy *easter-egg*)
BLUE
[8]> (get-candy *easter-egg*)
BROWN
[9]> (get-candy *easter-egg*)
GREEN
[10]> (get-candy *easter-egg*)
BROWN
[11]> (get-candy *easter-egg*)
YELLOW
[12]> (get-candy *easter-egg*)
BLUE
[13]> (get-candy *easter-egg*)
NIL
Run Code Online (Sandbox Code Playgroud)
如果你能帮助id高度欣赏它.我不是在寻找全面的答案,但如果你能指出我正确的方向,那将会有所帮助.如果代码中也有错误,你可以指出这些错误.
是的,你在cons这里的电话中几乎没有争论:
(defun generate-candy-supply (size)
(if ( = 0 size)
(cons (nth( random (length candy-color)) candy-color))
;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <= HERE
(generate-candy-supply ( - size 1))))
Run Code Online (Sandbox Code Playgroud)
cons需要两个参数,当你给它一个时.那么你用你的颜色做什么?
也正确缩进你的代码,现在它真的很难阅读.