Also habe ich eine Hauptfunktion (foo), die rekursiv zwei andere Funktionen aufruft (step1 & step2). foo addiert a1 zu a2 a count
mal und dann zurück (a1, a2). Wie kann ich die Variablen count, a1 und a2 bei jedem Schritt drucken?Wie drucke ich Variablen aus einer Funktion?
-- adds a1 to a2 a `count` number of times
-- returns (a1, a2) once count reaches 0
foo :: Integer -> Integer -> Integer -> (Integer, Integer)
foo count a1 a2 | count == 0 = (a1,a2)
| otherwise = foo count' a1' a2'
where (count', a1', a2') = let (count'', a1'', a2'') = step1 count a1 a2
in step2 count'' a1'' a2''
-- adds a2 to a1. How to print out count, a1 and a2' here?
step1 :: Integer -> Integer -> Integer -> (Integer, Integer, Integer)
step1 count a1 a2 = (count, a1, a2')
where
a2' = a1 + a2
-- decrements count by 1. How to print out count', a1 and a2 here? Or can I do these prints somewhere in the `foo` function?
step2 :: Integer -> Integer -> Integer -> (Integer, Integer, Integer)
step2 count a1 a2 = (count', a1, a2)
where
count' = count - 1
Dies ist eine vereinfachte Version von Code aus einer größeren Codebasis. Ich bin offen für einen anderen Ansatz. Das Beispiel Ausgabe, die ich suche ist:
$> foo 3 4 5
(4, 17)
EDIT: ich mir wahrscheinlich nur realisiert werden Zwischenergebnisse in einer Liste speichern könnte und dann aus dieser Liste drucken. Aber muss ich meinen, ich müsste die Liste als Argument für die Funktionen übergeben?
Vielen Dank für Ihre Antwort. Dies könnte für die foo-Funktion funktionieren, aber ich müsste bei jeder der Schrittfunktionen drucken (nicht nur am Ende wie in Ihrem Beispiel). Also würde ich den Ausgabetyp von Schritt1 und Schritt2 ändern müssen, was einige Bindungsprobleme innerhalb der Foo-Funktion verursachen würde. Ideen? EDIT: Egal. Ich sehe jetzt, dass deine Lösung perfekt funktioniert. Vielen Dank. –