2013-09-16 2 views
2

Напишите процедуру, которая называется direct-num-occurs? который проверяет, происходит ли число в списке номеров. Примеры:Проверка наличия числа в списке номеров

> (direct-num-occurs? 1 '(2 3 1 4)) 
;=> #t 
> (direct-num-occurs? 1 '(2 3 5 4)) 
;=> #f 

Это то, что я пробовал:

(define direct-num-occurs? 
    (lambda (num ws) 
    (cond 
     [(null? ws) #f] 
     [(equal? num (car ws)) #t] 
     [else (direct-num-occurs? (cdr ws) num)]))) 

Но я получаю ошибку говорит ожидается пару.

ответ

3

Для дальнейшего использования, вы повторно реализации member процедуры:

(define (direct-num-occurs? n lst) 
    (if (member n lst) #t #f)) 

... Но я предполагаю, что вы пытаетесь написать его с нуля. Показанная реализация в основном правильная, , за исключением, что вы передали аргументы в неправильном порядке в последней строке. Это должно исправить:

(define direct-num-occurs? 
    (lambda (num ws) 
    (cond 
     [(null? ws) #f] 
     [(equal? num (car ws)) #t] 
     [else (direct-num-occurs? num (cdr ws))]))) 

Конечно, это работает, как ожидалось:

(direct-num-occurs? 1 '(2 3 1 4)) 
=> #t 

(direct-num-occurs? 1 '(2 3 5 4)) 
=> #f 
+0

тьфу дурацкой глупой ошибки, и да, мы сказали, чтобы сделать это с нуля, потому что мы изучаем функцию Cond. Спасибо! –

+2

@NathanCurtis, все в порядке :), но вы должны _test_ свои процедуры более тщательно, прежде чем отправлять вопрос, хорошо? –

Смежные вопросы