이 순간에 Lisp에 대해 배워야 할 가장 중요한 것은 내용이입니다.
C에서는 1+3
, (1)+3
, (((1+3)))
을 쓸 수 있으며 모두 같은 의미입니다. 혀짤배기에서 그들은 매우 매우 다르다 :
a
"는 변수 이름 a
의 가치"를 의미한다.
(a)
은 "함수의 반환 값이며 아무런 인자없이 호출 된 a
"을 의미합니다.
((a))
구문 오류입니다 (하지만 PPS 참조)
그래서, ((...))
와 모든 버전은 크게 잘못된 것입니다.
1
이라는 함수가 없으므로 첫 번째 버전도 좋지 않습니다.
는 당신이 필요로하는 것은 :
(if (and (typep a 'integer)
(typep b 'integer))
1
0)
참고 서식 및 들여 쓰기. Lispers는 들여 쓰기 코드를 이 아니고이 아니므로 적절한 들여 쓰기가 중요합니다. Emacs (그리고 다른 Lisp 특정 IDEs)가 lisp 코드를 들여 쓰기를합니다.
추신. 당신이 달성하려고하는 무엇에 대한 설명은 불분명하지만, 가장 쉬운 방법은 일반적인 기능을 사용하는 것입니다 수 있습니다 :
(defgeneric f (a b)
(:method ((a integer) (b integer))
(+ a b)))
(f 1 2)
==> 3
(f 1 'a)
*** - NO-APPLICABLE-METHOD: When calling #<STANDARD-GENERIC-FUNCTION F> with
arguments (1 A), no method is applicable.
PPS. 결국 합법적 인 ((...) ...)
이 표시됩니다., cond
:
(defun foo (a)
(cond ((= a 1) "one")
((= a 2) "two")
(t "many")))
(foo 1)
==> "one"
(foo 3)
==> "many"
또는 lambda forms :
((lambda (x) (+ x 4)) 5)
==> 9
하지만 아직 이들에 대해 걱정할 필요가 없습니다.
출처
2017-02-06 17:16:06
sds
첫 번째 것은 숫자 주위에 괄호를 제거 할 때 작동합니다 ('(1) (0)'을 '1 0'으로 변경). '(typep ... '정수) 대신'integerp'를 사용할 수도 있습니다. – jkiiski
답장을 보내 주셔서 감사합니다. –
다음 번에 코드와 오류 메시지를 복사하여 붙여 넣으십시오. 오류 메시지를 이해하는 방법을 알려 드리겠습니다. – sds