Я ищу способ пройтись по списку, захватив элемент (в том порядке, который он дал, я полагаю), используя его с другой функцией, а затем возвращаясь к этому списку и продолжение операции БЕЗ потери этого элемента из списка.Прогулка по списку, используя элементы, но не теряющие элементы Haskell
В примерах, которые я видел единственный способ сделать это было бы сделать следующее:
counter :: (Eq a1, Num a) => a1 -> [a1] -> a
counter a [] = 0
counter a [x] = if a == x then 1 else 0
counter a (x:xs) = if a == x then counter a xs + 1 else counter a xs
permut :: Eq a => [a] -> [a] -> Bool
permut [] [] = True
permut [x] [] = False
Но это избавляется от элемента х из списка хз когда вызывается снова как в ПЕРЕСТ. Я знаю, что это также служит для завершения рекурсивных вызовов/завершения функции, но мне нужно, чтобы весь список был доступен в моей функции счетчика, чтобы он работал. Я хочу просто пройти через список и сохранить целостность целиком. Это возможно?
EDIT: обновленный прецедент. Я пытаюсь работать над проверкой, является ли один список перестановкой другого. Мой мыслительный процесс находится в каждом списке два свойства будут иметь место, если они являются перестановки:
Они будут иметь одинаковое количество общих элементов (будет осуществлять эту часть позже)
Они будут иметь тот же номер каждого элемента
Прямо сейчас моя функция счетчика работает, но я теряю элементы, так как я повторяю рекурсивно через функцию перестановки. Я не забочусь об эффективности, я не возражаю снова подсчитывать один и тот же элемент и сравнивать его, если число отображается в списке несколько раз.
Можете ли вы дать нам прецедент? Ваше описание слишком абстрактно, для меня в любом случае. – Ingo
Просто передайте тот же список в 2 аргумента? И сохраните 2-й вариант без изменений во время рекурсии. – kennytm
@Ingo Я предоставил конкретный прецедент, я пытаюсь работать – ZAX