- Racket のファイルは
#lang racket
から始める。 - 真偽値
#t
,#f
- 関数定義
(define x expression)
- e: Expression
; lambda を使った関数定義 (define a (lambda (x) (+ 1 x)) ; 引数と一緒に関数定義 (define (f x y) (+ x y))
- ローカル関数定義
(define (f x) (define a? (lambda (x) (= x 1)) (define b? (lambda (x) (= x 2)) (if (a? x) #f (b? x)))
- 条件分岐
if
(if (condition) e1 e2)
cond
(cond [(condition1) (expression1)] [(condition2) (expression2)] [#t (expression3)])
- local bindings
let
(let ([x1 expression1] [x2 expression2] ... [xn expressionn]) expression)
x1
, ...,xn
をexpression1
, ...,expressionn
にバインドしてexpression
を評価する。(define (f a b) (let ([x (+ a b)] [y (- a b)]) (+ x y))
let*
- 前にバインドの記述をしたものを、後ろで使える。
(let ([x 1] [y (+ 1 x)]) ; 一つ前の定義を使っている。 expression)
letrec
- 後にバインドの記述をしたものや、記述中のものを後ろで使える。
(letrec ([x (+ 1 x)] ; x自身を使っている [y (lambda () (- 1 z))] ; 後の定義zを使っている [z 6]) expression)
- 式は上から評価されるので、次の定義は
z
を未定義の状態で使用することになりエラーが出る。
(letrec ([x (+ 1 x)] ; x自身を使っている [y (- 1 z)] ; 後の定義zを使っている [z 6]) expression)
- 代入
set!
を使うと代入できる。(define x 3) (set! x 5) ; xが5に変わる。
- 値が変わることを防ぐには、
let
を使って変更前の値をコピーする。(define (f x) (let ([a a] [b b]) expression))
- 値が変わることを防ぐには、
- list
cons
,null
,car
,cdr
,null?
- mutable
mcons
,mcar
,mcdr
,mpair?
,set-mcar!
,set-mcdr!
Last active
April 14, 2023 22:24
-
-
Save KenjiOhtsuka/24d684d776b9790475f90f512e24ea81 to your computer and use it in GitHub Desktop.
Racketの文法まとめ
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment