2024-04-30 19:33:52 +02:00
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" >
< head >
2024-05-16 22:33:30 +02:00
<!-- 2024 - 05 - 16 Thu 22:32 -->
2024-04-30 19:33:52 +02:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > Structure and Interpretation of Computer Programs< / title >
< meta name = "author" content = "Lio Novelli" / >
< meta name = "generator" content = "Org Mode" / >
< style >
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
< / style >
< / head >
< body >
< div id = "content" class = "content" >
< h1 class = "title" > Structure and Interpretation of Computer Programs< / h1 >
< div id = "table-of-contents" role = "doc-toc" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" role = "doc-toc" >
< ul >
2024-05-16 22:33:30 +02:00
< li > < a href = "#org65e2102" > 1. Foreword and Preface< / a > < / li >
< li > < a href = "#orgd844a85" > 2. 1. Grajenje abstrakcij s procedurami< / a >
2024-04-30 19:33:52 +02:00
< ul >
2024-05-16 22:33:30 +02:00
< li > < a href = "#org9cc9e23" > 2.1. Elementi programiranja< / a > < / li >
< li > < a href = "#orgc38e99e" > 2.2. Izvajanje kombinacij(e)< / a > < / li >
< li > < a href = "#org4561884" > 2.3. 1.1.4 Sestavljene procedure< / a > < / li >
< li > < a href = "#org5a7e4a4" > 2.4. 1.1.5 Substitucijski model za izvajanje procedur< / a > < / li >
< li > < a href = "#org4f92eb8" > 2.5. meta< / a >
2024-04-30 19:33:52 +02:00
< ul >
2024-05-16 22:33:30 +02:00
< li > < a href = "#org0b39e3d" > 2.5.1. video lekcije< / a > < / li >
2024-04-30 19:33:52 +02:00
< / ul >
< / li >
2024-05-16 22:33:30 +02:00
< li > < a href = "#org56f8627" > 2.6. vaje< / a >
2024-04-30 19:33:52 +02:00
< ul >
2024-05-16 22:33:30 +02:00
< li > < a href = "#org26ed807" > 2.6.1. 1.3< / a > < / li >
< li > < a href = "#org5917931" > 2.6.2. 1.5< / a > < / li >
< li > < a href = "#org46d6002" > 2.6.3. 1.6< / a > < / li >
< li > < a href = "#org752ea5e" > 2.6.4. 1.7< / a > < / li >
< li > < a href = "#org5fba44a" > 2.6.5. 1.8< / a > < / li >
2024-04-30 19:33:52 +02:00
< / ul >
< / li >
2024-05-16 22:33:30 +02:00
< li > < a href = "#orgdf856c9" > 2.7. 1.1.8 Procedure kot crne skatle abstrakcij< / a > < / li >
< li > < a href = "#orgc1bedf1" > 2.8. 1.2.2 Drevesna rekurzija< / a > < / li >
< li > < a href = "#orga7e8396" > 2.9. 1.2.3 Redi rasti< / a > < / li >
< li > < a href = "#orgf79e38f" > 2.10. 1.2.4 Eksponentna funkcija< / a > < / li >
< li > < a href = "#org8125de0" > 2.11. 1.2.5 Najvecji skupni deljitel< / a > < / li >
< li > < a href = "#orge8e49b3" > 2.12. 1.2.6 Primer: Iskanje prastevil< / a > < / li >
< li > < a href = "#org6c46b7b" > 2.13. 1.3 Sestavljanje abstrakcij s procedurami visjega reda< / a > < / li >
< li > < a href = "#orga8cba41" > 2.14. 1.3.1 Procedure kot argumenti< / a > < / li >
< li > < a href = "#orgb6993b9" > 2.15. 1.3.2 Sestavljanje procedur z Lambda< / a > < / li >
< li > < a href = "#org5ea790c" > 2.16. 1.3.3 Procedure kot splosne metode< / a > < / li >
< li > < a href = "#org0a1c5a7" > 2.17. 1.3.4 Procedure kot vrnjene vrednosti< / a > < / li >
2024-04-30 19:33:52 +02:00
< / ul >
< / li >
< / ul >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org65e2102" class = "outline-2" >
< h2 id = "org65e2102" > < span class = "section-number-2" > 1.< / span > Foreword and Preface< / h2 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-2" id = "text-1" >
< blockquote >
< p >
Lisp je preživeli, v uporabi je že "polovico stoletja".
< / p >
< / blockquote >
< blockquote >
< p >
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.
< / p >
< / blockquote >
< blockquote >
< p >
Ž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.
< / p >
< p >
Bistvena tema ni sintaksa določenih struktur v programskem jeziku, niti … , temveč tehnike
nadzora intelektualne kompleksnosti veliki programskih sistemov.
< / p >
< / blockquote >
< blockquote >
< p >
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
< span class = "underline" > proceduralne epistemologije< / span > , 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".
< / p >
< / blockquote >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-orgd844a85" class = "outline-2" >
< h2 id = "orgd844a85" > < span class = "section-number-2" > 2.< / span > 1. Grajenje abstrakcij s procedurami< / h2 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-2" id = "text-2" >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org9cc9e23" class = "outline-3" >
< h3 id = "org9cc9e23" > < span class = "section-number-3" > 2.1.< / span > Elementi programiranja< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-1" >
< dl class = "org-dl" >
< dt > Primitivni izrazi< / dt > < dd > predstavtljajo najpreprostejše gradnike (entitete)
programskega jezika< / dd >
< dt > Načini kombinacije,< / dt > < dd > s katerimi so sestavljeni elementi zgrajeni iz
preprostejših< / dd >
< dt > Načini abstrakcije,< / dt > < dd > s katerimi so lahko sestavljeni elementi poimenovani in
omogočajo upravljanje z njimii kot enotami< / dd >
< / dl >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-orgc38e99e" class = "outline-3" >
< h3 id = "orgc38e99e" > < span class = "section-number-3" > 2.2.< / span > Izvajanje kombinacij(e)< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-2" >
< p >
Postopek za izvajanje kombinacij:
< / p >
< ol class = "org-ol" >
< li > Izvedi podizraz kombinacije.< / li >
< li > Uporabi/uveljavi proceduro, ki je najbolje levi podizraz (operator) z
argumenti, ki so vrednosti drugih podizrazov (operandi).< / li >
< / ol >
< p >
Postopek evalvacije je rekurziven, saj drugi korak v sebi vključuje prvega,
oziroma vključuje svojo definicijo.
< / p >
< p >
Tako se zgradi akumulacijsko drevo. Na koncu vedno prideš do točke, ko izvajaš
primitivne izraze, ki so:
< / p >
< ul class = "org-ul" >
< li > vrednosti numeričnih števk, ki jo označujejo.< / li >
< li > vrednosti vgrajenih operatorjev so strojni ukazi sekvenc, ki izvedejo te
operacije.< / li >
< li > vrednosti drugih imen so objekti asociirani s temi imeni v okolju.< / li >
< / ul >
< p >
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. < b > Pomembno je prepoznati vlogo okolja pri določanju pomena simbolov v
izrazih.< / b >
< / p >
< p >
To pravilo se ne nanaša na < span class = "underline" > posebne oblike (special forms)< / span > . < code > define< / code > je posebna
oblika.
< / p >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org4561884" class = "outline-3" >
< h3 id = "org4561884" > < span class = "section-number-3" > 2.3.< / span > 1.1.4 Sestavljene procedure< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-3" >
< ul class = "org-ul" >
< li > Številke in aritmetične operacije so primitivni podatki in procedure.< / li >
< li > Gnezdenje kombinacij omogoča način za združevanje operacij.< / li >
< li > Definicije, ki asociirajo imena z vrednostmi omogočajo omejene načine
abstrakcije.< / li >
< / ul >
< p >
< code > (define (square x) (* x x))< / code >
< / p >
< p >
< code > (define square (lambda (x) (* x x)))< / code >
< / p >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org5a7e4a4" class = "outline-3" >
< h3 id = "org5a7e4a4" > < span class = "section-number-3" > 2.4.< / span > 1.1.5 Substitucijski model za izvajanje procedur< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-4" >
< p >
Za izvajanje sestavljenih procedur z argumenti, izvedeš telo procedure z vsakim
formalnim parametrom, ki ga nadomestiš s pripadajočim argumentom.
< / p >
< p >
< span class = "underline" > ergh, tukaj se zapletam s slovenskimi prevodi< / span >
< / p >
< p >
< span class = "underline" > kaj je application in kaj evaluation?< / span >
< / p >
< p >
Načini, na katere deluje interpreter (prevajalnik):
< / p >
< dl class = "org-dl" >
< dt > Aplikativni vrstni red< / dt > < dd > Najprej evalviraj operator in operande, potem pa
izvedi proizvedeno proceduro s pridobljenimi argumenti.< / dd >
< dt > Normalni vrstni red< / dt > < dd > 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.< / dd >
< / dl >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org4f92eb8" class = "outline-3" >
< h3 id = "org4f92eb8" > < span class = "section-number-3" > 2.5.< / span > meta< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-5" >
< p >
Linki:
< a href = "https://develop.spacemacs.org/layers/+lang/scheme/README.html" > https://develop.spacemacs.org/layers/+lang/scheme/README.html< / a >
< a href = "https://www.nongnu.org/geiser/" > https://www.nongnu.org/geiser/< / a >
< a href = "https://www.gnu.org/software/guile/learn/" > https://www.gnu.org/software/guile/learn/< / a >
< a href = "https://spritely.institute/static/papers/scheme-primer.html#introduction" > https://spritely.institute/static/papers/scheme-primer.html#introduction< / a >
< / p >
< p >
Kako nastavit spacemacs, in malo o guile-u.
< / p >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org0b39e3d" class = "outline-4" >
< h4 id = "org0b39e3d" > < span class = "section-number-4" > 2.5.1.< / span > video lekcije< / h4 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-4" id = "text-2-5-1" >
< p >
< a href = "https://yewtu.be/channel/UCEBb1b_L6zDS3xTUrIALZOw" > https://yewtu.be/channel/UCEBb1b_L6zDS3xTUrIALZOw< / a > (6.001 SICP: Structure and Interpretation of Computer Programs (2004))
< a href = "https://yewtu.be/playlist?list=PL7BcsI5ueSNFPCEisbaoQ0kXIDX9rR5FF" > https://yewtu.be/playlist?list=PL7BcsI5ueSNFPCEisbaoQ0kXIDX9rR5FF< / a > (MIT 6.001 Structure and Interpretation, 1986)
< / p >
< / div >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org56f8627" class = "outline-3" >
< h3 id = "org56f8627" > < span class = "section-number-3" > 2.6.< / span > vaje< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-6" >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org26ed807" class = "outline-4" >
< h4 id = "org26ed807" > < span class = "section-number-4" > 2.6.1.< / span > 1.3< / h4 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-4" id = "text-2-6-1" >
< / div >
< ol class = "org-ol" >
2024-05-16 22:33:30 +02:00
< li > < a id = "orgffab77a" > < / a > najprej narobe< br / >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-5" id = "text-2-6-1-1" >
< p >
Define a procedure that takes three numbers as arguments and returns the sum of
the squares of the two larger numbers.
< / p >
< div class = "org-src-container" >
2024-05-16 22:33:30 +02:00
< pre class = "src src-scheme" > < span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > sum-of-large< / span > x y z< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > +
< span style = "color: #2d9574;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > x y< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * x x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * y y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > y z< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * y y< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * z z< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > sum-of-large < span style = "color: #4e3163;" > 3< / span > < span style = "color: #4e3163;" > 8< / span > < span style = "color: #4e3163;" > 5< / span > < span style = "color: #3a81c3;" > )< / span >
2024-04-30 19:33:52 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2024-05-16 22:33:30 +02:00
< pre class = "src src-scheme" > < span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > sum-of-larger< / span > x y z< span style = "color: #6c3163;" > )< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > let*< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > s < span style = "color: #b1951d;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > lambda< / span > < span style = "color: #3a81c3;" > (< / span > a< span style = "color: #3a81c3;" > )< / span > < span style = "color: #3a81c3;" > (< / span > * a a< span style = "color: #3a81c3;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > sl < span style = "color: #b1951d;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > lambda< / span > < span style = "color: #3a81c3;" > (< / span > b c< span style = "color: #3a81c3;" > )< / span > < span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #6c3163;" > (< / span > > b c< span style = "color: #6c3163;" > )< / span > < span style = "color: #6c3163;" > (< / span > s b< span style = "color: #6c3163;" > )< / span > < span style = "color: #6c3163;" > (< / span > s c< span style = "color: #6c3163;" > )< / span > < span style = "color: #3a81c3;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
2024-04-30 19:33:52 +02:00
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > + < span style = "color: #67b11d;" > (< / span > sl x y< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > sl y z< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
2024-05-16 22:33:30 +02:00
< span style = "color: #6c3163;" > )< / span > < span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > sum-of-larger < span style = "color: #4e3163;" > 3< / span > < span style = "color: #4e3163;" > 8< / span > < span style = "color: #4e3163;" > 5< / span > < span style = "color: #3a81c3;" > )< / span >
2024-04-30 19:33:52 +02:00
< / pre >
< / div >
< / div >
< / li >
2024-05-16 22:33:30 +02:00
< li > < a id = "orgb84d327" > < / a > pravilno< br / >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-5" id = "text-2-6-1-2" >
< div class = "org-src-container" >
2024-05-16 22:33:30 +02:00
< pre class = "src src-scheme" > < span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > sum-squares-of-larger< / span > x y z< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > x y< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > y z< span style = "color: #67b11d;" > )< / span >
2024-04-30 19:33:52 +02:00
< span style = "color: #67b11d;" > (< / span > + < span style = "color: #b1951d;" > (< / span > * x x< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * y y< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > + < span style = "color: #b1951d;" > (< / span > * x x< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * z z< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
2024-05-16 22:33:30 +02:00
< span style = "color: #2d9574;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > x z< span style = "color: #67b11d;" > )< / span >
2024-04-30 19:33:52 +02:00
< span style = "color: #67b11d;" > (< / span > + < span style = "color: #b1951d;" > (< / span > * y y< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * x x< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > + < span style = "color: #b1951d;" > (< / span > * y y< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * z z< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
2024-05-16 22:33:30 +02:00
< span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > sum-squares-of-larger < span style = "color: #4e3163;" > 9< / span > < span style = "color: #4e3163;" > 10< / span > < span style = "color: #4e3163;" > 8< / span > < span style = "color: #3a81c3;" > )< / span >
2024-04-30 19:33:52 +02:00
< / pre >
< / div >
< / div >
< / li >
< / ol >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org5917931" class = "outline-4" >
< h4 id = "org5917931" > < span class = "section-number-4" > 2.6.2.< / span > 1.5< / h4 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-4" id = "text-2-6-2" >
< p >
Aplikativni vrstni red: pade takoj v neskoncno zanko.
Normalni vrstni red: izvrsi test in pride v if, ki ne izvrsi drugega dela.
< / p >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org46d6002" class = "outline-4" >
< h4 id = "org46d6002" > < span class = "section-number-4" > 2.6.3.< / span > 1.6< / h4 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-4" id = "text-2-6-3" >
< p >
< a href = "sqrt-newton.scm" > sqrt-newton.scm< / a >
< / p >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org752ea5e" class = "outline-4" >
< h4 id = "org752ea5e" > < span class = "section-number-4" > 2.6.4.< / span > 1.7< / h4 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-4" id = "text-2-6-4" >
< ul class = "org-ul" >
< li > < code > good-enough?< / code > ni vredu za iskanje korenov majhnih stevil.< / li >
< li > pravtako za zelo velika stevila< / li >
< li > napisi alternativno < code > good-enough?< / code > proceduro, ki bo gledala, kdaj so spremembe
dovolj majhne in takrat prekini funkcijo.< / li >
< / ul >
< p >
// Poglej v sqrt-newton.scm
< / p >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-org5fba44a" class = "outline-4" >
< h4 id = "org5fba44a" > < span class = "section-number-4" > 2.6.5.< / span > 1.8< / h4 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-4" id = "text-2-6-5" >
< p >
// Glej v sqrt-newton.sqm
< / p >
< / div >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-orgdf856c9" class = "outline-3" >
< h3 id = "orgdf856c9" > < span class = "section-number-3" > 2.7.< / span > 1.1.8 Procedure kot crne skatle abstrakcij< / h3 >
2024-04-30 19:33:52 +02:00
< div class = "outline-text-3" id = "text-2-7" >
< ul class = "org-ul" >
< li > block structure< / li >
< li > lexical scoping< / li >
< / ul >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< div id = "outline-container-orgc1bedf1" class = "outline-3" >
< h3 id = "orgc1bedf1" > < span class = "section-number-3" > 2.8.< / span > 1.2.2 Drevesna rekurzija< / h3 >
< / div >
< div id = "outline-container-orga7e8396" class = "outline-3" >
< h3 id = "orga7e8396" > < span class = "section-number-3" > 2.9.< / span > 1.2.3 Redi rasti< / h3 >
< / div >
< div id = "outline-container-orgf79e38f" class = "outline-3" >
< h3 id = "orgf79e38f" > < span class = "section-number-3" > 2.10.< / span > 1.2.4 Eksponentna funkcija< / h3 >
< / div >
< div id = "outline-container-org8125de0" class = "outline-3" >
< h3 id = "org8125de0" > < span class = "section-number-3" > 2.11.< / span > 1.2.5 Najvecji skupni deljitel< / h3 >
< / div >
< div id = "outline-container-orge8e49b3" class = "outline-3" >
< h3 id = "orge8e49b3" > < span class = "section-number-3" > 2.12.< / span > 1.2.6 Primer: Iskanje prastevil< / h3 >
< / div >
< div id = "outline-container-org6c46b7b" class = "outline-3" >
< h3 id = "org6c46b7b" > < span class = "section-number-3" > 2.13.< / span > 1.3 Sestavljanje abstrakcij s procedurami visjega reda< / h3 >
< / div >
< div id = "outline-container-orga8cba41" class = "outline-3" >
< h3 id = "orga8cba41" > < span class = "section-number-3" > 2.14.< / span > 1.3.1 Procedure kot argumenti< / h3 >
< div class = "outline-text-3" id = "text-2-14" >
< p >
//exercise 1.29
#name: simpson
< / p >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > sum< / span > term a next b< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
< span style = "color: #4e3163;" > 0< / span >
< span style = "color: #2d9574;" > (< / span > + < span style = "color: #67b11d;" > (< / span > term a< span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > sum term < span style = "color: #b1951d;" > (< / span > next a< span style = "color: #b1951d;" > )< / span > next b< span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > integral< / span > f a b dx< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > add-dx< / span > x< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > + x dx< span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > * < span style = "color: #2d9574;" > (< / span > sum f < span style = "color: #67b11d;" > (< / span > + a < span style = "color: #b1951d;" > (< / span > / dx < span style = "color: #4e3163;" > 2.0< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > add-dx b< span style = "color: #2d9574;" > )< / span > dx< span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > sum-s< / span > term a next b fact< span style = "color: #6c3163;" > )< / span >
< span style = "color: #2aa1ae; background-color: #ecf3ec;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #ecf3ec;" > fact is altering between 4 and 2< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > check-fact< / span > fact< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > = fact < span style = "color: #4e3163;" > 4< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 4< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
< span style = "color: #4e3163;" > 0< / span >
< span style = "color: #2d9574;" > (< / span > + < span style = "color: #67b11d;" > (< / span > * fact < span style = "color: #b1951d;" > (< / span > term a< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > sum-s term < span style = "color: #b1951d;" > (< / span > next a< span style = "color: #b1951d;" > )< / span > next b < span style = "color: #b1951d;" > (< / span > check-fact fact< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > simpson< / span > f a b dx< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > add-dx< / span > x< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > + x dx< span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > * < span style = "color: #2d9574;" > (< / span > + < span style = "color: #67b11d;" > (< / span > f a< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > f b< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > sum-s f < span style = "color: #b1951d;" > (< / span > add-dx a< span style = "color: #b1951d;" > )< / span > add-dx < span style = "color: #b1951d;" > (< / span > - b dx< span style = "color: #b1951d;" > )< / span > < span style = "color: #4e3163;" > 4< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > / dx < span style = "color: #4e3163;" > 3.0< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > simpson-gizmo< / span > f a b dx< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > add-dxdx< / span > x< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > + x dx dx< span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > * < span style = "color: #2d9574;" > (< / span > +
< span style = "color: #67b11d;" > (< / span > * < span style = "color: #4e3163;" > 4< / span > < span style = "color: #b1951d;" > (< / span > sum f < span style = "color: #3a81c3;" > (< / span > + a dx< span style = "color: #3a81c3;" > )< / span > add-dxdx b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > * < span style = "color: #4e3163;" > 2< / span > < span style = "color: #b1951d;" > (< / span > sum f a add-dxdx b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > - < span style = "color: #b1951d;" > (< / span > f a< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > - < span style = "color: #b1951d;" > (< / span > f b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > / dx < span style = "color: #4e3163;" > 3.0< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > cube< / span > x< span style = "color: #6c3163;" > )< / span > < span style = "color: #6c3163;" > (< / span > * x x x< span style = "color: #6c3163;" > )< / span > < span style = "color: #3a81c3;" > )< / span >
< span style = "color: #3a81c3;" > (< / span > list
< span style = "color: #6c3163;" > (< / span > integral cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 0.01< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > integral cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 0.001< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > simpson cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 0.01< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > simpson cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 0.001< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > simpson cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #2d9574;" > (< / span > / < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 1000< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > simpson-gizmo cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 0.01< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > simpson-gizmo cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #2d9574;" > (< / span > / < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 10000< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > simpson-gizmo cube < span style = "color: #4e3163;" > 1< / span > < span style = "color: #4e3163;" > 2< / span > < span style = "color: #4e3163;" > 0.00001< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< / pre >
< / div >
< p >
// exercise 1.30
< / p >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #3a81c3;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #6c3163;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > sum-i< / span > term a next b< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #6c3163; font-weight: bold;" > iter< / span > a result< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #3a81c3; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > a b< span style = "color: #67b11d;" > )< / span >
result
< span style = "color: #67b11d;" > (< / span > iter < span style = "color: #b1951d;" > (< / span > next a< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > + result < span style = "color: #3a81c3;" > (< / span > term a< span style = "color: #3a81c3;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #6c3163;" > )< / span >
< span style = "color: #6c3163;" > (< / span > iter a < span style = "color: #4e3163;" > 0< / span > < span style = "color: #6c3163;" > )< / span >
< span style = "color: #3a81c3;" > )< / span >
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-orgb6993b9" class = "outline-3" >
< h3 id = "orgb6993b9" > < span class = "section-number-3" > 2.15.< / span > 1.3.2 Sestavljanje procedur z Lambda< / h3 >
< / div >
< div id = "outline-container-org5ea790c" class = "outline-3" >
< h3 id = "org5ea790c" > < span class = "section-number-3" > 2.16.< / span > 1.3.3 Procedure kot splosne metode< / h3 >
< / div >
< div id = "outline-container-org0a1c5a7" class = "outline-3" >
< h3 id = "org0a1c5a7" > < span class = "section-number-3" > 2.17.< / span > 1.3.4 Procedure kot vrnjene vrednosti< / h3 >
< / div >
2024-04-30 19:33:52 +02:00
< / div >
< / div >
< / body >
< / html >