Frage

Ich habe die folgende Funktion geschrieben .. und ausgeführt unter Verwendung WinHugs

teneven =  [x | x <- [1..10], even x]

Meine Ausgabe:

Main> teneven
[2,4,6,8,10] :: [Integer] 
(63 reductions, 102 cells)

ist es trotzdem alle Reduzierungen zu drucken .. so kann ich die Kern Auswertung geschieht innerhalb WinHugs lernen?

War es hilfreich?

Lösung

Einige Ideen:

  1. Die Debug-Befehlszeilenoption (die Sie mit :set +d in Umarmungen festlegen) ist informativ, aber es ist sehr ausführlich und nicht Ihnen die Kürzungen in Haskell Syntax zeigen.

  2. Versuchen Sie Hat - die Haskell Tracer . Ich habe gerade versucht es auf einem einfachen Programm und es ist ziemlich cool. Ich bin nicht auf Windows, aber, und ich weiß nicht, wie schwierig es sein würde, es zu bekommen läuft. Es ist wahrscheinlich ziemlich schwierig, was schade ist, da es kühl ist und im Wesentlichen, was Sie wollen. Wenn Sie das tun bekommen es läuft, können Sie so etwas wie diese Informationen von Hat erhalten:

    main = {IO}
    teneven = [2,4,6,8,10]
    _foldr (\..) [1,2,3,4,5,6,7,8, ...] [] = [2,4,6,8,10]
    (\..) 1 [2,4,6,8,10] = [2,4,6,8,10]
    (\..) 2 [4,6,8,10] = [2,4,6,8,10]
    (\..) 3 [4,6,8,10] = [4,6,8,10]
    (\..) 4 [6,8,10] = [4,6,8,10]
    (\..) 5 [6,8,10] = [6,8,10]
    (\..) 6 [8,10] = [6,8,10]
    (\..) 7 [8,10] = [8,10]
    (\..) 8 [10] = [8,10]
    (\..) 9 [10] = [10]
    (\..) 10 [] = [10]
    

    Das Lambda gibt es even. Auch, wenn Sie möchten, können Habe verfolgen in Aufrufe von foldr und anderen internen Anrufen; Standardmäßig ist es das nicht.

Andere Tipps

Hier haben Sie einige Beispiele für die Verwendung von Debug.Trace und Hugs.Observe.

import Debug.Trace
fact :: Integer -> Integer
fact 0 = trace "fact 0 ->> 1" 1
fact n = trace ("fact " ++ show n) (n * fact (n-1))


import Hugs.Observe
fact :: Integer -> Integer
fact 0 = observe "fact 0" 1
fact n = observe "fact n" (n *  fact (n-1))

Hope dies hilft Ihnen herauszufinden, wie alle Reduktionen mit WinHungs drucken.

Glauben Sie mir, Sie nicht wollen, diesen Weg zu gehen.

Set (und Reihenfolge) der in jedem einzelnen Fall verwendeten Kürzungen würde auf bestimmte Sprache Umsetzung abhängen (Umarmungen könnten es eine Art und Weise tun, GHCI - in anderer Art und Weise, jhc - noch in einer anderen, usw.)

.

Besser etwas über allgemeine Möglichkeiten lesen Compiler / Interpreter / virual Maschine für funktionale Sprache zu implementieren -. Wie Secd-Maschine, etc

Mehrere Verbindungen:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top