ich einige Haskell-Code haben und schreiben Sie müssen Ganz links-innerste (call by value) und äußerste (Call-by-name):finden outmost Bewertung (Haskell)
second :: [Int] -> Int
second [] = 0
second (_:[]) = 0
second (_:x:xs) = x
doubleEach :: [Int] -> [Int]
doubleEach [] = []
doubleEach (x:xs) = x * 2 : (doubleEach xs)
repeat :: Int -> Int -> [Int]
repeat x n = if n > 0 then x : (repeat x (n-1)) else []
repeat (second (doubleEach [2,3,5])) (second [3, 1, 4])
innerste (Call-by-Wert):
1. repeat (second (doubleEach [2,3,5])) (second [3,1,4])
2. repeat (second 4 : doubleEach [3,5])) (1)
3. repeat (second (4 : 6 : d [5])) (1)
4. repeat (second (4 : 6 : 10)) (1)
5. repeat (6) (1)
6. [6]
Frage: Wie kann ich äußerste erhalten (Call-by-name) stept Schritt AUSWERT tion? Ich verstehe nicht, wie ich das tun kann, wenn Wiederholung benötigt, um Werte zu arbeiten, und sie sind nicht gegeben, bis der innere Teil nicht ausgewertet wird.
Es ist sehr unklar, was Sie wollen, möchten Sie einige Strings zippen? Bitte zeigen Sie uns die volle erwartete Leistung. –
Jedes Programm kann in Call-by-Value- und in Call-by-Name-Strategie ausgeführt werden. Ich verstehe nicht, wie man die Schritte aufschreibt, die das Programm für die Anruf-nach-Name-Strategie ausführt. Ich hoffe es ist klarer was ich meine. – jublikon
Das ist nicht wirklich Haskell. Ich bin mir nicht einmal sicher, ob es wirklich auf Stackoverflow gehört ... Vielleicht cs.stackexchange? – Alec