diff --git a/zapiski/sicp-lio.html b/zapiski/sicp-lio.html index 0daf13d..cbcb081 100644 --- a/zapiski/sicp-lio.html +++ b/zapiski/sicp-lio.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +@@ -272,12 +282,12 @@ ukvarjanje s pojmovanjem "kako".
Postopek za izvajanje kombinacij: @@ -333,8 +343,8 @@ oblika.
Za izvajanje sestavljenih procedur z argumenti, izvedeš telo procedure z vsakim @@ -383,8 +393,8 @@ izraza, ki vsebuje zgolj primitivne izraze in potem izvedi (vso) evalvacijo. -
Linki: @@ -400,8 +410,8 @@ Kako nastavit spacemacs, in malo o guile-u.
https://yewtu.be/channel/UCEBb1b_L6zDS3xTUrIALZOw (6.001 SICP: Structure and Interpretation of Computer Programs (2004)) @@ -411,16 +421,16 @@ Kako nastavit spacemacs, in malo o guile-u.
Define a procedure that takes three numbers as arguments and returns the sum of @@ -428,45 +438,45 @@ the squares of the two larger numbers.
(define (sum-of-large x y z) - (+ - (if (> x y) (* x x) (* y y)) - (if (> y z) (* y y) (* z z)) - ) - ) -(sum-of-large 3 8 5) +(define (sum-of-large x y z) + (+ + (if (> x y) (* x x) (* y y)) + (if (> y z) (* y y) (* z z)) + ) + ) +(sum-of-large 3 8 5)
(define (sum-of-larger x y z) (let* - ((s (lambda (a) (* a a))) - (sl (lambda (b c) (if (> b c) (s b) (s c)))) +(define (sum-of-larger x y z) (let* + ((s (lambda (a) (* a a))) + (sl (lambda (b c) (if (> b c) (s b) (s c)))) ) (+ (sl x y) (sl y z)) - )) -(sum-of-larger 3 8 5) + )) +(sum-of-larger 3 8 5)
(define (sum-squares-of-larger x y z) - (if (> x y) - (if (> y z) +(define (sum-squares-of-larger x y z) + (if (> x y) + (if (> y z) (+ (* x x) (* y y)) (+ (* x x) (* z z)) ) - (if (> x z) + (if (> x z) (+ (* y y) (* x x)) (+ (* y y) (* z z)) ) - ) - ) -(sum-squares-of-larger 9 10 8) + ) + ) +(sum-squares-of-larger 9 10 8)
Aplikativni vrstni red: pade takoj v neskoncno zanko. @@ -484,8 +494,8 @@ Normalni vrstni red: izvrsi test in pride v if, ki ne izvrsi drugega dela.
sqrt-newton.scm @@ -493,8 +503,8 @@ Normalni vrstni red: izvrsi test in pride v if, ki ne izvrsi drugega dela.
good-enough?
ni vredu za iskanje korenov majhnih stevil.// Glej v sqrt-newton.sqm @@ -519,8 +529,8 @@ dovolj majhne in takrat prekini funkcijo.
+//exercise 1.29 +#name: simpson +
+(define (sum term a next b) + (if (> a b) + 0 + (+ (term a) + (sum term (next a) next b) + ) + ) + ) + +(define (integral f a b dx) + (define (add-dx x) (+ x dx)) + (* (sum f (+ a (/ dx 2.0)) add-dx b) dx) + ) + +(define (sum-s term a next b fact) + ;; fact is altering between 4 and 2 + (define (check-fact fact) (if (= fact 4) 2 4)) + (if (> a b) + 0 + (+ (* fact (term a)) + (sum-s term (next a) next b (check-fact fact)) + ) + ) + ) + +(define (simpson f a b dx) + (define (add-dx x) (+ x dx)) + (* (+ (f a) (f b) (sum-s f (add-dx a) add-dx (- b dx) 4) ) (/ dx 3.0)) + ) + +(define (simpson-gizmo f a b dx) + (define (add-dxdx x) (+ x dx dx)) + (* (+ + (* 4 (sum f (+ a dx) add-dxdx b)) + (* 2 (sum f a add-dxdx b)) + (- (f a)) + (- (f b)) + ) (/ dx 3.0)) + ) + +(define (cube x) (* x x x)) + +(list + (integral cube 1 2 0.01) + (integral cube 1 2 0.001) + + (simpson cube 1 2 0.01) + (simpson cube 1 2 0.001) + (simpson cube 1 2 (/ 1 1000)) + (simpson-gizmo cube 1 2 0.01) + (simpson-gizmo cube 1 2 (/ 1 10000)) + (simpson-gizmo cube 1 2 0.00001) +) ++
+// exercise 1.30 +
+(define (sum-i term a next b) + (define (iter a result) + (if (> a b) + result + (iter (next a) (+ result (term a))) + ) + ) + (iter a 0) + ) ++