Kurzusok
/
Factor
Factor
/
Feladatok
/
Leah ínycsiklandó lasagnéja
Leah ínycsiklandó lasagnéja

Leah ínycsiklandó lasagnéja

Tanulófeladat

Bevezetés

A Cargo Shuffle feladatban megismerkedtél a Factor adatvermével és a keverő szavakkal, amelyek átrendezik. Ez a feladat erre épül: olyan szavakat fogsz definiálni, amelyek számolnak a bemeneteikkel, ahelyett hogy csupán ide-oda mozgatnák őket.

Megjegyzések

A ! egy soros megjegyzést kezd: a Factor mindent figyelmen kívül hagy a !-tól a sor végéig. Az alábbi példákban a !-ot arra használjuk, hogy megjegyezzük vele, mit csinál a kód, és hogy megmutassuk, mit írna ki.

Szavak

A szó a Factor elnevezése a függvényekre. Amikor meghívsz egy szót, az leemel néhány értéket a verem tetejéről, és néhányat vissza is tesz. A . leemeli a legfelső értéket, és kiírja; az egész számokon működő +, -, * aritmetikai szavak két számot emelnek le, és az eredményt teszik vissza:

2 3 + .    ! prints 5
8 3 - .    ! prints 5    (8 - 3, not 3 - 8)
2 3 * .    ! prints 6

Egy rokon szó, a .s, a teljes adatvermet kiírja anélkül, hogy bármit is elhasználna. Ez a listenerben (a Factor interaktív parancssorában, ahol kódot írhatsz be, és láthatod az eredményeket) hasznos, hogy lásd, mit hagy maga után egy kódrészlet. Ezért végződnek a későbbi példák néha .s-sel a . helyett: egynél több értéket hagynak a vermen, és a .s mindet megmutatja.

Az aritmetikai szavak a math szókészletben élnek, ezért ha egy fájl használni akarja őket, fel kell vennie a math-ot a USING: sorába.

Veremhatások

Minden szót dokumentálnak egy veremhatással, amelynek formája ( inputs -- outputs ). Ez a szó szerződése: a szó leemeli a bemeneteket a verem tetejéről, és a helyükre teszi a kimeneteket. A benne szereplő nevek csak azt segítik, hogy könnyebben elolvasd. A Factor nem használja őket, csak azt követi nyomon, milyen sorrendben helyezkednek el az értékek a vermen.

! + is specified as ( x y -- sum )
! . is specified as ( x   --     )

A verem teteje a jobb oldali bemenet. Ezért a 8 3 - esetében a 3 van felül, a veremhatás ( x y -- difference ), az eredmény pedig 8 - 3.

A kimenetek végén álló ? az „egy Boolean” szokásos jelölése, de a lasagna feladat csak számokat használ.

Az alábbiakban előkerül egy keverő szó a Cargo Shuffle-ból: a swap ( x y -- y x ), amely megcseréli a két legfelső értéket, ha azok rossz sorrendben állnak a következő szóhoz.

Egy szó definiálása

A : kezdi a szó definícióját, utána a veremhatás következik, majd a törzs, végül a ; zárja le.

: square ( x -- x^2 ) dup * ;

4 square .    ! => 16

A Factor fordítója ellenőrzi, hogy a törzs valóban illeszkedik-e a megadott veremhatáshoz: az a szó, amely ( x -- y )-t ígér, de nulla vagy két értéket hagy a vermen, nem fog lefordulni.

Konstansok

A CONSTANT: nevet ad egy rögzített értéknek. A konstans maga is egy szó: a meghívása ráteszi az értéket a veremre:

CONSTANT: pi 3

pi pi * .    ! => 9

A CONSTANT: alapszintaxis, és nem igényel USING: sort. A konstansokat a fájl elejére tedd, minden olyan szó elé, amely használja őket.

Egyik szó hívása a másikból

Egy szó törzse meghívhat bármely szót, amely már a scope része, beleértve azokat is, amelyeket korábban ugyanabban a fájlban definiáltál:

: double    ( x -- 2x ) 2 * ;
: quadruple ( x -- 4x ) double double ;

5 quadruple .    ! => 20

Így használja fel a feladat utolsó részfeladata egy korábbi részfeladatot.

Elnevezési konvenciók

A szavak és a konstansok is a lowercase-kebab-case formát használják: kisbetűk, amelyeket kötőjel kapcsol össze (például expected-bake-time, preparation-time).

Utasítások

Ebben a feladatban kódot írsz majd, amely segít elkészíteni egy remek lasagnét a kedvenc szakácskönyvedből.

Négy részfeladatod van, és mindegyik ahhoz az időhöz kapcsolódik, amit a lasagne elkészítésével töltesz.

1. Tárold el a várható sütési időt egy konstansban

Definiáld az expected-bake-time konstanst, amely visszaadja, hány percig kell a lasagnét a sütőben sütni.

A szakácskönyv szerint a lasagnének összesen 40 percet kell a sütőben töltenie.

expected-bake-time .
! => 40

2. Számítsd ki az előkészítési időt percekben

Definiáld a preparation-time szót. Ez leveszi a veremről a lasagnéba rakott rétegek számát, és otthagyja, hány percet töltöttél az előkészítésével, feltéve, hogy minden réteg elkészítése 2 percet vesz igénybe.

4 preparation-time .
! => 8

3. Számítsd ki a hátralévő sütési időt percekben

Definiáld a remaining-time szót. Ez leveszi a veremről a lasagne sütőben már eltöltött perceinek a számát, és otthagyja, hány percet kell még ott maradnia.

25 remaining-time .
! => 15

4. Számítsd ki a teljes munkával töltött időt percekben

Definiáld a total-working-time szót. Ez két argumentumot vesz le a veremről, először a lasagnéban lévő rétegek számát, majd azt, hogy hány percet töltött már a lasagne a sütőben, és otthagyja, mennyi volt a teljes, eddig munkával töltött idő: az előkészítési idő plusz a sütőben már eltöltött idő.

3 20 total-working-time .
! => 26
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Leah ínycsiklandó lasagnéja 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.