В «Царстве Ракетки» авторы создают встроенную функцию для образовательных целей.Версия Ormap в «Realm Of Racket»
Их реализация ormap является:
(define (my-ormap-book pred lst)
(cond [(empty? lst) #f]
[else (or (pred (first lst))
(my-ormap-book pred (rest lst)))]))
Этот код кажется, работает хорошо во многих случаях, как блок-тесты сильфона шоу:
(require rackunit)
(check-equal? (my-ormap-book add1 '(3 4 5)) 4)
(check-equal? (my-ormap-book add1 '()) #f)
(check-equal? (my-ormap-book positive? '(1 2 a)) #t)
Однако реальная Ormap, как рэкет документация показывает - link - также работает с двумя или более списками в качестве входов, например:
(check-equal? (ormap + '(1 2 3) '(4 5 6)) 5)
При выполнении этого теста с «Обители» ракетка с реализации, вы получите:
(check-equal? (my-ormap-book + '(1 2 3) '(4 5 6)) 5)
my-ormap-book: arity mismatch;
the expected number of arguments does not match the given number
expected: 2
given: 3
arguments...:
Как решить эту проблему? Как мне сделать процедуру «my-ormap-book» на этом тестовом примере?