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-06-10 01:04:10 +02:00
<!-- 2024 - 06 - 10 Mon 01:02 -->
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-06-10 01:04:10 +02:00
< li > < a href = "#org1ab68a2" > Foreword and Preface< / a > < / li >
< li > < a href = "#org6693cbf" > 1. Grajenje abstrakcij s procedurami< / a >
2024-04-30 19:33:52 +02:00
< ul >
2024-06-10 01:04:10 +02:00
< li > < a href = "#org6b0ed2e" > 1.1. Elementi programiranja< / a > < / li >
< li > < a href = "#orgebcf1d6" > 1.2. Izvajanje kombinacij(e)< / a > < / li >
< li > < a href = "#org8937279" > 1.3. 1.1.4 Sestavljene procedure< / a > < / li >
< li > < a href = "#orgcb5c684" > 1.4. 1.1.5 Substitucijski model za izvajanje procedur< / a > < / li >
< li > < a href = "#org0a42e4c" > 1.5. meta< / a >
2024-04-30 19:33:52 +02:00
< ul >
2024-06-10 01:04:10 +02:00
< li > < a href = "#orgb0f9514" > 1.5.1. video lekcije< / a > < / li >
2024-04-30 19:33:52 +02:00
< / ul >
< / li >
2024-06-10 01:04:10 +02:00
< li > < a href = "#orgd2a78f0" > 1.6. vaje< / a >
2024-04-30 19:33:52 +02:00
< ul >
2024-06-10 01:04:10 +02:00
< li > < a href = "#org7790bc5" > 1.6.1. 1.3< / a > < / li >
< li > < a href = "#org3ccc9ff" > 1.6.2. 1.5< / a > < / li >
< li > < a href = "#orge03b4b9" > 1.6.3. 1.6< / a > < / li >
< li > < a href = "#org62edd3c" > 1.6.4. 1.7< / a > < / li >
< li > < a href = "#org42d25fe" > 1.6.5. 1.8< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org670694e" > 1.7. 1.1.8 Procedure kot crne skatle abstrakcij< / a > < / li >
< li > < a href = "#org058363a" > 1.8. 1.2.2 Drevesna rekurzija< / a > < / li >
< li > < a href = "#orga2d0d00" > 1.9. 1.2.3 Redi rasti< / a > < / li >
< li > < a href = "#orgdb2bb3d" > 1.10. 1.2.4 Eksponentna funkcija< / a > < / li >
< li > < a href = "#org867a680" > 1.11. 1.2.5 Najvecji skupni deljitel< / a > < / li >
< li > < a href = "#org29472e2" > 1.12. 1.2.6 Primer: Iskanje prastevil< / a > < / li >
< li > < a href = "#org84f4b2d" > 1.13. 1.3 Sestavljanje abstrakcij s procedurami visjega reda< / a > < / li >
< li > < a href = "#org43a7808" > 1.14. 1.3.1 Procedure kot argumenti< / a > < / li >
< li > < a href = "#orga384969" > 1.15. 1.3.2 Sestavljanje procedur z < code > Lambda< / code > < / a > < / li >
< li > < a href = "#org590844a" > 1.16. 1.3.3 Procedure kot splosne metode< / a > < / li >
< li > < a href = "#org8a3aa7d" > 1.17. 1.3.4 Procedure kot vrnjene vrednosti< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org66fd37e" > 2. Grajenje absrakcij s podatki< / a >
< ul >
< li > < a href = "#org501bf16" > 2.1. Uvod v podatkovne abstrakcije< / a >
< ul >
< li > < a href = "#orga2f86a5" > 2.1.1. Aritmeticne operacije z racionalnimi stevili< / a > < / li >
< li > < a href = "#org9d926fd" > 2.1.2. Pregrade abstrakcij< / a > < / li >
< li > < a href = "#org518e1e2" > 2.1.3. Kaj so podatki?< / a > < / li >
2024-04-30 19:33:52 +02:00
< / ul >
< / li >
< / ul >
< / li >
< / ul >
< / div >
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org1ab68a2" class = "outline-2" >
< h2 id = "org1ab68a2" > Foreword and Preface< / h2 >
< div class = "outline-text-2" id = "text-org1ab68a2" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-org6693cbf" class = "outline-2" >
< h2 id = "org6693cbf" > < span class = "section-number-2" > 1.< / span > Grajenje abstrakcij s procedurami< / h2 >
< div class = "outline-text-2" id = "text-1" >
2024-04-30 19:33:52 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org6b0ed2e" class = "outline-3" >
< h3 id = "org6b0ed2e" > < span class = "section-number-3" > 1.1.< / span > Elementi programiranja< / h3 >
< div class = "outline-text-3" id = "text-1-1" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-orgebcf1d6" class = "outline-3" >
< h3 id = "orgebcf1d6" > < span class = "section-number-3" > 1.2.< / span > Izvajanje kombinacij(e)< / h3 >
< div class = "outline-text-3" id = "text-1-2" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-org8937279" class = "outline-3" >
< h3 id = "org8937279" > < span class = "section-number-3" > 1.3.< / span > 1.1.4 Sestavljene procedure< / h3 >
< div class = "outline-text-3" id = "text-1-3" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-orgcb5c684" class = "outline-3" >
< h3 id = "orgcb5c684" > < span class = "section-number-3" > 1.4.< / span > 1.1.5 Substitucijski model za izvajanje procedur< / h3 >
< div class = "outline-text-3" id = "text-1-4" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-org0a42e4c" class = "outline-3" >
< h3 id = "org0a42e4c" > < span class = "section-number-3" > 1.5.< / span > meta< / h3 >
< div class = "outline-text-3" id = "text-1-5" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-orgb0f9514" class = "outline-4" >
< h4 id = "orgb0f9514" > < span class = "section-number-4" > 1.5.1.< / span > video lekcije< / h4 >
< div class = "outline-text-4" id = "text-1-5-1" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-orgd2a78f0" class = "outline-3" >
< h3 id = "orgd2a78f0" > < span class = "section-number-3" > 1.6.< / span > vaje< / h3 >
< div class = "outline-text-3" id = "text-1-6" >
2024-04-30 19:33:52 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org7790bc5" class = "outline-4" >
< h4 id = "org7790bc5" > < span class = "section-number-4" > 1.6.1.< / span > 1.3< / h4 >
< div class = "outline-text-4" id = "text-1-6-1" >
2024-04-30 19:33:52 +02:00
< / div >
< ol class = "org-ol" >
2024-06-10 01:04:10 +02:00
< li > < a id = "orga11bbd9" > < / a > najprej narobe< br / >
< div class = "outline-text-5" id = "text-1-6-1-1" >
2024-04-30 19:33:52 +02:00
< 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-29 21:54:05 +02:00
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-of-large< / span > x y z< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > +
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; 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: #4f97d7; 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: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > sum-of-large < span style = "color: #a45bad;" > 3< / span > < span style = "color: #a45bad;" > 8< / span > < span style = "color: #a45bad;" > 5< / span > < span style = "color: #4f97d7;" > )< / span >
2024-04-30 19:33:52 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2024-05-29 21:54:05 +02:00
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-of-larger< / span > x y z< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > let*< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > s < span style = "color: #b1951d;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #4f97d7;" > (< / span > a< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > * a a< span style = "color: #4f97d7;" > )< / 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: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #4f97d7;" > (< / span > b c< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #bc6ec5;" > (< / span > > b c< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > s b< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > s c< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / 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-29 21:54:05 +02:00
< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > sum-of-larger < span style = "color: #a45bad;" > 3< / span > < span style = "color: #a45bad;" > 8< / span > < span style = "color: #a45bad;" > 5< / span > < span style = "color: #4f97d7;" > )< / span >
2024-04-30 19:33:52 +02:00
< / pre >
< / div >
< / div >
< / li >
2024-06-10 01:04:10 +02:00
< li > < a id = "orga97ce26" > < / a > pravilno< br / >
< div class = "outline-text-5" id = "text-1-6-1-2" >
2024-04-30 19:33:52 +02:00
< div class = "org-src-container" >
2024-05-29 21:54:05 +02:00
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-squares-of-larger< / span > x y z< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; 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: #4f97d7; 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-29 21:54:05 +02:00
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; 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-29 21:54:05 +02:00
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > sum-squares-of-larger < span style = "color: #a45bad;" > 9< / span > < span style = "color: #a45bad;" > 10< / span > < span style = "color: #a45bad;" > 8< / span > < span style = "color: #4f97d7;" > )< / span >
2024-04-30 19:33:52 +02:00
< / pre >
< / div >
< / div >
< / li >
< / ol >
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org3ccc9ff" class = "outline-4" >
< h4 id = "org3ccc9ff" > < span class = "section-number-4" > 1.6.2.< / span > 1.5< / h4 >
< div class = "outline-text-4" id = "text-1-6-2" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-orge03b4b9" class = "outline-4" >
< h4 id = "orge03b4b9" > < span class = "section-number-4" > 1.6.3.< / span > 1.6< / h4 >
< div class = "outline-text-4" id = "text-1-6-3" >
2024-04-30 19:33:52 +02:00
< p >
< a href = "sqrt-newton.scm" > sqrt-newton.scm< / a >
< / p >
< / div >
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org62edd3c" class = "outline-4" >
< h4 id = "org62edd3c" > < span class = "section-number-4" > 1.6.4.< / span > 1.7< / h4 >
< div class = "outline-text-4" id = "text-1-6-4" >
2024-04-30 19:33:52 +02:00
< 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-06-10 01:04:10 +02:00
< div id = "outline-container-org42d25fe" class = "outline-4" >
< h4 id = "org42d25fe" > < span class = "section-number-4" > 1.6.5.< / span > 1.8< / h4 >
< div class = "outline-text-4" id = "text-1-6-5" >
2024-04-30 19:33:52 +02:00
< p >
// Glej v sqrt-newton.sqm
< / p >
< / div >
< / div >
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org670694e" class = "outline-3" >
< h3 id = "org670694e" > < span class = "section-number-3" > 1.7.< / span > 1.1.8 Procedure kot crne skatle abstrakcij< / h3 >
< div class = "outline-text-3" id = "text-1-7" >
2024-04-30 19:33:52 +02:00
< ul class = "org-ul" >
< li > block structure< / li >
< li > lexical scoping< / li >
< / ul >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org058363a" class = "outline-3" >
< h3 id = "org058363a" > < span class = "section-number-3" > 1.8.< / span > 1.2.2 Drevesna rekurzija< / h3 >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-orga2d0d00" class = "outline-3" >
< h3 id = "orga2d0d00" > < span class = "section-number-3" > 1.9.< / span > 1.2.3 Redi rasti< / h3 >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-orgdb2bb3d" class = "outline-3" >
< h3 id = "orgdb2bb3d" > < span class = "section-number-3" > 1.10.< / span > 1.2.4 Eksponentna funkcija< / h3 >
< div class = "outline-text-3" id = "text-1-10" >
< p >
Tukaj se naucimu successive squaring, ki potem se veckrat prav pride.
< / p >
2024-05-29 21:54:05 +02:00
< p >
#name: exponent
< / p >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > O(n) korakov in O(n) prostora< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > expt< / span > b n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > = n < span style = "color: #a45bad;" > 0< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #a45bad;" > 1< / span >
< span style = "color: #2d9574;" > (< / span > * b < span style = "color: #67b11d;" > (< / span > expt b < span style = "color: #b1951d;" > (< / span > - n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > expt-i< / span > b n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > expt-iter b n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > O(n) korakov O(1) prostor< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > expt-iter< / span > b cnt prod< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > = cnt < span style = "color: #a45bad;" > 0< / span > < span style = "color: #2d9574;" > )< / span >
prod
< span style = "color: #2d9574;" > (< / span > expt-iter b < span style = "color: #67b11d;" > (< / span > - cnt < span style = "color: #a45bad;" > 1< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * b prod< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-expt< / span > b n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = n < span style = "color: #a45bad;" > 0< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 1< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > even? n< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > square < span style = "color: #b1951d;" > (< / span > fast-expt b < span style = "color: #4f97d7;" > (< / span > / n < span style = "color: #a45bad;" > 2< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #67b11d;" > (< / span > * b < span style = "color: #b1951d;" > (< / span > fast-expt b < span style = "color: #4f97d7;" > (< / span > - n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > even?< / span > n< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > = < span style = "color: #2d9574;" > (< / span > remainder n < span style = "color: #a45bad;" > 2< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #a45bad;" > 0< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > square< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > * x x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > 1.16< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > successive squaring (fast-expt) but with iteration.< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > transformation (* a (expt b n)) constant< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-expt-i< / span > b n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > fast-expt-iter b n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-expt-iter< / span > b n a< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = n < span style = "color: #a45bad;" > 0< / span > < span style = "color: #67b11d;" > )< / span > a< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > even? n< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > fast-expt-iter < span style = "color: #b1951d;" > (< / span > square b< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > / n < span style = "color: #a45bad;" > 2< / span > < span style = "color: #b1951d;" > )< / span > a< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #67b11d;" > (< / span > fast-expt-iter b < span style = "color: #b1951d;" > (< / span > - n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * a b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > I'm not sure why this works. I was just guessing.< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > excersize 1.17< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > slow-multi< / span > a b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > = b < span style = "color: #a45bad;" > 0< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #a45bad;" > 0< / span >
< span style = "color: #2d9574;" > (< / span > + a < span style = "color: #67b11d;" > (< / span > * a < span style = "color: #b1951d;" > (< / span > - b < span style = "color: #a45bad;" > 1< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > halve< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > / x < span style = "color: #a45bad;" > 2< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > double< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > * x < span style = "color: #a45bad;" > 2< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-multi< / span > a b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = b < span style = "color: #a45bad;" > 0< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 0< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > even? b< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > double < span style = "color: #b1951d;" > (< / span > fast-multi a < span style = "color: #4f97d7;" > (< / span > halve b< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #67b11d;" > (< / span > + a < span style = "color: #b1951d;" > (< / span > fast-multi a < span style = "color: #4f97d7;" > (< / span > - b < span style = "color: #a45bad;" > 1< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > excersize 1.18< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-multi-i< / span > a b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > fast-multi-iter a b < span style = "color: #a45bad;" > 0< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-multi-iter< / span > a b s< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = b < span style = "color: #a45bad;" > 0< / span > < span style = "color: #67b11d;" > )< / span > s< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > even? b< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > fast-multi-iter < span style = "color: #b1951d;" > (< / span > double a< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > halve b< span style = "color: #b1951d;" > )< / span > s< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #67b11d;" > (< / span > fast-multi-iter a < span style = "color: #b1951d;" > (< / span > - b < span style = "color: #a45bad;" > 1< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > + s a< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
2024-06-10 01:04:10 +02:00
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > excercise 1.19 - fast fibnonachi< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-fibo< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > fast-fibo-iter < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 0< / span > < span style = "color: #a45bad;" > 0< / span > < span style = "color: #a45bad;" > 1< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fast-fibo-iter< / span > a b p q count< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = count < span style = "color: #a45bad;" > 0< / span > < span style = "color: #67b11d;" > )< / span > b< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > even? count< span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > fast-fibo-iter
a
b
< span style = "color: #b1951d;" > (< / span > + < span style = "color: #4f97d7;" > (< / span > * p p< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > * q q< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #b1951d;" > (< / span > + < span style = "color: #4f97d7;" > (< / span > * q q< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > * < span style = "color: #a45bad;" > 2< / span > p q< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #b1951d;" > (< / span > / count < span style = "color: #a45bad;" > 2< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #67b11d;" > (< / span > fast-fibo-iter
< span style = "color: #b1951d;" > (< / span > + < span style = "color: #4f97d7;" > (< / span > * b q< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > * a q< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > * a p< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #b1951d;" > (< / span > + < span style = "color: #4f97d7;" > (< / span > * b p< span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > * a q< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span >
p
q
< span style = "color: #b1951d;" > (< / span > - count < span style = "color: #a45bad;" > 1< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > p' = q^2 + 2pq< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > p' = p^2 + q^2< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > slow-fibo< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = n < span style = "color: #a45bad;" > 0< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 0< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #67b11d;" > (< / span > = n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 1< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #67b11d;" > (< / span > +
< span style = "color: #b1951d;" > (< / span > slow-fibo < span style = "color: #4f97d7;" > (< / span > - n < span style = "color: #a45bad;" > 1< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #b1951d;" > (< / span > slow-fibo < span style = "color: #4f97d7;" > (< / span > - n < span style = "color: #a45bad;" > 2< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span >
< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > melje melje in melje . fast-fibo iypljune takoj< / span >
2024-05-29 21:54:05 +02:00
< / pre >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org867a680" class = "outline-3" >
< h3 id = "org867a680" > < span class = "section-number-3" > 1.11.< / span > 1.2.5 Najvecji skupni deljitel< / h3 >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org29472e2" class = "outline-3" >
< h3 id = "org29472e2" > < span class = "section-number-3" > 1.12.< / span > 1.2.6 Primer: Iskanje prastevil< / h3 >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org84f4b2d" class = "outline-3" >
< h3 id = "org84f4b2d" > < span class = "section-number-3" > 1.13.< / span > 1.3 Sestavljanje abstrakcij s procedurami visjega reda< / h3 >
< div class = "outline-text-3" id = "text-1-13" >
2024-05-29 21:54:05 +02:00
< p >
Procedure, ki spreminjajo druge procedure se imenujejo < b > procedure višjega reda< / b > .
< / p >
< / div >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org43a7808" class = "outline-3" >
< h3 id = "org43a7808" > < span class = "section-number-3" > 1.14.< / span > 1.3.1 Procedure kot argumenti< / h3 >
< div class = "outline-text-3" id = "text-1-14" >
2024-05-29 21:54:05 +02:00
< p >
Primer vsote.
< / p >
< div class = "org-src-container" >
< pre class = "src src-guile" >
< / pre >
< / div >
2024-05-16 22:33:30 +02:00
< p >
//exercise 1.29
#name: simpson
< / p >
< div class = "org-src-container" >
2024-05-29 21:54:05 +02:00
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
< span style = "color: #a45bad;" > 0< / span >
2024-05-16 22:33:30 +02:00
< 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 >
2024-05-29 21:54:05 +02:00
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > integral< / span > f a b dx< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; 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: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > * < span style = "color: #2d9574;" > (< / span > sum f < span style = "color: #67b11d;" > (< / span > + a < span style = "color: #b1951d;" > (< / span > / dx < span style = "color: #a45bad;" > 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: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-s< / span > term a next b fact< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > fact is altering between 4 and 2< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > check-fact< / span > fact< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > = fact < span style = "color: #a45bad;" > 4< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 4< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
< span style = "color: #a45bad;" > 0< / span >
2024-05-16 22:33:30 +02:00
< 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 >
2024-05-29 21:54:05 +02:00
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > simpson< / span > f a b dx< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; 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: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / 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: #a45bad;" > 4< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > / dx < span style = "color: #a45bad;" > 3.0< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > simpson-gizmo< / span > f a b dx< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; 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: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > * < span style = "color: #2d9574;" > (< / span > +
< span style = "color: #67b11d;" > (< / span > * < span style = "color: #a45bad;" > 4< / span > < span style = "color: #b1951d;" > (< / span > sum f < span style = "color: #4f97d7;" > (< / span > + a dx< span style = "color: #4f97d7;" > )< / span > add-dxdx b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > * < span style = "color: #a45bad;" > 2< / span > < span style = "color: #b1951d;" > (< / span > sum f a add-dxdx b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
2024-05-16 22:33:30 +02:00
< 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 >
2024-05-29 21:54:05 +02:00
< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > / dx < span style = "color: #a45bad;" > 3.0< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > cube< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > * x x x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > list
< span style = "color: #bc6ec5;" > (< / span > integral cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 0.01< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > integral cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 0.001< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > simpson cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 0.01< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > simpson cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 0.001< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > simpson cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #2d9574;" > (< / span > / < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 1000< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > simpson-gizmo cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 0.01< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > simpson-gizmo cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #2d9574;" > (< / span > / < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 10000< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > simpson-gizmo cube < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #a45bad;" > 0.00001< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
2024-05-16 22:33:30 +02:00
< / pre >
< / div >
< p >
// exercise 1.30
< / p >
< div class = "org-src-container" >
2024-05-29 21:54:05 +02:00
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-i< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > iter< / span > a result< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > a b< span style = "color: #67b11d;" > )< / span >
2024-05-16 22:33:30 +02:00
result
2024-05-29 21:54:05 +02:00
< 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: #4f97d7;" > (< / span > term a< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
2024-05-16 22:33:30 +02:00
< span style = "color: #2d9574;" > )< / span >
2024-05-29 21:54:05 +02:00
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > iter a < span style = "color: #a45bad;" > 0< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
2024-05-16 22:33:30 +02:00
< / pre >
< / div >
2024-05-29 21:54:05 +02:00
< p >
// excercise 1.30, 1.31. 1.32
< / p >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > Analogno napisi produkt kot vsoto.< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > Pokazi kako izgleda fakulteta.< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > Aproksimacija pi/4 = 2/3*4/3*4/5*6/5*6/7*8/7...< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > produkt-r< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > a, b sta spodnja in zgornja meja< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
< span style = "color: #a45bad;" > 1< / span >
< span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > term a< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > produkt-r 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: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fakulteta-p< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > produkt-r < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > x< span style = "color: #67b11d;" > )< / span > x< span style = "color: #2d9574;" > )< / span > < span style = "color: #a45bad;" > 1< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > + x < span style = "color: #a45bad;" > 1< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > pribl-pi< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > produkt-r < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > a< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > / < span style = "color: #b1951d;" > (< / span > * < span style = "color: #4f97d7;" > (< / span > - a < span style = "color: #a45bad;" > 1.0< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #4f97d7;" > (< / span > + a < span style = "color: #a45bad;" > 1.0< / span > < span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * a a< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #a45bad;" > 3.0< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > + x < span style = "color: #a45bad;" > 2.0< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
n
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > gizmo se je spomnil resitve - dva produkta (zgornji in spodnji)< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > iterativni produkt-i< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > produkt-i< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > iter-p< / span > a result< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > a b< span style = "color: #67b11d;" > )< / span >
result
< span style = "color: #67b11d;" > (< / span > iter-p < span style = "color: #b1951d;" > (< / span > next a< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > * result < span style = "color: #4f97d7;" > (< / span > term a< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > iter-p a < span style = "color: #a45bad;" > 1< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > pribl-pi-term< / span > a< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > / < span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > - a < span style = "color: #a45bad;" > 1.0< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > + a < span style = "color: #a45bad;" > 1< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > * a a< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > pribl-pi-next< / span > a< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > + a < span style = "color: #a45bad;" > 2.0< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > pribl-pii< / span > n< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > produkt-i
pribl-pi-term
< span style = "color: #a45bad;" > 3.0< / span >
pribl-pi-next
n
< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
2024-06-10 01:04:10 +02:00
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > excercise 1.32< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > recursive accumulate< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > accumulate-r< / span > combiner null-val term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > combiner is a procedure of two arguments.< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
null-val
< span style = "color: #2d9574;" > (< / span > combiner < span style = "color: #67b11d;" > (< / span > term a< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > accumulate-r combiner null-val 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: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-combiner< / span > t acc< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > + t acc< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-a< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > accumulate-r < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > t acc< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > + t acc< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #a45bad;" > 0< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > prod-a< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > accumulate-r < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > t acc< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * t acc< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #a45bad;" > 1< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > accumulate-i< / span > combiner null-val term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > Iterative accumulator.< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > iter-a< / span > a result< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > a b< span style = "color: #67b11d;" > )< / span >
result
< span style = "color: #67b11d;" > (< / span > iter-a < span style = "color: #b1951d;" > (< / span > next a< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > combiner < span style = "color: #4f97d7;" > (< / span > term a< span style = "color: #4f97d7;" > )< / span > result< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > iter-a a null-val< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > identity< / span > x< span style = "color: #bc6ec5;" > )< / span > x< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > add1< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > + x < span style = "color: #a45bad;" > 1< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sum-ai< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > accumulate-i sum-combiner < span style = "color: #a45bad;" > 0< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > prod-ai< / span > term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > accumulate-i < span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > lambda< / span > < span style = "color: #67b11d;" > (< / span > t acc< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * t acc< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #a45bad;" > 1< / span > term a next b< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > fakulteta-ai< / span > n< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > prod-ai identity < span style = "color: #a45bad;" > 2< / span > add1 n< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > excercise 1.33 filtered accumulate - combine only those term derived from< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > values in the range that satisfy a specified condition (predicate).< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > a) sum of squares of prime numbers - assuming prime? exists already< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > filtered-accumulate-r< / span > combiner null-val predicate term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > combiner 2 args - element and accumulation< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > predicate 1 arg - a condition when to apply combiner< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > term 1 arg - a function to compute the term< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > next 1 arg - compute a next step< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > > a b< span style = "color: #2d9574;" > )< / span >
null-val
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > predicate a< span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > combiner < span style = "color: #b1951d;" > (< / span > term a< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > filtered-accumulate-r combiner null-val predicate term < span style = "color: #4f97d7;" > (< / span > next a< span style = "color: #4f97d7;" > )< / span > next b< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > should I call combiner with null-val instead of (term a) or can I< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > directly call filtered-accumulate-r?< / span >
< span style = "color: #67b11d;" > (< / span > filtered-accumulate-r combiner null-val predicate 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: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > (filtered-accumulate-r sum-combiner 0 even? identity 1 add1 11)< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > filtered-accumulate-i< / span > combiner null-val predicate term a next b< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > iter-fa< / span > a result< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #67b11d;" > (< / span > > a b< span style = "color: #67b11d;" > )< / span >
result
< span style = "color: #67b11d;" > (< / span > iter-fa < span style = "color: #b1951d;" > (< / span > next a< span style = "color: #b1951d;" > )< / span >
< span style = "color: #b1951d;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #4f97d7;" > (< / span > predicate a< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > combiner < span style = "color: #bc6ec5;" > (< / span > term a< span style = "color: #bc6ec5;" > )< / span > result< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > combiner null-val result< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #b1951d;" > )< / span >
< span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > iter-fa a null-val< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
2024-05-29 21:54:05 +02:00
< / pre >
2024-05-16 22:33:30 +02:00
< / div >
< / div >
2024-05-29 21:54:05 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-orga384969" class = "outline-3" >
< h3 id = "orga384969" > < span class = "section-number-3" > 1.15.< / span > 1.3.2 Sestavljanje procedur z < code > Lambda< / code > < / h3 >
< div class = "outline-text-3" id = "text-1-15" >
2024-05-29 21:54:05 +02:00
< p >
Splosna forma < code > let< / code > izraza
< / p >
2024-05-16 22:33:30 +02:00
2024-06-10 01:04:10 +02:00
< pre class = "example" id = "org861d813" >
2024-05-29 21:54:05 +02:00
(let ((< var1> < exp1> )
(< var2> < exp2> )
...
(< varn> < expn> ))
< body> )
< / pre >
< p >
To je okrajsava za
< / p >
2024-06-10 01:04:10 +02:00
< pre class = "example" id = "orge922f38" >
2024-05-29 21:54:05 +02:00
((lambda (< var1> ... < varn> )
< body> )
< exp1>
...
< exp2>
)
< / pre >
< / div >
2024-05-16 22:33:30 +02:00
< / div >
2024-05-29 21:54:05 +02:00
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org590844a" class = "outline-3" >
< h3 id = "org590844a" > < span class = "section-number-3" > 1.16.< / span > 1.3.3 Procedure kot splosne metode< / h3 >
< div class = "outline-text-3" id = "text-1-16" >
2024-05-29 21:54:05 +02:00
< p >
Ce pogledamo proceduro za integral, vidimo mocnejse abstrakcije: procedure, ki
izrazajo splosne racunske metode, neodvisne od posameznih vkljucenih funkcij.
< / p >
< / div >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org8a3aa7d" class = "outline-3" >
< h3 id = "org8a3aa7d" > < span class = "section-number-3" > 1.17.< / span > 1.3.4 Procedure kot vrnjene vrednosti< / h3 >
< div class = "outline-text-3" id = "text-1-17" >
2024-05-29 21:54:05 +02:00
< p >
V splošnem programski jeziki omejujo, kateri komputacijski elemente lahko (koda)
spreminja. Elementi z najmanj omejitvami imajo < i > prvorazredni< / i > status. Pravice in
privilegiji prvorazrednih elementov so:
< / p >
< ul class = "org-ul" >
< li > lahko so poimenovani s spremenljivkami< / li >
< li > lahko so podani kot argumenti procedur< / li >
< li > lahko so vrnjeni kot rezultati procedur< / li >
< li > lahko so vključeni v podatkovne strukture< / li >
< / ul >
< p >
V Lispu imajo, za razliko od drugih programskih jezikov, procedure prvorazredni
status. To predstavlja težave za implementacijo, ampak nudi višjo ekspresivno
moč programskega jezika. Najvišja cena pri implementaciji procedur s
prvorazrednim statusom je, da je potrebno rezervirati prostor za procedurine
proste spremenljivke tudi, ko se procedura ne izvaja. V scheme-u so te
spremenljivke shranjene v procedurino okolje (poglavje 4.1).
< / p >
< / div >
< / div >
2024-05-16 22:33:30 +02:00
< / div >
2024-06-10 01:04:10 +02:00
< div id = "outline-container-org66fd37e" class = "outline-2" >
< h2 id = "org66fd37e" > < span class = "section-number-2" > 2.< / span > Grajenje absrakcij s podatki< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
Poglavje bo govorilo o kompleksnih podatkih. Poglavje 1 govori o grajenju
abstrakcij z zdruzevanjem procedur, ki tvorijo sestavljene procedure (compound).
V poglavju 2 pa bo fokus na grajenju abstrakcij z zdruzevanjem podatkovnih
objektov v sestavljene podatke (compound).
< / p >
< p >
Z zdruzenimi podatkovnimi objekti lahko procedure delajo nad njimi ne da bi bile
odvisne od njihove natancne strukture.
< / p >
< p >
Podobno kot pri sestavljenih procedurah gre tudi pri sestavljenih podatkovnih
objektih za nacin spoprijemanja s kompleksnostjo - podatkovne abstrakcije
omogocijo postavitev primernih abstrakcijskih pregrad med razlicnimi deli
programa.
< / p >
< p >
Napoved, kaj se bo pregledalo v 2. poglavju (bi bilo smiselno povzet).
< / p >
< / div >
< div id = "outline-container-org501bf16" class = "outline-3" >
< h3 id = "org501bf16" > < span class = "section-number-3" > 2.1.< / span > Uvod v podatkovne abstrakcije< / h3 >
< div class = "outline-text-3" id = "text-2-1" >
< p >
Podatkovna abstrakcija je metodologija, ki nam omogoci, da locimo kako so
sestavljeni podatki uporabljeni od detajlov o tem, kako so izgrejeni iz
primitivnih podatkovnih objektov. (To je analogno grajenju produceur, ki imajo
vgrajene druge procedue iz poglavja 1.1.8)
< / p >
< p >
Skratka programe hocemo graditi tako, da uporabljajo podatke na nacin, da nimajo
nobenih predpostavk o tem, kaksni naj so ti podatki (oziroma cim manj), ravno
dovolj za izvajanje potrebnih operacij. Hkrati so konkretne reprezentacije
podatkov definirane neodvisno od programov, ki podatke uporabljajo.
< / p >
< p >
Selektorji in konstruktorji.
< / p >
< / div >
< div id = "outline-container-orga2f86a5" class = "outline-4" >
< h4 id = "orga2f86a5" > < span class = "section-number-4" > 2.1.1.< / span > Aritmeticne operacije z racionalnimi stevili< / h4 >
< div class = "outline-text-4" id = "text-2-1-1" >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > add-rat< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > make-rat < span style = "color: #2d9574;" > (< / span > + < span style = "color: #67b11d;" > (< / span > * < span style = "color: #b1951d;" > (< / span > numer x< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > denom y< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > * < span style = "color: #b1951d;" > (< / span > numer y< span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > denom x< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > denom x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > sub-rat< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > make-rat < span style = "color: #2d9574;" > (< / span > - < span style = "color: #67b11d;" > (< / span > numer x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom y< span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > numer y< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom x< span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > denom x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > mul-rat< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > make-rat < span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > numer x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > numer y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > denom x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > div-rat< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > make-rat < span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > numer x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > denom x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > numer y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > equal-rat?< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > = < span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > numer x< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom y< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > * < span style = "color: #67b11d;" > (< / span > numer y< span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > denom x< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > make-rat< / span > n d< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > cons n d< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > numer< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > car x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > denom< / span > x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > cdr x< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > print-rat< / span > x< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > (< / span > numer x< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > "/"< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > (< / span > denom x< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > newline< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5; font-weight: bold;" > one-half< / span > < span style = "color: #bc6ec5;" > (< / span > make-rat < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5; font-weight: bold;" > one-third< / span > < span style = "color: #bc6ec5;" > (< / span > make-rat < span style = "color: #a45bad;" > 1< / span > < span style = "color: #a45bad;" > 3< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > excercise 2.1< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > make-rat-norm< / span > n d< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > if< / span > < span style = "color: #2d9574;" > (< / span > < d < span style = "color: #a45bad;" > 0< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > make-rat < span style = "color: #67b11d;" > (< / span > * n < span style = "color: #a45bad;" > -1< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > * d < span style = "color: #a45bad;" > -1< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > make-rat n d< span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< / pre >
< / div >
< p >
Sestavljena strkutura < code > par< / code > , ki je konstruirana s primitivno proceduro < code > cons< / code > . S
primitivnimi procedurami < code > car< / code > in < code > cdr< / code > lahko dobimo prvi in ostale elemente
para.
< / p >
< / div >
< ul class = "org-ul" >
< li > < a id = "org06ac49c" > < / a > Predstavljanje racionalnih stevil< br / >
< div class = "outline-text-5" id = "text-org06ac49c" >
< p >
< i > Glej zgornji codeblock.< / i >
< / p >
< / div >
< / li >
< / ul >
< / div >
< div id = "outline-container-org9d926fd" class = "outline-4" >
< h4 id = "org9d926fd" > < span class = "section-number-4" > 2.1.2.< / span > Pregrade abstrakcij< / h4 >
< div class = "outline-text-4" id = "text-2-1-2" >
< p >
Splosna ideja podatkovnih abstrakcij je, da se identificira za vsak tip podatka
osnovni set opraracij, s katerimi bodo vse procedure, ki bodo manipulirale
podatke operirale, oziroma bodo iz njih sestavljene. Nato se uporabljamo samo te
operacije pri delu s podatki.
< / p >
< p >
Pregrade:
< / p >
< ul class = "org-ul" >
< li > programi, ki uporabljajo racionalna stevila< / li >
< li > racionalna stevila v problemskem polju
< ul class = "org-ul" >
< li > < code > add-rat< / code > , < code > sub-rat< / code > … < / li >
< / ul > < / li >
< li > racionalna stevila kot stevci in imenovalci
< ul class = "org-ul" >
< li > < code > make-rat< / code > , < code > number< / code > , < code > denom< / code > < / li >
< / ul > < / li >
< li > racionalna stevila kot pari
< ul class = "org-ul" >
< li > < code > cons< / code > , < code > car< / code > , < code > cdr< / code > < / li >
< / ul > < / li >
< li > kakor so pac pari implementirani< / li >
< / ul >
< p >
Procedure na vsakem nivoju so vmesniki, ki definirajo abstrakcijski nivo in med
sabo povezujejo razlicne nivoje.
< / p >
< p >
Ena od prednosti razdelitve na nivoje je, da je programe lazje vzdrzevati in
spreminjati, ker lahko delas spremembe na posameznem nivoju, ki ne vplivajo
izven svojega nivoja.
< / p >
< p >
< i > vaja 2.2< / i >
< / p >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > crte v prostoru< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > make-segment< / span > startp endp< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > cons startp endp< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > make-line< / span > x1 y1 x2 y2< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > make-segment < span style = "color: #2d9574;" > (< / span > make-point x1 y1< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > make-point x2 y2< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > start-segment< / span > segment< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > car segment< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > end-segment< / span > segment< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > cdr segment< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > make-point< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > cons x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > x-point< / span > p< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > car p< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > y-point< / span > p< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > cdr p< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > mid-point< / span > segment< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > make-point
< span style = "color: #2d9574;" > (< / span > / < span style = "color: #67b11d;" > (< / span > + < span style = "color: #b1951d;" > (< / span > x-point < span style = "color: #4f97d7;" > (< / span > start-segment segment< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > x-point < span style = "color: #4f97d7;" > (< / span > end-segment segment< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > / < span style = "color: #67b11d;" > (< / span > + < span style = "color: #b1951d;" > (< / span > y-point < span style = "color: #4f97d7;" > (< / span > start-segment segment< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #b1951d;" > (< / span > y-point < span style = "color: #4f97d7;" > (< / span > end-segment segment< span style = "color: #4f97d7;" > )< / span > < span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #a45bad;" > 2< / span > < span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > print-point< / span > p< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > "("< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > (< / span > x-point p< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > ","< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > (< / span > y-point p< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > display < span style = "color: #2d9574;" > ")"< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > newline< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > vaja 2.3 :: segment je lahko tudi pravokotnik, ce nimamo rotacije in je crta< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > vedno diagonala. Delal bom brez rotacije, zato ker potem ni dovolj imeti< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > konstruktorja, ki je samo kons, ampak rabim 3 parametre, segment in rotacija< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > in potem nvm kako delat selektorje in pa se vse se mi zakomplicira in se mi< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > ne da, ker je nedelja zvecer.< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > brez rotacije - 2a + 2b< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > perimeter< / span > rectangle< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > + < span style = "color: #2d9574;" > (< / span > * < span style = "color: #a45bad;" > 2< / span > < span style = "color: #67b11d;" > (< / span > side-a rectangle< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > * < span style = "color: #a45bad;" > 2< / span > < span style = "color: #67b11d;" > (< / span > side-b rectangle< span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > area< / span > rectangle< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > * < span style = "color: #2d9574;" > (< / span > side-a rectangle< span style = "color: #2d9574;" > )< / span > < span style = "color: #2d9574;" > (< / span > side-b rectangle< span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > selektor (brez rotacije)< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > side-a< / span > rectangle< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > abs < span style = "color: #2d9574;" > (< / span > - < span style = "color: #67b11d;" > (< / span > x-point < span style = "color: #b1951d;" > (< / span > start-segment rectangle< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > x-point < span style = "color: #b1951d;" > (< / span > end-segment rectangle< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > side-b< / span > rectangle< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > abs < span style = "color: #2d9574;" > (< / span > - < span style = "color: #67b11d;" > (< / span > y-point < span style = "color: #b1951d;" > (< / span > start-segment rectangle< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #67b11d;" > (< / span > y-point < span style = "color: #b1951d;" > (< / span > end-segment rectangle< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span > < span style = "color: #2d9574;" > )< / span > < span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > sedaj vpeljemo drugo reprezentacijo pravokotnikov (nic vec s segmentom)< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > ali lahko obseg in ploscina se vedno delujeta?< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > odvisna sta od side-a in side-b. Ce to zemanjam, bosta obseg in ploscina se< / span >
< span style = "color: #2aa1ae; background-color: #292e34;" > ;; < / span > < span style = "color: #2aa1ae; background-color: #292e34;" > vedno delovali.< / span >
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-org518e1e2" class = "outline-4" >
< h4 id = "org518e1e2" > < span class = "section-number-4" > 2.1.3.< / span > Kaj so podatki?< / h4 >
< div class = "outline-text-4" id = "text-2-1-3" >
< p >
Pri racionalnih stevilih imamo se en pogoj:
< / p >
< p >
< code > (/ (numer x) (denom x)) = n/d< / code >
< / p >
< p >
Selektorji konstruktorji in pogoji tvorijo veljavno reprezentacijo.
< / p >
< p >
Vsaka trojica procedur, ki ustreza pogoju, da ce zdruzis dva objekta, in potem z
eno proceduro dobis iz zdruzenih prvi objekt in z drugo drugi objekt, je potem
trojica procedu za delanje s pari.
< / p >
< p >
Trojico procedur (cons, car, cdr) se da implementirati brez podatkov:
< / p >
< div class = "org-src-container" >
< pre class = "src src-scheme" > < span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > cons-p< / span > x y< span style = "color: #bc6ec5;" > )< / span >
< span style = "color: #bc6ec5;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #2d9574;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > dispatch< / span > m< span style = "color: #2d9574;" > )< / span >
< span style = "color: #2d9574;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > cond< / span >
< span style = "color: #67b11d;" > (< / span > < span style = "color: #b1951d;" > (< / span > = m < span style = "color: #a45bad;" > 0< / span > < span style = "color: #b1951d;" > )< / span > x< span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > < span style = "color: #b1951d;" > (< / span > = m < span style = "color: #a45bad;" > 1< / span > < span style = "color: #b1951d;" > )< / span > y< span style = "color: #67b11d;" > )< / span >
< span style = "color: #67b11d;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > else< / span > < span style = "color: #b1951d;" > (< / span > error < span style = "color: #2d9574;" > "Argument not 0 or 1 -- CONS"< / span > m< span style = "color: #b1951d;" > )< / span > < span style = "color: #67b11d;" > )< / span >
< span style = "color: #2d9574;" > )< / span >
< span style = "color: #bc6ec5;" > )< / span >
dispatch< span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > car-p< / span > z< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > z < span style = "color: #a45bad;" > 0< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< span style = "color: #4f97d7;" > (< / span > < span style = "color: #4f97d7; font-weight: bold;" > define< / span > < span style = "color: #bc6ec5;" > (< / span > < span style = "color: #bc6ec5; font-weight: bold;" > cdr-p< / span > z< span style = "color: #bc6ec5;" > )< / span > < span style = "color: #bc6ec5;" > (< / span > z < span style = "color: #a45bad;" > 1< / span > < span style = "color: #bc6ec5;" > )< / span > < span style = "color: #4f97d7;" > )< / span >
< / pre >
< / div >
< p >
Zdaj imamo procedure za delanje s pari, ki so definirane brez podatkov.
Obskurno, ampak v okviru definije delanja s pari. Na tem primeru vidimo, da
zmoznost manipuliranja procedur kot objektov avtomaticno omogoci moznost za
reprezentacijo sestavljenih podatkov. (Proceduralna reprezentacija podatkov bo
igrala osrednjo vlogo v nadaljevanju - temu se rece < i > message passing< / i > in bo
osnovno orodje v tretjem poglavju o problemih modeliranja in simulacije).
< / p >
< / div >
< / div >
< / div >
2024-04-30 19:33:52 +02:00
< / div >
< / div >
< / body >
< / html >