(rontolisp) docs
← リファレンス

構文

フロントエンドが実装している構文キーワードです。import と define-library 以外はすべて (scheme base) がエクスポートします。この 2 つはプログラムの構文で、どのライブラリもエクスポートしません。delay と delay-force は (scheme lazy) に、cons-stream は Structure and Interpretation of Computer Programs(SICP)互換の名前 に載っています。

名前例結果
quote(quote (a b c))(a b c)
quasiquote`(1 ,(+ 1 1) 3)(1 2 3)
unquote`(1 ,(+ 1 1))(1 2)
unquote-splicing`(1 ,@(list 2 3) 4)(1 2 3 4)
lambda((lambda (x y) (+ x y)) 3 4)7
if(if (> 3 2) 'yes 'no)yes
set!(let ((x 1)) (set! x 2) x)2
begin(let ((x 1)) (begin (set! x (* x 10)) (+ x 1)))11
let(let ((a 1) (b 2)) (+ a b))3
let*(let* ((a 1) (b (+ a 1))) (list a b))(1 2)
letrec(letrec ((ev? (lambda (n) (if (= n 0) #t (od? (- n 1))))) (od? (lambda (n) (if (= n 0) #f (ev? (- n 1)))))) (ev? 10))#t
letrec*(letrec* ((a 1) (b (+ a 1))) (list a b))(1 2)
do(do ((i 0 (+ i 1)) (sum 0 (+ sum i))) ((= i 5) sum))10
cond(cond ((> 1 2) 'a) ((> 2 1) 'b) (else 'c))b
case(case (* 2 3) ((2 3 5 7) 'prime) ((1 4 6 8 9) 'composite) (else 'other))composite
and(and 1 2 'last)last
or(or #f 2 3)2
when(when (> 2 1) 'a 'b)b
unless(unless (> 1 2) 'ran)ran
define(let () (define x 2) (* x 3))6
define-values(let () (define-values (q r) (values 17 5)) (list q r))(17 5)
define-record-type(define-record-type point (make-point x y) point? (x point-x set-point-x!) (y point-y))make-point、point?、point-x、set-point-x!、point-y を定義
let-values(let-values (((q r) (values 17 5)) ((s) (values 'x))) (list q r s))(17 5 x)
let*-values(let*-values (((a b) (values 1 2)) ((c) (values (+ a b)))) (list a b c))(1 2 3)
else(cond ((> 1 2) 'a) (else 'b))b
=>(cond ((assv 'b '((a 1) (b 2))) => cadr) (else #f))2
guard(guard (e ((symbol? e) (list 'caught e))) (raise 'oops))(caught oops)
parameterize(let ((p (make-parameter 1))) (parameterize ((p 2)) (p)))2
import(import (scheme base) (scheme write))プログラムからその 2 つのライブラリが見える
define-library(define-library (counter) (export next!) (import (scheme base)) (begin (define n 0) (define (next!) (set! n (+ n 1)) n)))(import (counter)) で読めるライブラリ
include(include "greet.scm")include の位置に置かれる greet.scm の定義
include-ci(include-ci "loud.scm")同じく、ただし識別子は小文字に畳み込まれる
cond-expand(cond-expand (ratios (/ 1 3)) (else 0.33))1/3
define-syntax(let () (define-syntax two (syntax-rules () ((_) 2))) (* (two) 3))6
let-syntax(let-syntax ((double (syntax-rules () ((_ e) (* 2 e))))) (double 21))42
letrec-syntax(letrec-syntax ((my-or (syntax-rules () ((_) #f) ((_ e r ...) (let ((t e)) (if t t (my-or r ...))))))) (my-or #f 7))7
syntax-rules(let-syntax ((first (syntax-rules () ((_ a b ...) 'a)))) (first x y z))x
syntax-error(one-arg 5)5
...(let-syntax ((my-list (syntax-rules () ((_ e ...) (list e ...))))) (my-list 1 2 3))(1 2 3)
_(let-syntax ((second (syntax-rules () ((_ _ b . _) b)))) (second 1 2 3))2