문자, 문자열 또는 숫자가 목록에 있는지 확인하는 Lisp 프로그램을 만들려면 어떻게해야합니까?Lisp 목록에 프로그램이 있습니다.
(list-contains '(1 a 2 d 2 5) 'a) => T
(list-contains '(1 a 2 d 2 5) 'x) => NIL
문자, 문자열 또는 숫자가 목록에 있는지 확인하는 Lisp 프로그램을 만들려면 어떻게해야합니까?Lisp 목록에 프로그램이 있습니다.
(list-contains '(1 a 2 d 2 5) 'a) => T
(list-contains '(1 a 2 d 2 5) 'x) => NIL
당신은 그렇지 않은 경우 x는 목록 또는 NIL에있는 경우 X를 반환 (find x the-list)
를 사용할 수 있습니다.
(find 'a '(1 a 2 d 2 5)) ; A
(find 'x '(1 a 2 d 2 5)) ; NIL
숙제이기 때문에 교수님이 알고리즘을 구현하는 것을보고 싶을 것입니다. 이 시도 :
그렉의 솔루션이 구현해야합니다 것입니다 (여기서 자동차가 비어 있지이었고, 비교 기호 아니라는 것을 암시). 그러나 그것을 추가하고 싶다면, 당신이 그것에 머리를 쓰지 않았다면, Little Schemer은 이런 종류의 훌륭한 소개입니다. 사본을 가져 오거나 Google 도서에서 미리보기를 열고 "회원?"을 검색하십시오. 그들은 당신이 기대하는 것을합니다 (즉, 차가 평등한지 확인하십시오, 그렇지 않은 경우 cdr에 재발행합니다). 그러나 그들은 그것을 추적하고 각 단계에서 질문을합니다.
매우 길거나 값 비싼 책은 아니지만 읽은 후에는 이런 종류의 문제에 접근하는 방법에 대해 자연스러운 느낌을 갖게됩니다. 그들은 모두 똑같은 것으로 끓어 내려 간다. 목록은 우리가 빈 목록에 도달했는지 묻고, 그렇지 않다면 차로 뭔가를하거나 cdr에서 되풀이한다.
나는 당신에게 position
기능을 권장합니다. 목록에서 요소의 위치를 반환하고 (첫 번째 위치는 0) 그렇지 않으면 NIL을 반환합니다.
position
(position 'a '(1 a 2 d 2 5)) ; 1
(position 'x '(1 a 2 d 2 5)) ; NIL
는
find
비해 이점을 갖는다. 심볼
'NIL
이 목록에 있는지 알 수 있습니다.
(position 'NIL '(1 a NIL d 2 5)) ; 2
(position 'NIL '(1 a 2 d 2 5)) ; NIL
그러나
,(find 'NIL '(1 a NIL d 2 5)) ; NIL
(find 'NIL '(1 a 2 d 2 5)) ; NIL
그래서
find
와 다른 하나의 경우를 구별 할 수있는 방법이 없습니다.
지금까지 무엇을 가지고 계셨습니까? – Stephen
A와 X는 기호, btw입니다. –