diff options
author | rsiddharth <s@ricketyspace.net> | 2017-01-14 21:44:28 +0000 |
---|---|---|
committer | rsiddharth <s@ricketyspace.net> | 2017-01-14 21:44:28 +0000 |
commit | 19ed602c1ba7dc2b933274f50085c9c4f0f1105c (patch) | |
tree | 5f4ddb70cb61cf509d6a74bbfa4ccde0c9227fc5 /net/ricketyspace/sicp/one/fifteen.scm | |
parent | 8d6bb0aee4679f874ddfb6f7edd8945852cb9c99 (diff) |
one -> net/ricketyspace/sicp
Diffstat (limited to 'net/ricketyspace/sicp/one/fifteen.scm')
-rw-r--r-- | net/ricketyspace/sicp/one/fifteen.scm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/net/ricketyspace/sicp/one/fifteen.scm b/net/ricketyspace/sicp/one/fifteen.scm new file mode 100644 index 0000000..a61fa8f --- /dev/null +++ b/net/ricketyspace/sicp/one/fifteen.scm @@ -0,0 +1,31 @@ +;;;; Under Creative Commons Attribution-ShareAlike 4.0 +;;;; International. See +;;;; <https://creativecommons.org/licenses/by-sa/4.0/>. + +(define-module (net ricketyspace sicp one fifteen) + #:use-module (ice-9 regex) + #:export (sine)) + +(define (sine angle) + (let ((out "")) + (define (log angle) + (set! out (string-append out " (p (sine " + (number->string (/ angle 3.0))))) + (define (close-parens s) + (string-trim (string-append + s (fold-matches "\\([p,s]" s "" + (lambda (match prev) + (string-append prev ")")))))) + (define (cube x) (* x x x)) + (define (p x) (- (* 3 x) (* 4 (cube x)))) + (define (s angle) + (if (not (> (abs angle) 0.1)) + angle + (begin + (log angle) + (p (s (/ angle 3.0)))))) + (s angle) + (close-parens out))) +;; +;; (sine 12.15) +;; $25 = "(p (sine 4.05 (p (sine 1.3499999999999999 (p (sine 0.44999999999999996 (p (sine 0.15 (p (sine 0.049999999999999996))))))))))" |