저는 내장 함수와 동일한 코드를 작성하는 것을 좋아합니다. 항상 나를위한 훌륭한 운동입니다.Racket - 내장 멤버 함수 만들기
라켓에는 "member"라는 bult-in 함수가 있습니다.이 함수는 특정 요소가 목록 안에 있는지 확인합니다. true이면 함수는 나머지를 반환합니다./cdr o false이면 함수는 #f를 반환합니다. 예 : 나는 멋진 툴 트레이스 함께 사용하려고 할 때, 나는 부분적으로 성공 오전,
(require racket/trace)
(define (member-mine lista num)
(cond ((equal? (car lista) num) (cdr lista))
((equal? (car lista) '()) #f)
(else (member-mine (cdr lista) num))))
(define small-list (list 1 2 3 4 5 6 7 8))
(trace member-mine)
그리고 :
> (member 2 (list 1 2 3 4))
'(2 3 4)
> (member 9 (list 1 2 3 4))
#f
나는 다음과 같은 코드를했다.
콜링 :
(member-mine small-list 1)
결과 :
>(member-mine '(1 2 3 4 5 6 7 8) 1)
<'(2 3 4 5 6 7 8)
콜링 :
(member-mine small-list 8)
결과 :
>(member-mine '(1 2 3 4 5 6 7 8) 8)
>(member-mine '(2 3 4 5 6 7 8) 8)
>(member-mine '(3 4 5 6 7 8) 8)
>(member-mine '(4 5 6 7 8) 8)
>(member-mine '(5 6 7 8) 8)
>(member-mine '(6 7 8) 8)
>(member-mine '(7 8) 8)
>(member-mine '(8) 8)
<'()
문제는 주어진 목록에없는 요소를 호출 할 때입니다. 출력은 #F되어야한다 : 나는 빈 다루는 관리 어떻게
>(member-mine '(1 2 3 4 5 6 7 8) 9)
>(member-mine '(2 3 4 5 6 7 8) 9)
>(member-mine '(3 4 5 6 7 8) 9)
>(member-mine '(4 5 6 7 8) 9)
>(member-mine '(5 6 7 8) 9)
>(member-mine '(6 7 8) 9)
>(member-mine '(7 8) 9)
>(member-mine '(8) 9)
>(member-mine '() 9)
. . car: contract violation
expected: pair?
given: '()
:
반환(member-mine small-list 9)
오류인가?
감사합니다. (cond ((공백? lista) #f) (같은? cdr lista) num)))) 빈을 처리 할 다른 방법이 있습니까? –
확실하지 않습니다. 내 지식에 비어있는 경우는 재귀 함수의 기본 경우이기 때문에 적절한 종료를 보장하는 유일한 방법입니다. – VergeA