좋아요, 그래서 저는 Lisp에 익숙하지 않고 며칠 동안이 프로그램을 작업하여 lisp을 알아보고 cons, cdr과 같은 lisp의 특정 부분을 연구했습니다 ,하자, funcall 및 다른 것들. 무작위로 색상을 분배하는 사탕 기계를 만들려고합니다. 나는이 코드를 여러 번 돌렸고, 처음에는 무작위 함수에 대한 에러를 멈추기 위해 잠시 시간이 걸렸지 만 이제는 사탕 공급에있어서의 단점에 대한 논의가 너무 적다는 것을 말하고있다. 어느 누구에게 가야할지와 그에 대한 해결책에 대한 제안이 있습니까?Lisp 무작위 화하고 목록에서 다른 것으로 끌어 오기 두 개의 함수 사용
는 지금까지 내 코드(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))
내 할당에 .. 사탕 프로그램의 프로토 타입은 다음과 같은 샘플에서
(defun get-candy (machine)
(funcall machine))
입니다
, 우리를 정의는 ...이다
두 캔디 기계, 하나 gummy - 곰 4 사탕이있는 기계, 다른 6 사탕을 가진 부활절 달걀 기계입니다. 샘플 코드는 다음과 같습니다 :이 프로그램의
(defvar *gummy-bear*
(candy-machine (generate-candy-supply 4)))
(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
당신이 그것을 매우 감사 ID를 도울 수 있다면. 나는 완전히 부 풀리는 대답을 찾고있는 것이 아니라, 올바른 방향으로 나를 가리킬 수 있다면 그것이 도움이 될 것입니다. 코드에 오류가있는 경우이를 지적 할 수 있습니다. 당신이 하나를 제공 할 때,
(defun generate-candy-supply (size)
(if (= 0 size)
(cons (nth(random (length candy-color)) candy-color))
;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <= HERE
(generate-candy-supply (- size 1))))
는 두 개의 인수가 필요합니다 :
이 작품은 고맙습니다. –