SchemeCheat-Sheet(versie2/11/2021) 1. SyntaxregelsvanScheme-talen(a.k.a.S-Expressions) a. PrimitieveExpressies: Gehelegetallen:0,4,-4 Floating-pointgetallen:3.4,3.14e+1,3.4e-34 Karakters:#\a,#\b,#\newline,#\space Booleans:#t,#f Strings:“halloditiseenstring” Variabelen/identifiers:n,fac,x,my_varke,$123 b. SamengesteldeExpressies: ( expr expr …. expr ) 1 2 n Voorbeelden: (if #t 1 3) (define n 3) (+ (* 5 4) 30) (* (if (= 1 2) 3 4) 5) Betekenisvansamengesteldeexpressies: - Indiene xpr1 een“specialformis” werkingvanbuitenkennen Schemelerenisdeelsdespecialformservanleren ⇒ ⇒ Anders pasproceduree xpr1 toeopargumentenexpr2 …exprn 2. SpecialForms:DeLego-blokkenvanScheme a. Gewoned efine AlgemeneVorm: ( define var expr) Voorbeelden: (define n 10) (define lettertje #\a) (define waar #t) b. Procedured efine (syntactischesuikervoord efine +l ambda ) AlgemeneVorm: ( define (var var …. var ) 1 n exp) Voorbeelden: (define (square x) (* x y)) (define (gemiddelde a b) / ( (+ a b) 2)) (define (som-der-kwadraten x y) (+ (square x) (square y))) c. Normalei f (met2takken) AlgemeneVorm: ( if expr expr expr ) 1 2 3 Voorbeelden: (if (= x y) (+ x y) (* x y))) (if (zero? 0) #t #f) d. if metontbrekendeelse-tak(slechtestijlmeestal) AlgemeneVorm: ( if expr expr ) 1 2 Voorbeeld: (if (equal? dag “donderdag”) (display “Vandaag is het donderdag”)) e. cond AlgemeneVorm: ( cond (predicaat expr … expr ) 1 1 k1 (predicaat expr … expr ) 2 1 k2 predicaat ( expr … expr ) 3 1 k3 … (predicaat expr … expr )) N 1 kN Waarbijp redicaat lse isenexpvoorexpressiestaat N meestale Depredicatenzijnnatuurlijkookgewoonexpressies. f. Let, let* en letrec AlgemeneVorm: ( let ((var expr ) 1 1 (var expr ) 2 2 . . . (var expr )) n n expr 1 . . . expr )) k Voorbeelden: (let ((x 1) (y 1)) (+ x y)) (let* ((x 1) (y x)) (+ x y)) (let ((x 1) (y 1)) (display x) (+ y x)) g. and eno r AlgemeneVorm: ( and expr . . . expr ) 1 N Voorbeelden: (and #t #f #t) (and #t 0 1) (or #f #t #f #t) (or 1 #t 4 5) h. do AlgemeneVorm: ( do ((var init-expr update-expr ) 1 1 1 (var init-expr update-expr ) 2 2 2 . . . (var init-expr update-expr )) n n n (test-expr res res … res ) 1 2 k body-expr 1 . . . body-expr ) m Voorbeelden: (do ((invoer 5 (- invoer 1)) i. facult ( 1 (* facult invoer))) ((= invoer 0) facult)) lambda AlgemeneVorm: ( lambda (var var … var ) 1 2 n body-expr 1 . . . body-expr ) m Voorbeelden: (lambda (x) x) (lambda (x y) (+ x y)) (lambda (x) (display x) (newline) (+ x 1)) j. quote AlgemeneVorm: ( quote expr) Voorbeelden: (quote (* x y)) (quote (quote x)) (quote (define x 10)) k. set! AlgemeneVorm: ( set! var expr) Voorbeelden: (set! x (+ x 1)) 3. ProceduresenProcessen a. Primitieve(=ingebouwde)procedures Voorbeelden:+ , *, sin, not b. Samengestelde(=zelfgemaakte)procedures Voorbeelden(ziecursus):s quare, sqrt, ... ⇒ c. Proceduresroepensomsandereproceduresop( “procedurele abstractie”) d. Proceduresroepensomszichzelfop( naam“reoccurs”inbody recursie) e. Proceduresgenereren(=“roepentotleven”)p rocessen ⇒ ⇒ Sommigeprocessenzijniteratief (=gebruikenconstantehoeveelheidgeheugen) Teherkennenaanstaartrecursievecodeindeprocedure Sommigeprocessenzijnrecursief (=gebruikeneenvariabelehoeveelheidgeheugen) Teherkennenaanconstructiefrecursievecodeindeprocedure Recursievep rocedurekanzowelrecursiefalsiteratiefp rocesgenereren f. Delooptijdvanprocessenbegrijpen Tracing=eenspoorachterlatenophetscherm Profiling=eenplotmakenvanlooptijdeninfunctievaninvoer-args Performantieschatting=ziealgo&data g. Soortenprocessen Lineaireprocessen(zowelrecursiefalsiteratiefgeschreven) Logaritmischeprocessen(zowelrecursiefalsiteratiefgeschreven) Exponentiëleprocessen(boomrecursiefgeschreven)