Files
beluga/lisp-interpreter/tests/code/forms.scm
T
Arthur Barraux d8fc7d2d67
Meson Build and Deploy / build (push) Failing after 29s
adding lisp-interpreter
2025-09-24 10:58:09 +02:00

94 lines
2.1 KiB
Scheme

; copy examples from MIT scheme documentation and add related ones.
; Conditionals
; https://www.gnu.org/software/mit-scheme/documentation/stable/mit-scheme-ref/Conditionals.html
(assert (and (= 2 2) (> 2 1)))
(assert (and))
(==> (and 3 2) 2)
(==> (and 1 2 'c '(f g)) (f g))
(==> (or #f #\a #f) #\a)
(==> (or (memq 'b '(a b c)) (/ 3 0)) (b c))
(define (bit-type x)
(cond ((= x 0) 'OFF)
((= x 1) 'ON)
(else 'UNKNOWN)))
(==> (bit-type 0) OFF)
(==> (bit-type 1) ON)
(==> (bit-type 25) UNKNOWN)
; https://groups.csail.mit.edu/mac/ftpdir/scheme-7.4/doc-html/scheme_13.html
; Universl Time https://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/Universal-Time.html
(assert (integer? (get-universal-time)))
; https://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/Procedure-Operations.html#Procedure-Operations
(assert (procedure? (lambda (x) x)))
(assert (compound-procedure? (lambda (x) x)))
(assert (not (compiled-procedure? (lambda (x) x))))
(assert (not (procedure? 3)))
(assert (= 18 (apply + (list 3 4 5 6))))
(assert (compiled-procedure? eval))
(let ((x "hello")
(y "world"))
(==> (string-append x y) "helloworld"))
(let* ((x 2)
(y (+ x 1)))
(==> (+ x y) 5))
(do ((i 0 (+ i 1)))
((>= i 10))
(assert (>= i 0))
(display i))
(==> (eval '(+ 2 2)) 4)
(==> (eval '(+ 2 2) (interaction-environment)) 4)
(assert (scheme-report-environment 5))
(assert (case (+ 2 3)
((2) #f)
((1 5) #t)))
(assert (case 7
((2) #f)
((1 5) #f)
(else #t)))
(assert (case 2
((2) #t)
((1 5) #f)
(else #f)))
(assert (letrec ((even?
(lambda (n)
(if (zero? n)
#t
(odd? (- n 1)))))
(odd?
(lambda (n)
(if (zero? n)
#f
(even? (- n 1))))))
(even? 88)))
(let ((x 0))
(inc! x)
(==> x 1)
(dec! x)
(==> x 0))
(let ((x 'A) (y 'B))
(swap! x y)
(==> x B)
(==> y A))