summaryrefslogblamecommitdiffstats
path: root/net/ricketyspace/sicp/one/thirtysix.scm
blob: 25e2c80fc0415962460e8e95b7c2ec1464488d48 (plain) (tree)
















































































































                                                                     
;;;; Under Creative Commons Attribution-ShareAlike 4.0
;;;; International. See
;;;; <https://creativecommons.org/licenses/by-sa/4.0/>.

(define-module (net ricketyspace sicp one thirtysix)
  #:export (fixed-point x-to-the-x-1000))

(define tolerance 0.0000000000001)

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (display next)
      (newline)
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))

(define (x-to-the-x-1000)
  (fixed-point (lambda (x) (/ (log 1000) (log x))) 1.1))

;;; Guile REPL
;;;
;;; scheme@(guile-user)> ,use (net ricketyspace sicp one thirtysix)
;;; scheme@(guile-user)> (x-to-the-x-1000)
;;; 72.47657378429035p
;;; 1.6127318474109593
;;; 14.45350138636525
;;; 2.5862669415385087
;;; 7.269672273367045
;;; 3.4822383620848467
;;; 5.536500810236703
;;; 4.036406406288111
;;; 4.95053682041456
;;; 4.318707390180805
;;; 4.721778787145103
;;; 4.450341068884912
;;; 4.626821434106115
;;; 4.509360945293209
;;; 4.586349500915509
;;; 4.535372639594589
;;; 4.568901484845316
;;; 4.546751100777536
;;; 4.561341971741742
;;; 4.551712230641226
;;; 4.558059671677587
;;; 4.55387226495538
;;; 4.556633177654167
;;; 4.554812144696459
;;; 4.556012967736543
;;; 4.555220997683307
;;; 4.555743265552239
;;; 4.555398830243649
;;; 4.555625974816275
;;; 4.555476175432173
;;; 4.555574964557791
;;; 4.555509814636753
;;; 4.555552779647764
;;; 4.555524444961165
;;; 4.555543131130589
;;; 4.555530807938518
;;; 4.555538934848503
;;; 4.555533575300744
;;; 4.555537109821491
;;; 4.555534778870584
;;; 4.555536316089023
;;; 4.555535302322066
;;; 4.555535970882422
;;; 4.555535529979327
;;; 4.555535820746685
;;; 4.555535628991034
;;; 4.555535755450307
;;; 4.555535672052776
;;; 4.555535727051891
;;; 4.555535690781
;;; 4.5555357147009765
;;; 4.555535698926199
;;; 4.555535709329369
;;; 4.5555357024686725
;;; 4.555535706993175
;;; 4.555535704009349
;;; 4.555535705977127
;;; 4.555535704679414
;;; 4.555535705535232
;;; 4.555535704970835
;;; 4.555535705343044
;;; 4.55553570509758
;;; 4.555535705259459
;;; 4.555535705152702
;;; 4.555535705223107
;;; 4.555535705176676
;;; 4.555535705207297
;;; 4.555535705187102
;;; 4.555535705200421
;;; 4.555535705191637
;;; 4.555535705197429
;;; 4.555535705193611
;;; 4.555535705196128
;;; 4.555535705194468
;;; 4.555535705195563
;;; 4.55553570519484
;;; 4.555535705195317
;;; 4.555535705195004
;;; 4.555535705195211
;;; 4.555535705195074
;;; 4.5555357051951635
;;; $6 = 4.5555357051951635
;;; scheme@(guile-user)> (expt 4.5555357051951635 4.5555357051951635)
;;; $7 = 1000.0000000000892