Üdv a Factorban! A Factor egy konkatenatív nyelv: ahelyett, hogy függvényeket hívnál meg, mint például square(add(2, 3)), egy sor szót írsz le balról jobbra, például 2 3 + square, amelyek egy közös adatveremen keresztül adják át egymásnak az értékeket. Képzelj el egy rakparton álló rakományládákból álló vermet, a legújabb van legfelül.
A ! egy soros megjegyzést indít: a Factor figyelmen kívül hagy mindent a !-tól a sor végéig. A lenti példákban a ! jelzi, hogy mit tesz a kód.
Ha leírsz egy literált, az felkerül a verem tetejére. A kódot balról jobbra olvassuk.
1 2 3 ! stack (bottom → top): 1 2 3
Minden szó a verem tetejéről veszi a bemeneteit, és oda írja vissza a kimeneteit. A . leveszi a legfelső értéket, és kiírja; a .s kiírja a teljes vermet, anélkül hogy bármit is eltávolítana, ami hasznos, ha látni akarod, mit hagyott maga után egy kódrészlet.
Minden szó dokumentációjában szerepel egy veremhatás, amelynek formája ( inputs -- outputs ). Ez a szó szerződése: a szó leveszi a bemeneteket a verem tetejéről, és a helyükre teszi a kimeneteket. A benne szereplő nevek az embereknek szóló dokumentáció; maga a verem pozicionális, nem nevesített. A verem tetejét a jobbszélső név jelöli.
A : elindít egy szódefiníciót, ezután jön a veremhatás, majd a törzs, végül a ; zárja le. A Factor fordítója ellenőrzi, hogy a törzs valóban azt hagyja-e maga után, amit a veremhatás deklarál.
: restow ( a b -- b a ) swap ;
Ezek a kernel szavak átrendezik a verem tetejét, anélkül hogy bármilyen számítást végeznének; egyszerűen csak mozgatják a ládákat:
dup ( x -- x x ) ! copy the top crate
drop ( x -- ) ! remove the top crate
swap ( x y -- y x ) ! flip the top two
over ( x y -- x y x ) ! copy the second crate onto the top
nip ( x y -- y ) ! remove the second crate
rot ( x y z -- y z x ) ! roll the third crate up to the top
Használd a dup szót, amikor egy ládának két szót kell ellátnia; a drop szót, hogy eldobj egy ládát; a swap szót, amikor a legfelső kettő rossz sorrendben van; az over vagy a nip szót, hogy az alatta lévő ládával dolgozz; és a rot szót, hogy egy eltemetett ládát a tetejére hozz.
A szélesebb család (-rot, dupd, swapd, 2dup, …) ugyanezt az elvet követi; ezekkel a szavakkal később találkozni fogsz.
Az egymás után írt szavak balról jobbra haladnak: minden szó arra a veremre hat, amelyet az előtte lévő szó hagyott maga után. Nézzük, mit tesz a swap nip az 1 2 veremmel (alulról felfelé), szavanként:
1 2 ! 1 2 the starting crates
swap ! 2 1 swap flipped the top two
nip ! 1 nip dropped the 2nd-from-top crate (the 2)
És íme a dup rot ugyanazokon a kiinduló ládákon, ismét szavanként:
1 2 ! 1 2 the starting crates
dup ! 1 2 2 dup copied the top crate
rot ! 2 2 1 rot rolled the 3rd-from-top crate up to the top
A szavak lowercase-kebab-case stílust használnak: kisbetűk, amelyeket kötőjelek kapcsolnak össze.
Fedélzeti matróz vagy, és épp a rakparton pakolod át a rakományládákat. Minden részfeladat egyetlen szó, amelynek törzsében kizárólag pakoló szavak szerepelnek, számítások nélkül.
Definiáld a swap-crates szót. Két ládát vesz le a veremről, és fordított sorrendben hagyja ott őket.
1 2 swap-crates .s
! 2
! 1
Definiáld a clear-spill szót. Három ládát vesz le a veremről, az alsó kettőt meghagyja, a legfelsőt pedig eldobja.
1 2 3 clear-spill .s
! 1
! 2
Definiáld a peek-under szót. Két ládát vesz le a veremről, és úgy hagyja ott őket, hogy az alsó ládáról készült másolat kerül a tetejükre.
1 2 peek-under .s
! 1
! 2
! 1
Definiáld a tidy-deck szót. Három ládát vesz le a veremről, x y z sorrendben, és z z y-t hagy maga után: az alsó ládát eldobja, majd a legfelső láda két másolatát a középső alá teszi.
1 2 3 tidy-deck .s
! 3
! 3
! 2
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.