Clojure: использование фильтра с функцией, имеющей более одного параметра - PullRequest
0 голосов
/ 16 ноября 2018

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

Это функция

(defn starts [letter word]
  (def startVal (clojure.string/starts-with? word letter)
  startVal)

Это нормально.Он пытается использовать фильтр на том, что это проблема.Мне нужно иметь возможность попробовать более одной буквы, поэтому я не могу просто жестко закодировать это в функцию здесь.Но фильтр всегда выдает ошибки (неправильная арность (3), когда я пытаюсь передать ему более одного значения.

Когда я изменяю, запускается функция с одним параметром (я передаю только слово, а затем жестко кодирую букву).) и попробуйте

(println (filter starts [this is my example collection of words])

Это работает, и я получаю правильное значение.

Как заставить фильтр использовать два значения. Было бы это возможно с помощью анонимной функции, записанной прямо в вызов фильтра?

Если я собираюсь все это сделать неправильно и могу просто закодировать это по-другому, я тоже буду рад узнать, но я хотел бы выяснить, как использовать фильтр таким образом, если естьрешение.

1 Ответ

0 голосов
/ 16 ноября 2018

filter ожидает функцию с одним аргументом. Вы можете использовать анонимную функцию-оболочку с одним аргументом, если один из аргументов остается постоянным:

(filter #(starts my-letter %) my-words)

Или, что эквивалентно:

(filter (partial starts my-letter) my-words)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...