2016-12-20 6 views
1

리스트와리스트리스트에서 멤버 함수가 어떻게 작동하는지 이해하려고합니다.
예입니다.Common Lisp에 다단계리스트가있는 멤버 함수

(member '(A 6) '((A 7) (B 6) (E 6) (D 5)) :test #'string-equal :key #'second) 

는 I 목록 '(6)의 두 번째 인수는 입력의 제리스트의 멤버 인 경우 멤버 함수 확인하고 싶다. 커먼 리스프 회신 때문에 대답은,

true 

하지만 난 뭔가를 잘못하고 있어요해야한다 :

Error: Cannot coerce (A 6) to type STRING. 

그래서 어떻게 첫 번째 목록에서 두 번째 인수를 할 수 있습니까? 도움 주셔서 감사합니다.

답변

5

은 당신이없는 것은 :key 인수가 member의 첫 번째 인수에 적용되지 것입니다.

또 다른 것은 second 아닌 기호를 반환 할 것입니다. 따라서

: 리턴 값 꼬리 아니라 유사한리스트 요소임을

(member 'A '((A 7) (B 6) (E 6) (D 5)) :test #'string-equal :key #'first) 
==> ((A 7) (B 6) (E 6) (D 5)) 
(member 'C '((A 7) (B 6) (E 6) (D 5)) :test #'string-equal :key #'first) 
==> NIL 
(member 'E '((A 7) (B 6) (E 6) (D 5)) :test #'string-equal :key #'first) 
==> ((E 6) (D 5)) 

참고.

(member nil '(1 2 nil 3)) 
==> (NIL 3) 
(find nil '(1 2 nil 3)) 
==> NIL 
(find t '(1 2 nil 3)) 
==> NIL 
: 이 아무것도 nil을 발견하지 않으며 찾는 구별, 즉 술어로서 member의 사용을 허용하는 것입니다