LISP救命!糖果机分配器

LISP救命!糖果机分配器,lisp,common-lisp,Lisp,Common Lisp,嘿,伙计们,我是新来的,不知道你们能不能给我点帮助。我正在创建一个随机分配颜色的糖果机。我已经运行了这个代码,它为(获取糖果小熊)运行了7次,但应该运行4次,直到零。 这是我的密码: ;;; function get-candy (defun get-candy (machine) (funcall machine)) ;;; variable colors (defvar *colors* '(red blue green brown yellow purple)) ;;; func

嘿,伙计们,我是新来的,不知道你们能不能给我点帮助。我正在创建一个随机分配颜色的糖果机。我已经运行了这个代码,它为(获取糖果小熊)运行了7次,但应该运行4次,直到零。

这是我的密码:

 ;;; function get-candy
(defun get-candy (machine)
  (funcall machine))

;;; variable colors
(defvar *colors* '(red blue green brown yellow purple))

;;; function generate-candy-supply
(defun generate-candy-supply (num)
 (if (= 0 num)
    (cons (nth (+ 1 (random (- (length *colors*) 1))) *colors*) *colors* )
    (generate-candy-supply (- num 1))))


;;; function candy-machine
(defun candy-machine (candy)
  (function
    (lambda ()
      (prog1 (car candy)
        (setq candy (cdr candy))))))


;;; variable gummy-bear
(defvar *gummy-bear*
  (candy-machine (generate-candy-supply 4)))

;;; variable easter-egg
(defvar *easter-egg*
  (candy-machine (generate-candy-supply 6)))
示例运行应如下所示:

[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

您的问题是函数
生成糖果供应
。它有两个分支,具体取决于
num
。如果不是
0
,则使用
(1-num)
进行递归,而不执行其他操作。当
num
0
时,您将返回一个列表,该列表以
*colors*
的随机元素开始,后跟
*colors*
的元素。这将始终生成一个正好包含7个元素的列表

我现在就到此为止,这样你就可以试着想出一个解决办法。欢迎在评论中提出进一步的问题。

这看起来很像几周前,提问者说,“我正在尝试创建一个随机分配颜色的糖果机。”询问家庭作业不是问题,但通常最好弄清楚这一点,并且很可能提供作业参考(因为从作业中复制任何代码都是剽窃)。