Я пытаюсь сделать функцию, которая принимает в качестве входных данных предикат и список. и удаляет все элементы из списка, для которого выполняется предикат. То, что я до сих пор является следующая функция:Удаление элементов из списка, если предикат выполняется
removeif :: func->[a]->[a]
removeif [] = []
removeif func (h:t)= if func then delete h (h:t) else removeif func t
Я смущен о func
части func->[a]->[a]
, потому что я не знаю, как я должен сказать, что его предикат.
Например, что я хочу, что я даю от терминала этой команды
removeif threefolds [1,2,3,4,5,6,7,8,9]
threefolds
является локальной функцией у меня есть, и она возвращает бесконечный список с кратными трех, и я хочу, чтобы удалить эти мультипликаторы из список ввода. Я думаю сделать threefold
функцией bool, но не уверен, что это необходимо.
' removeIf p = filter (not. p) ' – Cactus
Я не понимаю вопроса. Предикат - это функция с типом 'a -> Bool' для некоторого' a'. Условие 'if' нуждается в' Bool', поэтому вы не можете сделать это, если хотите использовать код, подобный этому. – Bakuriu
@Cactus Большое вам спасибо, его хорошая идея, чтобы начать с :) – Nia