Az eddig megírt C kód 309 sorban implementálja az environment modelt, nincs benne ugyanakkor GC, aritmetika, tömbök, sztringek, tail-call optimization. Szimbólumok vannak, listák (üres lista + pair),
quote
, valamint logikai típus. Primitív függvények hamarosan lesznek. Majd később elágazás,
set!
,
set-car!
,
set-cdr!
és GC is.
Ízelítőnek álljon itt egy pici REPL:
> #f
#f
> #t
#t
> (quote #t)
#t
> (quote #f)
#f
> (quote x)
x
> (quote ())
()
> (quote (+ 1 2))
(+ 1 2)
> (lambda () (quote ()))
#<lambda>
> ((lambda () (quote ())))
()
> ((lambda (a b) a) (quote x) (quote y))
x
> ((lambda (f x) (f x)) (lambda (x) x) #t)
#t
Amit látni kell, hogy a lambdák mennek szépen (már amennyire ez eddig tesztelhető).
- utpKabel blogja
- A hozzászóláshoz be kell jelentkezni
- 1136 megtekintés
Hozzászólások
szuper, a forras elerheto lesz?
ha jol latom, a linkelt megoldasok a nyelv beepitett veremkezeleset hasznaljak (rekurziv eval fv.), vajon a tail-call optimization megoldaho igy is, vagy a vermet kulon implementalni kell majd hozza?
- A hozzászóláshoz be kell jelentkezni
Gondolkodom még rajta. Végülis ha van igény rá, lehet csinálok egy a linkeltekhez hasonló szösszenetet a forrás lényegének magyarázatáról.
Tail-call optimizationt legfeljebb akkor fogok implementálni, ha netalán eljut odáig a projekt, hogy Lisp compilert készítek. Ez most sokadrangú dolog, először legyen rekurzió (ez nincs messze, csak if és set! kell hozzá), GC (berakom alá a Boehm GC-t), makrók (ez kicsit összetettebb rész lesz), számok (egyelőre csak egész számokat tervezek, GMP alapon).
- A hozzászóláshoz be kell jelentkezni
Közben megírtam C-ben néhány procedúrát: null?, pair?, boolean?, symbol?, procedure?, eqv?, cons, car, cdr, not.
- A hozzászóláshoz be kell jelentkezni
cool, az egyik kollegam ugyanerre az elhatarozasra jutott par honapja, ha gondolod megemlitem neki hetfon.. Par hete hosszasan magyarazta a GC-t, ha gondolod osszehozlak vele.. A repo - azt hiszem - https://github.com/74AC153/paren
- A hozzászóláshoz be kell jelentkezni