2016-02-06 4 views
0

Я пытаюсь выполнить школьную проблему, используя списки в Racket. Это простая проблема с использованием рекурсии, но я не могу понять, почему мой код не работает. Мы должны искать список и возвращать true, если указанный элемент соответствует одному в списке. Это то, что я до сих пор:Ошибка списка реестров с использованием рекурсии

(define (containsAnywhere test list) 
    (cond 
    ((null? list) '()) 
    (equal?((car list) test)) 
    (else(containsAnywhere (test (cdr list)))))) 

Но я получаю следующее сообщение об ошибке:

application: not a procedure; 
expected a procedure that can be applied to arguments 
    given: 1 
    arguments.: 

ответ

0
(test (cdr list)) 

Здесь вы подаете test к аргументу (cdr list), как если бы test были функции, но это не. Таким образом, ошибка.

Вы предположительно означали (containsAnywhere test (cdr list)), который проходит test как первый аргумент containsAnywhere и (cdr list) как второй.

2

Несколько комментариев:

  • не называйте свой параметром list, есть процедура сборки в этом имя, которое будет затененным таким образом; на схеме это принято называть параметр lst вместо
  • у вас есть много скобок ошибок - вызовы процедур, как (procedure param1 param2 ...), условия внутри cond в скобках
  • equal? предиката имеет заднюю ?
  • и ваш код отступы отключены; использовать Dr Ракетку в «отступ во всю» особенности
  • Я предполагаю, что результат вашей процедуры должен быть истинными или ложными, так что пустой список должен возвращать #f, не '()

Вот рабочая версия коды; внутри cond я поставил условие и выражение, которое будет оцениваться на отдельных строках, так что код и круглые скобки прояснится:

(define (containsAnywhere test lst) 
    (cond 
    ((null? lst) 
    #f) 
    ((equal? (car lst) test) 
    #t) 
    (else 
    (containsAnywhere test (cdr lst))))) 

Кроме того, я бы закодировать это как:

(define (containsAnywhere tst lst) 
    (and (not (null? lst)) 
     (or (equal? (car lst) tst) 
      (containsAnywhere tst (cdr lst))))) 
Смежные вопросы