From 2941588997745b49992a01a156b3ceaf6337e208 Mon Sep 17 00:00:00 2001 From: Lio Novelli Date: Tue, 30 Apr 2024 19:33:52 +0200 Subject: [PATCH] Linkanje liotovih izpiskov. --- index.org | 1 + zapiski/sicp-lio.html | 534 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 535 insertions(+) create mode 100644 zapiski/sicp-lio.html diff --git a/index.org b/index.org index d14a5df..e4fa9c9 100644 --- a/index.org +++ b/index.org @@ -26,3 +26,4 @@ Link do [[https://dogodki.kompot.si/events/76672075-1c6f-48f1-bc37-05dde93371e5] *** zapiski - [[file:zapiski/1_g1smo.org][g1smo]] +- [[file+emacs:zapiski/sicp-lio.org][lio]] diff --git a/zapiski/sicp-lio.html b/zapiski/sicp-lio.html new file mode 100644 index 0000000..0daf13d --- /dev/null +++ b/zapiski/sicp-lio.html @@ -0,0 +1,534 @@ + + + + + + + +Structure and Interpretation of Computer Programs + + + + + +
+

Structure and Interpretation of Computer Programs

+ + +
+

1. Foreword and Preface

+
+
+

+Lisp je preživeli, v uporabi je že "polovico stoletja". +

+
+ +
+

+The discretionary exportable functionality entrusted to the individual Lisp programmer +is more than an order of magniture greater than that to be found within Pascal enterprises. +

+
+ +
+

+Želimo vzpostaviti idejo, da programski jezik ni samo način, da računalnik izvaja operacije, +ampak da je predvsem nov formalni medij za izražanje idej o metodologiji. Zato morajo biti +programi napisani predvsem zato, da jih ljudje berejo, in slučajno, da jih izvajajo računalniki. +

+ +

+Bistvena tema ni sintaksa določenih struktur v programskem jeziku, niti …, temveč tehnike +nadzora intelektualne kompleksnosti veliki programskih sistemov. +

+
+ +
+

+Naš pristop k temi izvira iz prepričanja, da "computer science" ni znanost in da ima njen +pomen bolj malo opraviti z računalniki. Računalniška revolucija je revolucija v načinu +mišljenja in izražanju idej. Bistvo teh sprememb najbolše opiše pojem +proceduralne epistemologije, ki se ukvarja s strukturo vednosti z imperativnega stališča +za razliko od klasične matematike, ki je bolj deklerativna. Matematika postavi okvir za +natančno spoprijemanje s pojmovanjem "kaj je". Računanje pa ponudi okvir za natančno +ukvarjanje s pojmovanjem "kako". +

+
+
+
+ +
+

2. 1. Grajenje abstrakcij s procedurami

+
+
+
+

2.1. Elementi programiranja

+
+
+
Primitivni izrazi
predstavtljajo najpreprostejše gradnike (entitete) +programskega jezika
+
Načini kombinacije,
s katerimi so sestavljeni elementi zgrajeni iz +preprostejših
+
Načini abstrakcije,
s katerimi so lahko sestavljeni elementi poimenovani in +omogočajo upravljanje z njimii kot enotami
+
+
+
+ +
+

2.2. Izvajanje kombinacij(e)

+
+

+Postopek za izvajanje kombinacij: +

+
    +
  1. Izvedi podizraz kombinacije.
  2. +
  3. Uporabi/uveljavi proceduro, ki je najbolje levi podizraz (operator) z +argumenti, ki so vrednosti drugih podizrazov (operandi).
  4. +
+ +

+Postopek evalvacije je rekurziven, saj drugi korak v sebi vključuje prvega, +oziroma vključuje svojo definicijo. +

+ +

+Tako se zgradi akumulacijsko drevo. Na koncu vedno prideš do točke, ko izvajaš +primitivne izraze, ki so: +

+
    +
  • vrednosti numeričnih števk, ki jo označujejo.
  • +
  • vrednosti vgrajenih operatorjev so strojni ukazi sekvenc, ki izvedejo te +operacije.
  • +
  • vrednosti drugih imen so objekti asociirani s temi imeni v okolju.
  • +
+ +

+Drugo pravilo je poseben primer tretjega pravila. Simboli + in * so tudi +vključeni v globalno okolje in so asociirani s strojnimi ukazi, ki so njihove +vrednosti. Pomembno je prepoznati vlogo okolja pri določanju pomena simbolov v +izrazih. +

+ +

+To pravilo se ne nanaša na posebne oblike (special forms). define je posebna +oblika. +

+
+
+ + +
+

2.3. 1.1.4 Sestavljene procedure

+
+
    +
  • Številke in aritmetične operacije so primitivni podatki in procedure.
  • +
  • Gnezdenje kombinacij omogoča način za združevanje operacij.
  • +
  • Definicije, ki asociirajo imena z vrednostmi omogočajo omejene načine +abstrakcije.
  • +
+ +

+(define (square x) (* x x)) +

+ +

+(define square (lambda (x) (* x x))) +

+
+
+ +
+

2.4. 1.1.5 Substitucijski model za izvajanje procedur

+
+

+Za izvajanje sestavljenih procedur z argumenti, izvedeš telo procedure z vsakim +formalnim parametrom, ki ga nadomestiš s pripadajočim argumentom. +

+ +

+ergh, tukaj se zapletam s slovenskimi prevodi +

+ +

+kaj je application in kaj evaluation? +

+ +

+Načini, na katere deluje interpreter (prevajalnik): +

+
+
Aplikativni vrstni red
Najprej evalviraj operator in operande, potem pa +izvedi proizvedeno proceduro s pridobljenimi argumenti.
+
Normalni vrstni red
Ne izvajaj operandov dokler njihove vrednost niso +potrebne. Najprej zamenjaj izraze operandov s parametri, dokler ne pride do +izraza, ki vsebuje zgolj primitivne izraze in potem izvedi (vso) evalvacijo.
+
+
+
+ + +
+

2.5. meta

+ + + +
+

2.5.1. video lekcije

+
+

+https://yewtu.be/channel/UCEBb1b_L6zDS3xTUrIALZOw (6.001 SICP: Structure and Interpretation of Computer Programs (2004)) +https://yewtu.be/playlist?list=PL7BcsI5ueSNFPCEisbaoQ0kXIDX9rR5FF (MIT 6.001 Structure and Interpretation, 1986) +

+
+
+
+ +
+

2.6. vaje

+
+
+
+

2.6.1. 1.3

+
+
+
    +
  1. najprej narobe
    +
    +

    +Define a procedure that takes three numbers as arguments and returns the sum of +the squares of the two larger numbers. +

    + +
    +
    (define (sum-of-large x y z)
    +  (+
    +   (if (> x y) (* x x) (* y y))
    +   (if (> y z) (* y y) (* z z))
    +   )
    +  )
    +(sum-of-large 3 8 5)
    +
    +
    + +
    +
    (define (sum-of-larger x y z) (let*
    +                                ((s (lambda (a) (* a a)))
    +                                 (sl (lambda (b c) (if (> b c) (s b) (s c))))
    +                                 )
    +                              (+ (sl x y) (sl y z))
    +                              ))
    +(sum-of-larger 3 8 5)
    +
    +
    +
    +
  2. + +
  3. pravilno
    +
    +
    +
    (define (sum-squares-of-larger x y z)
    +  (if (> x y)
    +      (if (> y z)
    +          (+ (* x x) (* y y))
    +          (+ (* x x) (* z z))
    +          )
    +      (if (> x z)
    +          (+ (* y y) (* x x))
    +          (+ (* y y) (* z z))
    +          )
    +      )
    +  )
    +(sum-squares-of-larger 9 10 8)
    +
    +
    +
    +
  4. +
+
+ +
+

2.6.2. 1.5

+
+

+Aplikativni vrstni red: pade takoj v neskoncno zanko. +Normalni vrstni red: izvrsi test in pride v if, ki ne izvrsi drugega dela. +

+
+
+ +
+

2.6.3. 1.6

+ +
+ +
+

2.6.4. 1.7

+
+
    +
  • good-enough? ni vredu za iskanje korenov majhnih stevil.
  • +
  • pravtako za zelo velika stevila
  • +
  • napisi alternativno good-enough? proceduro, ki bo gledala, kdaj so spremembe +dovolj majhne in takrat prekini funkcijo.
  • +
+ +

+// Poglej v sqrt-newton.scm +

+
+
+ +
+

2.6.5. 1.8

+
+

+// Glej v sqrt-newton.sqm +

+
+
+
+ +
+

2.7. 1.1.8 Procedure kot crne skatle abstrakcij

+
+
    +
  • block structure
  • +
  • lexical scoping
  • +
+
+
+
+
+ + \ No newline at end of file