Ich versuche meinen Kopf um feste Punkte und rekursive Definitionen zu beugen.Warum scheint Haskells `Fix` Probleme mit Tupeln zu haben?
Dies funktioniert:
>>> take 10 $ let x = (0:x) in x
[0,0,0,0,0,0,0,0,0,0]
Dies gilt das gleiche, was die Definition von fix
gegebenen Sinn macht:
>>> take 10 $ fix (\x -> (0:x))
[0,0,0,0,0,0,0,0,0,0]
Jetzt nehme ich anfangen, um mit rekursiv definiert Paare Messing:
>>> take 10 $ fst $ let (u,v) = (0:v,1:u) in (u,v)
[0,1,0,1,0,1,0,1,0,1]
Okay, ich sollte in der Lage sein, das mitzu schreibenauch, oder?
>>> take 10 $ fst $ fix (\(u,v) -> (0:v,1:u))
*** Exception: <<loop>>
Aber es funktioniert nicht. Es sei denn, ich mache die folgende scheinbar unbedeutende Änderung:
>>> take 10 $ fst $ fix (\r -> let (u,v)=r in (0:v,1:u))
[0,1,0,1,0,1,0,1,0,1]
Was ist der entscheidende Unterschied zwischen den letzten beiden Beispielen?
das sein sollte '\ (~ (u, v))' oder '\ ~ (u, v)' – redneb
@redneb behoben. (Wortspiel beabsichtigt :-P) – chi