01 Introduction Flashcards

1
Q

rekursjon

A

prosedyrer som kaller på seg selv

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

prosedyrer som førsteordens objekter

A

prosedyrer er datatyper på lik linje med tall, symboler, strenger, lister, etc.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

høyere-ordens prosedyrer

A

prosedyrer som kan

1) ta prosedyrer som argumenter og
2) returnere prosedyrer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

objektorientering via prosedyrer

A

innkapsulering av data i prosedyrer for å skjule tilstandsvariabler

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

strømmer og utsatt evaluering

A

definering av uendelige sekvenser og realisering av de enkelt elementene i disse ved utsatt evaluering etter behov

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

funksjonell vs imperativ programmering

A

Funksjonell programmering:

  • Ingen tilstandsendringer
  • En prosedyres returverdi vil alltid være den samme hvis argumentene er de samme
  • Beregninger utføres som funksjonelle transformasjoner av data (kontra sekvensielle endringer av tilstandsvariabler ved imperativ programmering)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

viktige egenskaper ved funksjonell programmering

A

Funksjoner danner byggeklossene.

Prosedyrene er uavhengige av ekstern tilstand, og påvirker ikke ekstern tilstand.

Dette gir enklere, sikrere, mer testbar og paralleliserbar kode.

Prosedyrer er data. Og disse kan representeres ved lister. Program = data.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Scheme

A

minimalistisk dialekt av Lisp

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

REPL

A

Read-Eval-Print Loop

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

primitive uttrykk i Scheme evaluerer til ___

A

seg selv

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hva evaluerer til true i Scheme?

A

Alt bortsett fra #f

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

notasjon i Scheme

A

parantesbasert prefixnotasjon

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

(Scheme)

Det første elementet i en liste er ___. Resten av lista består av ____.

A

operatoren, operandene (argumentene)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

introdusere en leksikal variabel

A

(define foo 42)

define er en “special form”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Schemes evalueringsregel

A

1) Evaluér enkeltuttrykkene i sammensetningen
a) Atomære uttrykk evalueres til seg selv
b) Leksikale variabler og prosedyrer evalueres til verdiene de refererer til
c) Sammensatte uttrykk: anvend 1) igjen
2) Anvend operatoren på verdiene til de andre uttrykkene

Unntak: special forms

Evalueringsregelen er altså rekursivt definert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

LISP står for…

A

List Processing

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

generell form for lambda-uttrykk

A

(define navn
(lambda (argumenter)
kropp))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

kortform for lambda-uttrykk

A

(define (navn argumenter)

kropp)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

predikater

A

prosedyrer eller uttrykk som returnerer #t eller #f

Innebygget i Scheme:
even?
zero?
not
>
20
Q

‘and’ returnerer…

A

det logiske konnektivet ‘and’ returnerer #f eller verdien til det siste uttrykket

21
Q

‘or’ returnerer…

A

det logiske konnektivet ‘or’ returnerer #f eller verdien til det første sanne uttrykket

22
Q

Hva skiller de logiske konnektivene fra andre prosedyrer?

A

Evalueringen avbrytes så snart problemstillingen kan besvares. De logiske konnektivene følger altså ikke Schemes evalueringsregel.

23
Q

syntaks for kondisjonale uttrykk

A

(if

)

(cond ( )
( )
( )
(else ))

24
Q

applicative-order evaluation

A

1) Evaluer argumentene
2) Kall prosedyre på verdi
Dette er standard i Scheme.

(kontra normal-order evaluation)

25
Q

Hvilke variable er bundne og frie i denne prosedyren:

define (avslag p pris
(* (/ pris 100) p))

A

Frie: *, /
Bundne: p, pris

Skopet for bindingen er kroppen til prosedyren.

26
Q

en blokk

A

Når man definerer en prosedyre internt og lokalt i definisjonen til en annen prosedyre

27
Q

Scheme er svakt/sterkt og dynamisk/statisk typet

A

Scheme er svakt og dynamisk typet

28
Q

funksjon vs prosedyre vs prosess

A

En prosedyre er en implementasjon av en (matematisk) funksjon.

En prosess er beregningene en prosedyre gir opphav til.

29
Q

halerekursjon

A

Det rekursive kallet står i “haleposisjon” (det er det siste prosedyren utfører). Dermen slipper man ventende prosedyrer og stack overflow.

(eng: tail call elimination)

30
Q

halerekursiv prosedyre

A

En prosedyre er halerekursiv (eng: tail recursive) hvis dens returverdi er lik returverdien til det siste rekursive kallet.

31
Q

ulike typer rekursjon

A

rekursjon
halerekursjon (iterativ prosess)
trerekursjon

32
Q

par

A

> (cons 1 2)
(1 . 2)

> (car (cons 1 2))
1

> (cdr (cons 1 2))
2

33
Q

den tomme listen

A

’()

34
Q

liste

A

Lister er rekursiv definert

  • ’() er en liste
  • et par der cdr på paret er en liste, er en liste

> (cons 1 (cons 2 (cons 3 ‘())))
(1 2 3)

> (list 1 2 3)
(1 2 3)

35
Q

(null? ‘())

A

t

36
Q

en special form som gjør at uttrykket som følger ikke evalueres

A

quote

‘foo
quote foo

37
Q

absoluttverdi

A

abs

38
Q

anvende prosedyre på alle elementene i en liste

A

(map proc list)

NB: Endrer (selvsagt) ikke den opprinnelige listen, men returnerer en ny

39
Q

(reduce proc init ‘(1 2 3))

A

(proc 1 (proc 2 (proc 3 init)))

40
Q

(define stuff (list + “zoo” 42 ‘towel))

> stuff

A

(# “zoo” 42 towel)

41
Q

let-uttrykk med n variable er ekvivalent med…

A

et lamda-uttrykk med n parametre

42
Q

let-uttrykk der bindingene kan referere til hverandre

A

(let* …)

43
Q

let-uttrykk

A

(let ((var1 exp1)
(var2 exp2))
body)

44
Q

message passing

A

en prosedyre kaller en prosedyre med en gitt verdi (beskjed)

define (car proc
(proc 0))

45
Q

par implementert som prosedyre

A

(define (cons x y)
(lambda (query)
(cond ((= query 0) x)
((= query 1) y))))

(clojure!)