저는 새 언어로 Lisp을 선택하려고합니다. 함수의 일부가 전달 된 목록의 각 요소에서 작동하도록하는 방법에 대해 몇 가지 문제를 겪고 있습니다. 이 문제를 가져 오는 방법을 학습의 목적 defun을 인수로 사용하여 목록을
, 나는리스트의 요소 중 하나가 0 인 경우 까악 까악하지 않는 부문의 상당히 기본적인 양식을 작성하려고 (하지만 대신 0 반환)(defun divtest (elements)
(dolist (x elements)
(if (zerop x) 0())
(/ elements)))))
을하고있다 산출 어느
(divtest '(20 2 5))
:로
나는 이것을 실행하려고
*** - /: (20 2 5) is not a number
실패 지점은 함수에 전달하기 전에 목록의 요소를 "추출하지"않는다는 사실에 뿌리를 둔 것처럼 보입니다.이 경우 x는 0으로 평가되지 않으므로 의도 한대로 작동하지 않습니다. 내가 맞다면 누군가이 "추출"을 수행하는 방법을 말해 줄 수 있습니까?
참고 :이 질문은 one that I've asked earlier 관련,하지만이 특정 문제를 의도 한대로 이전 대답의 일부가 실제로 작동 할 수있는 대한 불분명 해요으로 나는 기초에 더 가기로 결정한다
APPLY 대신 REDUCE 사용 –
그냥 궁금 해서요 : 그 유틸리티는 무엇이겠습니까? – Hugh
이렇게하면 CALL-ARGUMENT-LIMIT (표준 CL 상수) 최대 길이뿐만 아니라 임의의 긴 목록을 처리 할 수 있습니다. Common Lisp에는 구현에 따라 최대 인수 개수가 있습니다. 이 번호는 50 이상이어야합니다. 즉, 구현은 50 개의 인수 (또는 그 이상) 만 지원하면됩니다. 따라서 위의 함수는 숫자 목록이 함수 /를 호출하는 인수의 수보다 길 때 일부 구현에서는 실패 할 수 있습니다. –