2012-06-05 13 views
0

나는 일반 매개 변수 및 옵션 paremater가 n 인 LISP에서이 기능이 있습니다LISP는 - 선택적 매개 변수와 함수를 호출 할 수 없습니다

(defun lastplus (x &optional (n 0)) //default value for n is 0 
    (if (listp x) //if x is a list 
     (
      (list (length x) (n)) //return list that contains length(x) and n 
     ) 
     (n) //else return n 
    ) 
) 

나는 청취자 파일의 기능을 사용하려고하지만 그것은 나에게 오류를 제공을 :

CL-USER 13 : 4 > (lastplus 2 8) 

Error: Undefined function N called with arguments(). 

은 내가이 오류를받을 수 있나요 당신은 알고 계십니까 왜 LispWorks 6.0.1

를 사용할 수 있습니까?

+1

'//'은 유효한 토큰입니다. 특히 주석을 추가하지 않습니다. 코멘트는';'또는'# |''| ''에 포함됩니다. – Svante

+0

당신 말이 맞아요. 나는이 질문에 "//"을 덧붙였다. –

+0

Btw., 'CL-USER 13 : 4>'는 사용자가 디버그 레벨에 있음을 의미합니다. 최상위 수준으로 돌아가고 싶을 수도 있습니다. 다음 명령을 사용하십시오. –

답변

11
(defun lastplus (x &optional (n 0)) //default value for n is 0 
    (if (listp x) //if x is a list 
     (
      (list (length x) (n)) //return list that contains length(x) and n 
     ) 
     (n) //else return n 
    ) 
) 

서식 스타일이 Lispy가 아닙니다.

리스프 형식에 적응 :

(defun lastplus (x &optional (n 0)) ; default value for n is 0 
    (if (listp x) ; if x is a list 
     ((list (length x) (n))) ; return list that contains length(x) and n 
    (n))) 

당신은 말했다 : cannot call function with optional parameter.

물론 가능합니다. 오류 메시지가 다른 것을 말했습니다. 선택적 매개 변수를 사용하여 함수를 호출 할 수 있습니다. 함수 내부에 오류가 있습니다.

오류는 말한다 : Error: Undefined function N called with arguments().

그래서 존재하지 않는 N라는 함수를 호출한다. 논쟁이 없다. (n)과 같습니다. 코드를 확인하십시오 - (n)을 찾을 수 있습니까?

이제 자신에게 물어 :

  • 무엇을 같은 함수 호출 모습? 대답

  • : 여는 괄호, 기능, 아마도 일부 인수는 괄호 닫는 등의 (n)보고 무엇을

  • ?

  • 답변 : 이것은 함수 호출처럼 보입니다.

  • 원하는 것이 맞습니까?

  • 물론 아닙니다.

  • 무엇을 원하셨습니까?

  • 가변 값입니다.

  • 어떻게 생겼습니까?

  • 단지 n입니다.

  • 다른 오류가 있습니까?

  • 흠.

  • 세 번째 줄의 양식은 어떻게됩니까?

  • 잘못된 것처럼 보입니다.

  • 너무 잘못되었습니다. 같은 오류..

+0

인상적 .. 당신은시 작가가 될 수 있습니다 .. 지금 나는 내 오류를 봅니다. 나는 단지 n ...을 써야했습니다. 고마워요. –

+0

불행히도, "(n) "~ n ... 지금 문제가 뭐야? 덕분에 –

+0

@ זאבי כהן : 질문에이 새로운 버전의 코드를 추가하면 다시 보게됩니다. –

관련 문제