2 Stimmen

Kann den unendlichen Typ nicht konstruieren - Implementierung des tail-rekursiven Faktorrechners

Ich versuche, eine schwanzrekursive Version von factorial zu implementieren:

let{factorial 0 n = n; factorial x n =  factorial (x-1, n * x)}

Ich verstehe das:

<interactive>:1:41:
Occurs check: cannot construct the infinite type: t1 = t1 -> t1
In the return type of a call of `factorial'
In the expression: factorial (x - 1, n * x)
In an equation for `factorial':
    factorial x n = factorial (x - 1, n * x)

<interactive>:1:52:
Occurs check: cannot construct the infinite type: t0 = (t0, t1)
In the first argument of `(-)', namely `x'
In the expression: x - 1
In the first argument of `factorial', namely `(x - 1, n * x)'

<interactive>:1:61:
Occurs check: cannot construct the infinite type: t1 = (t0, t1)
In the second argument of `(*)', namely `x'
In the expression: n * x
In the first argument of `factorial', namely `(x - 1, n * x)'

Wie konstruiere ich hier einen unendlichen Typ? (mit GHCi 7.0.1)

7voto

templatetypedef Punkte 343693

Ich bin kein guter Haskell-Programmierer, aber ich denke, Sie wollen die folgenden Zeilen umschreiben

factorial x n =  factorial (x-1, n * x)

als

factorial x n =  factorial (x-1) (n * x)

Seit (x-1, n * x) ist ein Paartyp, was nicht das ist, was Sie wollen.

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X