Ich hoffe, es geht euch allen gut. Ich implementiere den Festkomma
Y = (λh.λF.F(λ x.((h(h))(F))(x))) (λh.λF.F(λ x.((h(h))(F))(x)))
Ich versuche, Memoization mit Y-Kombinator durch Leistungsfragen anzuwenden. Meine aktuelle Implementierung ist:
%Vor%Grundsätzlich kann ich keine Anweisungen innerhalb von Blöcken verwenden, aber ich kann Ausdrücke verwenden und es funktioniert ganz gut. Ich vermeide eine unendliche Rekursion und das Limit, das von 0 nach unendlich geht.
Bis zu diesem Zeitpunkt kompiliert es gut, aber wenn ich versuche, auf eine Variable eines äußeren Blocks zuzugreifen, tritt Harbor mich ins Gesicht!
Um die Y-Kombinator-Implementierung zu testen, versuche ich eine einfache Implementation der Fibonacci-Sequenz anzuwenden, aber wenn ich einen Block zurückgebe, der einen Parameter G
empfängt und implizit einen Block zurückgibt, der einen Parameter N
,% co_de erhält % ist für mich nicht verfügbar und der Compiler sagt mir, dass "Äußere Codeblock-Variable nicht erreichbar ist".
Dies würde mir auch erlauben, Blöcke zu curren. Meine Frage ist: Wie kann ich auf eine äußere Variable innerhalb eines Blocks in Harbor zugreifen?
In Harbor, Clipper und xBase-basierten Programmiersprachen können sich Blöcke never beziehen auf die Variable des Elternblocks. Blöcke sind keine Verschlüsse. Das können wir erreichen Erstellen lokaler Speicher und deren Verwendung in den internen Blöcken:
%Vor%Tags und Links lambda-calculus y-combinator xbase