List, Scheme oder Prolog: Wie kann ich bei funktionalen Programmiersprachen Werte zurückgeben?
-
Hi,
also ich bin grad dabei mich mit der funktionalen Prg. zu beschäftigen. Scheint alles recht interessant und hilfreich zu sein, nur leider krieg ich keine Wertrückgabe hin. In C++ geht das ja via Referenzparametern (&), nur das ist ein ganz anderer Schuh.
Folgendes simples Problem funktioniert einwandfrei und erscheint auch logisch:
(define (addiere_ a b) (+ a b)) (define (berechne_ a b c) (* c (addiere_ a b)))
Der Wert wird zurückgegebn, indem ich die Funktion aufrufe und die ja einen Wert zurückgibt.
Doch ich möchte mit folgendem Programm erreichen, dass alle Möglichkeiten für folgende Gleichung mit 3 Unbekannten gefunden werden:
2e + 2s + n = 43 [e != s != n]
[e, s, n € natürliche Zahlen einschließlich 0]Hier mein Code, die Lösungen funktionieren auch, nur gibt der die Anzahl der gefundenen Lösungen nicht aus, da der Parameter "anzahl" scheinbar nie zurückgegebn wird und daher immer den Wert 0 hat:
(define (moeglich e s n anzahl) (cond ((and (not (= e s)) (not (= s n)) (= 43 (+ (* 2 e) (* 2 s) n))) (begin (display e)(display " ") (display s)(display " ") (display n)(display " ") (+ anzahl 1)(display anzahl) (newline))) (else #F))) (define (go_n k j l anzahl) (cond ((< l 42) (begin (moeglich k j l anzahl) (go_n k j (+ l 1) anzahl) )) (else #F))) (define (go_s k j l anzahl) (cond ((< j 22) (begin (go_n k j 0 anzahl) (go_s k (+ j 1) l anzahl) )) (else #F))) (define (go i anzahl) (cond ((< i 22) (begin (go_s i 0 0 anzahl) (go (+ i 1) anzahl) )) (else #F)))
Die Anzeige ist dann entsprechend "falsch" (ich habe falsch programmiert), denn der letzte Wert (gefundene Möglichkeiten) ist immer 0
...
17 4 1 0
18 0 7 0
18 1 5 0
18 2 3 0
18 3 1 0
19 0 5 0
19 1 3 0
19 2 1 0
20 0 3 0
21 0 1 0
-
Problem hat sich gelöst. Kleiner Denkfehler