Hlavní navigace

Vlákno názorů k článku GNU Guile – interpret Scheme vestavitelný do nativních aplikací od tzl - Díky za článek, byť možná pár poznámek hnidopicha: -...

  • Článek je starý, nové názory již nelze přidávat.
  • 17. 7. 2019 11:52

    tzl

    Díky za článek, byť možná pár poznámek hnidopicha:

    - v komentáři u se mluví o volání, ale přijde mi, že se lambda funkce v tomhle nikde nevolá. Jak to je míněno?

    ; call anonymous function
    (print (lambda (x y) (+ x y)))

    - K

    Pro tento účel se používá přímo lambda výraz (bez define), podobně jako v každém ortodoxním Lispu (snad kromě PicoLispu):

    To si myslím je kompikovanější - v Common Lispu do verze CLtL2 a starších Lispech byl, pokud vím, (lambda ...) název funkce (bylo ho možné použít v pozici prvního prvku výrazu), ale nikoliv výraz, který se na lambda funkci vyhodnocoval - až v ANSI CL je lambda i makro, které expanduje na #'(lambda..., resp (function (lambda... (v Scheme není třeba řešit, protože funkce nemají separátní namespace). Tedy ((lambda (a b) (+ a (* b 3))) 4 5) se vyhodnotilo na 19, ale (lambda (a b) (+ a (* b 3))) bylo volání neexistující funkce. Na druhou stranu se to už tehdy nazývalo lambda expression...

    - zmiňovat CL mezi "staršími" Lispy (nemluvě o slovu interpreter...) v kontextu lexical scope je možná trochu zavádějící - CL je novější než Lambda papery i než Scheme, a mám za to, že lexical scope ze Scheme přebral.

  • 17. 7. 2019 19:57

    Pavel Tišnovský
    Zlatý podporovatel

    Dobrý den, díky za poznámky.

    To první je chyba copy & paste při skládání příkazů, protože (print) by měl vypsat jen informace o anonymní funkci (formát je různý, většinou něco v úhlových závorkách, ale hlavní je, že se jedná o plnohodnotnou hodnotu).

    Ad druhá poznámka - máte pravdu, tady je to skutečně komplikovanější a zbytečně jsem to zjednodušil (a možná i zamlžil tím "ortodoxním").

    Staršími LISPy myslím hlavně MacLISP a XLisp (resp. z něho odvozený AutoLISP) - prostě LISPy s dynamickým scope. Přesněji MacLISP a XLisp jsou jediné LISPy, se kterými jsem reálně dělal a takto se chovaly, bude sem patřit ale i LISP 1.5 atd. Z těch starších jsem ještě dělal v Interlispu, ale to si už popravdě nevzpomenu, jestli měl dynamický nebo lexikální scoping.