Megoldva A lusta haskell funkcionális nyelvek megvalósítása
A lusta funkcionális nyelv megvalósításakor értékeletlen értékeket kell tárolni, amelyeket csak szükség esetén kell értékelni.

A hatékony megvalósítás egyik kihívása, amiről például a La Veule Tagless G-gép foglalkozik, az, hogy ezt az értékelést minden egyes részre csak egyszer kell elvégezni, és az „Access” kérelmeknek újra fel kell használniuk a számított értéket - nem így legalább másodfokú lassuláshoz vezetne (talán exponenciális? Nem vagyok biztos benne, hogy ez a fejem felett van.)
Egy egyszerű példát keresek egy könnyen működő megvalósításra (szemben a megvalósítás olyan ipari erősségével, mint a GHC, amelyet az egyszerűség rovására terveztek). A http://www.andrej.com/plzoo/ oldalon találtam rá a minihaskellre, amely a következő kódot tartalmazza.
Mivel beceneve "hatékony előadó", feltételezem, hogy tulajdonképpen minden értékelést csak egyszer futtatok és a számított értéket újrafelhasználás céljából mentem el, de gondjaim vannak azzal, hogy hol és hogyan? "Vagy" Mi; Csak egy hozzárendelési utasítást látok magában a tolmácsban, és ez nem tűnik egy thunk rekord egy részének felülírásával.
Tehát a kérdésem az, hogy valóban tolmács-e ilyen gyorsítótárazás, és ha igen, akkor hol és hogyan? (És ha nem, akkor mi a legegyszerűbb létező megvalósítás?)
Válaszok
A legfontosabbak a fájlok: avis,! R, r: = v. Minden alkalommal, amikor környezeti változóra keresünk, visszaküldünk egy rekordot, amelyet nem kívánunk megnézni, hogy ez egy törzs. Ha töredék, kiértékeljük, majd elmentjük az eredményt. Nagyításokat hozunk létre az alkalmazás során (vegye figyelembe a ref konstruktor hívását), a rekurzív definíciókat és a mintaillesztést, mert ezek olyan szerkezetek, amelyek megkötik a változókat.