Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
;; Aplikatiivne püsipunktikombinaator
(define Y1
(lambda (f)
((lambda (x) (f (lambda (y) ((x x) y))))
(lambda (x) (f (lambda (y) ((x x) y)))))))
;; Faktoriaal kasutades püsipunktikombinaatorit
(define fact
(let ((f (lambda (g)
(lambda (n)
(if (zero? n)
1
(* n (g (- n 1))))))))
(Y1 f)))
;; Striimid
(define make-stream
(lambda (value thunk)
(cons value thunk)))
(define the-null-stream
(make-stream "end-of-stream"
(lambda () the-null-stream)))
(define stream-car car)
;; "Tavaline" striimi saba
(define stream-cdr
(lambda (stream)
((cdr stream))))
;; Memoiseeriv striimi saba
;(define stream-cdr
; (lambda (stream)
; (if (pair? (cdr stream))
; (cdr stream)
; (let ((s ((cdr stream))))
; (set-cdr! stream s)
; s))))
(define stream-null?
(lambda (stream)
(eq? stream the-null-stream)))
;; Naturaalarvude striim
(define nats-from
(lambda (n)
(make-stream n (lambda () (nats-from (+ 1 n))))))
(define nats (nats-from 0))
;; Striimide "näitamine"
(define show-stream
(lambda (str n)
(if (zero? n)
(list '...)
(cons (stream-car str)
(show-stream (stream-cdr str) (- n 1))))))
;; Striimide elementhaaval liitmine
(define add-streams
(lambda (str1 str2)
(make-stream (+ (stream-car str1) (stream-car str2))
(lambda ()
(add-streams (stream-cdr str1)
(stream-cdr str2))))))
;; Fibonacci jada - kui soovid arvutada rohkem kui 25 elementi,
;; siis soovitav kasutada memoiseerivat striimi-saba protseduuri
(define fibonacci
(letrec ((fibo1 (make-stream 0 (lambda () fibo2)))
(fibo2 (make-stream 1 (lambda () fibo3)))
(fibo3 (add-streams fibo1 fibo2)))
fibo1))