Edit: это трудно описать то, что я пытаюсь сделать, но вот попытка (с комментариями):Haskell сравнить все элементы списка
Я строю Wordfeud решатель, так что у меня есть слово, и некоторые буквы (оба списка символов). Я применил это (How to find the frequency of characters in a string in Haskell?) к обоим спискам, чтобы получить частоту всех букв. То, что я делаю сейчас, повторяется, но список символов «слово», и проверяет, достаточно ли все символы в списке символов «буквы».
Я написал функцию Haskell, которая сравнивает два списка, применяя функцию к элементам обоих списков и сравнивая результаты.
Сравнение делается так:
hasLetters' :: [Char] -> [Char] -> Bool
hasLetters' word letters = (getCharOccurrence (head word) (getCharOccurrences word)) <= (getCharOccurrence (head word) (getCharOccurrences letters))
Это только сравнивает вхождения первой буквы слова. Но ВСЕ слова следует сравнивать (и результат должен быть ИСТИННЫМ для всех из них).
Я действительно не знаю, как это осуществить. Я нашел метод «все», который позволяет мне определить предикат, это довольно хорошо. Это выглядит следующим образом:
all (<= (getCharOccurrence (head word) (getCharOccurrences letters)))
(я думаю, что это правильно) Это гарантирует, что каждый элемент, который входит в список меньше или равно результат предоставленной функции.
НО: для метода «все» нужен другой параметр. Это будет параметр «источник», который определяет, что следует сравнивать с предикатом. Это было бы легко, если бы это было просто список, то я хотел бы сделать что-то вроде этого:
all (<= (getCharOccurrence (head word) (getCharOccurrences letters))) [0..10]
Но проблема: я не имею список результатов, как это, мне нужно, чтобы сравнить его с результатом :
(getCharOccurrence (head word) (getCharOccurrences letters))
я понял, что я мог бы применить эту функцию для каждого символа в слове «» списка полукокса с «картой» функцией, но я не знаю, как использовать его. Я начал вот так:
map (getCharOccurrence (head word) (getCharOccurrences word)) word
Но это неправильно.
Так что мне (думаю, я) нужно: примените указанную выше функцию ко всем символам списка символов «слово» и сравните ее с предикатом.
Но, может быть, я просто ошибаюсь. Я абсолютный новичок Haskell/функционального программирования. Пожалуйста, помогите мне :-)
Не могли бы вы дать краткий пример того, что именно вы хотите решить? Мне сложно декодировать только имя функции и использовать ее, даже не делая того, что вы хотите. –
Прошу прощения, если это не ясно, трудно описать. Но я строю речевой редактор wordfeud, поэтому у меня есть слово и несколько букв (оба списка символов). Я применил это (http://stackoverflow.com/questions/7108559/how-to-find-the-frequency-of-characters-in-a-string-in-haskell) к обоим спискам, чтобы получить частоту всех букв , То, что я делаю сейчас, повторяется, но список символов «слово», и проверяет, достаточно ли все символы в списке символов «буквы». Надеюсь, это поможет. –
Я также не понимаю, чего вы хотите, не могли бы вы просто привести несколько простых примеров? – leftaroundabout