Ошибка приведения члена списка Clojure - PullRequest
2 голосов
/ 24 сентября 2011

Я пытаюсь написать функцию, которая возвращает true, если элемент существует в списке, и false, если нет.

Мой код:

(defn is_member [elem ilist]
  ((elem []) false)
  (if (= elem (first (list ilist))) 
    (true)
    (is_member elem (rest (list ilist)))
  )
)

Я пытаюсь запустить его:

(is_member 1 '(1,2,3,4))

Но получите ошибку:

#<CompilerException java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn 

Что не так? Как я могу это исправить?

Спасибо.

1 Ответ

5 голосов
/ 24 сентября 2011

Похоже, вы пришли из языка с более широким соответствием шаблонов, чем у Clojure; ((elem []) false) - это в основном ерунда в Clojure. Вместо этого просто проверьте, является ли ilist пустым.

Существует ряд других ошибок, поэтому вот фрагмент, который на самом деле работает, будучи максимально приближенным к тому, что вы намеревались:

(defn is_member [elem ilist]
  (cond (empty? ilist) false
        (= elem (first ilist)) true
        :else (is_member elem (rest ilist))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...