Kurzusok
/
Factor
Factor
/
Feladatok
/
Rakománykeverés
Rakománykeverés

Rakománykeverés

Tanulófeladat

Bevezetés

Ü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.

Megjegyzések

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.

Az adatverem

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.

Veremhatások

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.

Egy szó definiálása

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 ;

Keverő szavak

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.

Hogyan állnak össze a szavak

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

Elnevezési konvenciók

A szavak lowercase-kebab-case stílust használnak: kisbetűk, amelyeket kötőjelek kapcsolnak össze.

Bemutató: veremkeverés

Utasítások

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.

1. Cseréld meg a felső két ládát

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

2. Távolítsd el a kizuhant ládát

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

3. Tarts meg egy másolatot az alatta lévő ládáról

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

4. Rendezd el a fedélzetet

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
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Rakománykeverés feladatot?

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.