저는 lisp에 익숙하지 않습니다. 목록이 비어 있는지 간단한 확인을 시도하고 있습니다. 로 정의 make-node
기능을 사용하는 경우Lisp (null (QUOT NIL))은 NIL을 반환합니다.
(defun test (list)
(if (null (caddr list))
(make-node 1)
(caddr list)))
:
(defun make-node (atm)
(cons atm `(`() `())))
가 (make-node 6)
을 실행할 때 내가 얻을 : 테스트를 위해 나는이 테스트 함수를 만들어
(6 (QUOTE NIL) (QUOTE NIL))
이되는 내가 필요.
그때 그때 얻을 수있는 (test (make-node 6))
전화 : 테스트에서 (caddr list)
입니다
(QUOTE NIL)
합니다. (null (QUOTE NIL))
을 실행하면 T
을 얻습니다.하지만 원하는 테스트 함수에서 실행하면 NIL
가 나타납니다.
내 질문에 왜 이것이 null인지 확인하면 왜 대신 NIL
이 나옵니까?
감사합니다. 이해하기 쉽습니다. 그것을 de-quote하는 방법이 있습니까? 또는 내부 목록이 비어 있는지 확인하는 방법을 알 수 있습니까? –
인용 부호 생략은'eval'에 의해 수행되지만,'eval'을 피하는 해결책은 일반적으로 더 좋습니다. 실베스터 (Sylvester)가'make-node '를 바꾼다는 제안이 문제를 해결한다고 가정하지만, 그렇지 않으면''(그리고 (eql (첫 번째 세 번째 목록))' '(두 번째 (세 번째 목록) . –