2013-10-10 1 views
0

두 항목이 있습니다. 첫 번째 요소 인 a-child은 첫 번째 요소로 배열을 포함하고 나머지 요소로 일부 문자열을 포함하는 목록입니다. 다른 하나 인 mapped은 많은 배열을 포함하는 목록입니다. 검사를 통해 a-childmapped에 있음을 쉽게 알 수 있지만, 나를 찾을 수있는 기능을 찾을 수는 없습니다.배열이 lisp의 목록 안에 있는지 테스트하십시오.

아래의 불쌍한 리스프 스타일에 사과드립니다. 며칠 전 시작 했으므로 모든 규칙을 아직 수립하지 않았습니다.

(defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R")) 
(defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9))))) 
(find (car a-child) mapped) ;;returns NIL 
(member (car a-child) mapped) ;;returns NIL 
(position (car a-child) mapped) ;;returns NIL 
(equalp (car a-child) (car mapped)) ;;returns T 

배열 목록 내에서 배열을 찾는 데 사용할 수있는 기능은 무엇입니까 ?? 고맙습니다. 표시

답변

7

답변서

시퀀스 기능은 당신이 그들에게 :test #'equalp를 전달하면 T을 반환합니다 "NIL을 반환합니다."

커먼 리스프에서

기본 Two-Argument Test 이유는 eql입니다.

그것은 4 ANSI CL 표준에 의해 제공 범용 비교 함수 사이의 가장 합리적인 선택이다 (!) :

  • eq 너무 구현에 의존 한 아마에 원하는대로 작동하지 않습니다 숫자 및 문자

  • equalequalp 거대한 개체에 대해서는 시간이 오래 걸리고 순환하는 개체에 대해서는 절대로 종료되지 않을 수 있습니다.

the difference between eq, eql, equal, and equalp in Common Lisp도 참조하십시오.

+0

매우 유용합니다. 매우 감사합니다! – Free