好的,所以我是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 …
Run Code Online (Sandbox Code Playgroud) 我一直在编写这段代码并研究递归运行函数的方法,并让它返回一个单词"the"被删除的列表.
我是Common Lisp的新手,我已经了解了基本功能,如setq, cons, cond, equal, car
和cdr
.
当我运行代码时,我不断获取列表中的最后一个元素,如果有一个the
后面的元素,则接下来.
谁能告诉我我做错了什么并引导我朝着正确的方向前进?
允许的Common Lisp构造是:COND
,EQUAL
(或EQUALP
)CONS
,CAR
和CDR
,以及Common Lisp的一些基本原始构建块.
我不能使用任何预定义的函数来实际消除.
它应该是这样的样子.样品运行:
(filter-out-the '(There are the boy and THE girl and The Rose))
Run Code Online (Sandbox Code Playgroud)
返回:
(THERE ARE BOY AND GIRL AND ROSE)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
(defun list_member (x L)
(cond ((null L) nil)
((equal x (car L))
(list_member x (cdr L)))
(T (cons (car l) (list_member x (cdr L))))))
(defun filter-out-the (L)
(setq …
Run Code Online (Sandbox Code Playgroud)