首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LISP救命!糖果机分配器

LISP救命!糖果机分配器
EN

Stack Overflow用户
提问于 2014-12-10 03:48:14
回答 1查看 95关注 0票数 0

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

这是我的代码:

代码语言:javascript
复制
 ;;; 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)))

并且示例运行应该如下所示:

代码语言:javascript
复制
[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
EN

回答 1

Stack Overflow用户

发布于 2014-12-10 07:34:25

您的问题是函数generate-candy-supply。它有两个分支,依赖于num。如果不是0,您可以使用(1- num)进行递归,而不做任何其他操作。当num0时,返回一个以*colors*的随机元素开头的列表,后面跟着*colors*的元素。这将始终生成一个包含确切7个元素的列表。

我现在就把它放在这里,这样你就可以试着找出一个解决方案。请随时在评论中提出进一步的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27393012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档