cut 式
関数を部分適用したい時に使えるらしい。
例えば、
二つのパラメータを取る cons。片方のパラメータを 1 に特殊化したい。
そういう場合には、
(cut cons 1 <>)
と簡潔に書くことができる。
cut 式は実際には lambda の糖衣構文。
(lambda (x) (cons 1 x)) ; = (cut cons 1 <>)
たしかに cut 式の方が簡潔にかける。
ちなみに名前にこれぞという語源はなさそうだ *1。
7章: 手続き
7章はちょっと長かったな。以下はメモ。コードはこちら。
- 評価の結果が #<...> のものは読み戻せない
- 手続きも、数値、文字列、真偽値と同じ、値として他の変数に束縛できる
- (define (NAME args) expr ...) = (define NAME (lambda (args) expr ...)
- 前者は MIT 記法
- for-each: 要素に手続きを適用して、返り値なし
- map: 要素に手続きを適用して、返り値あり
- map や for-each は複数のリストを同時に処理できる
- スコープ
- let: lambda の糖衣構文。順序は保証されない。
- let*: let がネストしているだけ。
- letrec: 初期化式が lambda の場合に変数を参照できる。再帰を書くために使う。
- ロカール手続きは内部的には letrec として扱われる
- 可変長引数
- (define (func a b . c) ...) ⇒ a = 1, b = 2, c = (3 4 5)
- (define (func . a) ...) ⇒ a = (1 2 3 4 5)
- apply: リストを unpack して、手続きに適用する
- match 構文
- let-optionals* 構文
- let-keywords 構文
- cut 構文: 部分適用
- (cut cons 1 <>) ⇒ (lambda (x) (cons 1 x))
- 多値
- リストでも値を返せるが、取り出しが面倒だったり、非効率だったりする
- receive で受け取る
- let-values や let*-values でも受け取れる
- values で返す

- 作者: Kahuaプロジェクト,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/03/14
- メディア: 大型本
- 購入: 22人 クリック: 713回
- この商品を含むブログ (244件) を見る