мы начали с алгебраических типов данных. В качестве примера у нас есть:данные типа алгебраических данных Nat = Zero | S Nat
add :: Nat -> Nat -> Nat
add a Zero = a
add a (S b) = add (S a) b
add' :: Nat -> Nat -> Nat
add' a Zero = a
add' a (S b) = S (add' a b)
Что это означает? хорошо, добавьте Zero = a, я думаю, это ясно. Но добавить (S b) = добавить (S a) b? и добавить' ?
большое спасибо;)
Вы экспериментировали с ними в 'ghci'? – dfeuer
Это две различные реализации добавления, поэтому два разных имени ('add',' add''). Значение 'add a (S b) = add (S a) b' является своего рода« если второй аргумент отличен от нуля, увеличивайте первый аргумент и уменьшайте второй аргумент ». –
Возможно, это поможет, если вы прочитаете 'S' как' 1 + ', так что' S b' '1 + b'. Тогда 'add a (1 + b) = add (1 + a) b' выглядит вполне читаемым для меня, а также' add 'a (1 + b) = 1+ (add' a b) '. –