mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-19 21:59:16 +02:00
77 lines
2 KiB
Scheme
77 lines
2 KiB
Scheme
;; Temporary test file, try with the ack function
|
|
(import (scheme base)
|
|
;(srfi 69)
|
|
(scheme write))
|
|
|
|
; (define (memoize function)
|
|
; (let ((table (make-hash-table))) ;(make-equal?-map)))
|
|
; (lambda args
|
|
; (apply values
|
|
; ;(map-get table
|
|
; (hash-table-ref table
|
|
; args
|
|
; ;; If the entry isn't there, call the function.
|
|
; (lambda ()
|
|
; (call-with-values
|
|
; (lambda () (apply function args))
|
|
; (lambda results
|
|
; ;(map-put! table args results)
|
|
; (hash-table-set! table args results)
|
|
; results))))))))
|
|
;
|
|
;(define (fnc x y) (+ x y))
|
|
;(define mfnc (memoize fnc))
|
|
;
|
|
;(write (mfnc 1 1)) (newline)
|
|
;(write (mfnc 1 1)) (newline)
|
|
|
|
; Original versions:
|
|
(define (ack m n)
|
|
(cond ((= m 0) (+ n 1))
|
|
((= n 0) (ack (- m 1) 1))
|
|
(else (ack (- m 1) (ack m (- n 1))))))
|
|
(define (fib n)
|
|
(if (< n 2)
|
|
n
|
|
(+ (fib (- n 1))
|
|
(fib (- n 2)))))
|
|
;
|
|
;; Fast versions:
|
|
;(define ack (memoize _ack))
|
|
;(define (_ack m n)
|
|
; (cond ((= m 0) (+ n 1))
|
|
; ((= n 0) (ack (- m 1) 1))
|
|
; (else (ack (- m 1) (ack m (- n 1))))))
|
|
;
|
|
;(define fib (memoize _fib))
|
|
;(define (_fib n)
|
|
; (if (< n 2)
|
|
; n
|
|
; (+ (fib (- n 1))
|
|
; (fib (- n 2)))))
|
|
;
|
|
;; New fast versions that do not introduce any new top-level definitions
|
|
;(define ack
|
|
; ((lambda ()
|
|
; (define (_ack m n)
|
|
; (cond ((= m 0) (+ n 1))
|
|
; ((= n 0) (__ack (- m 1) 1))
|
|
; (else (__ack (- m 1) (__ack m (- n 1))))))
|
|
; (define __ack (memoize _ack))
|
|
; __ack
|
|
; )))
|
|
;
|
|
;(define fib
|
|
; ((lambda ()
|
|
; (define (_fib n)
|
|
; (if (< n 2)
|
|
; n
|
|
; (+ (__fib (- n 1))
|
|
; (__fib (- n 2)))))
|
|
; (define __fib (memoize _fib))
|
|
; __fib
|
|
; )))
|
|
|
|
(write (ack 3 12))
|
|
(newline)
|
|
(write (fib 40))
|