Я пытаюсь изучить haskell на данный момент, и я столкнулся с примерной проблемой, с которой у меня возникают проблемы.Добавление двух списков по точкам в haskell
Проблема заключается в том, что мы представляем, что у нас есть списки, представляющие числа, например, число 12 равно [2,1] и 148 [8,4,1], то как мы можем добавить эти два списка вместе, как если бы они были номера. Моя интуиция - это перенос чисел с добавлением более 10, подобно тому, как добавление выполняется с большими числами.
Мой код до сих пор:
addLnat [x] [y] = rem (x + y) 10 : (quot (x + y) 10) : []
addLnat (x:xs) (y:ys) = (rem (x + y) 10) : w + head (addLnat xs ys)
where w = quot (x + y) 10
Однако это не будет компилировать, и я не понимаю, почему мне это кажется как решение, например:
Если мы начнем с [ 3,2,1] и [6,6,9]. Мы добавляем 6 и 3, а фактор 0, поэтому 9: 0+ и повторяем до тех пор, пока не дойдем до финального случая.
Любые идеи о том, почему это не работает/компилируется?
[Здесь] (http://coliru.stacked-crooked.com/a/4a7395053b21eec9) есть еще одна реализация, на которую вы можете посмотреть. – Shoe
@Jefffrey 'take 1' - полная альтернатива для' head' и 'drop 1' для' tail', так что 'headOr 0 = sum. возьмите 1' и 'tailOr [] = drop 1'. –
Я согласен с 'tailOr []' == 'drop 1'. Но не 'принимать 1', так или иначе, как' headOr'. В любом случае оба 'tailOr' и' headOr' являются более общими в возможном наборе возвращаемых значений. – Shoe