(defparameter *todo* '("Conquer the world" "Bake cake"))
(defun how-many-items (list)
if (list
(1+ (how-many-items (cdr list)))
0))
(defun add-item (item)
(cons item *todo*)) ; Attempt to add an item to the todo list
(princ (how-many-items *todo*))
(princ '#\newline)
(add-item "Write a book")
(princ (how-many-items *todo*))
(princ '#\newline)
(princ (cdr *todo*))
(princ '#\newline)
나는 여전히 Lisp을 배우고있다. 그러나 나는 목록에 크기가 "책을 쓰자."라는 항목을 추가 할 때 추가하지 않는 이유를 이해할 수 없다. call은 "Bake Cake"를 반환하고 아이템의 수는 항상 2입니다.요소가 목록에 추가되지 않음
출력은 다음과 같습니다
2
2
(Bake cake)
* cons *은 (는) 해당 인수를 수정하지 않습니다. 대신에 * push *를 사용할 수 있습니다. http://www.lispworks.com/documentation/HyperSpec/Body/m_push.htm –
오, 알겠습니다. 고마워요! 나 또한 defparameter를 다시 시도하고 이제는 작동합니다. 의심 스럽다면 이제는 깨끗한 지 또는 한 번 이상 defparameter하지 않을지 의심됩니다. 나는 그것이 좋지 않은 것처럼 느낀다. 그러나 나는 확실하지 않다. –
* defparameter *를 * defvar *와는 달리 두 번 이상 재사용 할 수 있지만 일반적으로 (setf \ * todo \ * (cons "blabla"\ * todo \ *)와 같은) ("blabla"\ * todo \ *를 누르십시오). –