2017-01-13 4 views
0

Le problème:plus récursive dans Haskell

On vous donne une fonction plusOne x = x + 1. Sans utiliser d'autres (+) s, définissez une fonction récursive addition de sorte que addition x y ajoute x et y ensemble.

(de wikibooks.org)

Mon code (il ne fonctionne pas - boucle sans fin):

plusOne x = x + 1 

addition x y 
    | x > 0 = addition (plusOne y) (x-1) 
    | otherwise = y 

Questions:

  1. Comment connecter la fonction plusOne à la addition fonction récursive?
  2. Comment devrait-il être écrit?
+0

'y' est la valeur qui diminue vers 0, pas' x' . – chepner

Répondre

1

Vous confondez x et y dans votre cas récursif

addition x y | y > 0 = addition (plusOne x) (y - 1) -- x + y == (x + 1) + (y - 1) 
      | otherwise = x -- x + 0 = x 
0

utilisant == et 0

addition = add 0 where 
    add a y x | a == y = x 
       | otherwise = add (plusOne a) y (plusOne x)