Slide 1

Slide 1 text

Scheme/SRFIの syntax sugarの紹介 Niyarin

Slide 2

Slide 2 text

内容 ・SRFIとは ・Scheme のsyntax sugarの紹介 1

Slide 3

Slide 3 text

SRFI ・Scheme の拡張の仕様 ・RNRS(Schemeの標準仕様)にたまにマージされる ・内容はいろいろある ・データ構造 SRFI 69 (hash) SRFI113 (set) ・組み込みデータ構造の処理 SRFI 1 (reduce とか) SRFI 132 (sortとか) ・実用的なやつ SRFI64 (test suite) SRFI 106 (Socket) 2

Slide 4

Slide 4 text

Syntax Sugar ・S式やめる ・可読性があがる?  ・初心者にはフレンドリー?  ・”Being Popular” では ”I still don't find prefix math expressions natural.” Paul Graham (前置記法による数式が自然であるとは思えない)  3

Slide 5

Slide 5 text

Curly-infix-expressions (SRFI 105) ・{}は拡張のために予約されている → {}を中間表現に使う ・あまりサポートする処理系は少ない Guile {n > 5} ;(> n 5) {a + b + c} ;(+ a b c) (read-enable 'curly-infix) 4

Slide 6

Slide 6 text

Curly-infix-expressions (SRFI 105) ・f(x)形式も使える ・演算子と手続きの区別はない {‘a cons ‘b} ;(cons ‘a ‘b) {+(1 2)};(+ 1 2) {cons (‘a ‘b)} ;(cons ‘a ‘b) 5

Slide 7

Slide 7 text

Curly-infix-expressions (SRFI 105) ・演算子の優先順位はない ・複数の演算子を混ぜたり、{}内が偶数個の場合 → 自分で$nfx$を定義してどうにかしてってことらしい {1 + {2 * 3}} ;(+ 1 (* 2 3)) (1 + 2 * 3);($nfx$ 1 + 2 * 3) 6

Slide 8

Slide 8 text

どちらが良いか? { f{n - 1}(x) } ((f (- n 1)) x) ・C式 ・S式 7

Slide 9

Slide 9 text

Indentation-sensitive syntax (SRFI 49) ・インデントで構造化する構文(I式) ・標準でサポートしている処理系はSagittariusくらい define fac x if = x 0 1 * x fac - x 1 #!reader=srfi/:49 (import (srfi :49)) 8

Slide 10

Slide 10 text

Indentation-sensitive syntax (SRFI 49) ・S式との共存もできる ・括弧で囲うにはgroupを使う define (fac x) if (= x 0) 1 * x fac (- x 1) quote group a b ;(quote ((a b))) 9

Slide 11

Slide 11 text

Wisp (SRFI 119) ・なんだこれ ・標準で使える処理系はない →WispのサイトにGuile用のコードがあるのでインストールする define : factorial n __ if : zero? n ____ . 1 ____ * n : factorial (- n 1) display : factorial 5 newline 10

Slide 12

Slide 12 text

Wisp (SRFI 119)  ルール let      ;(let ((x 1) : x 1 ; (y 2) y 2 ; (y 3)) body ; body) ・Colon”:” 行頭にある ▶ 下のインデントが閉じるまで、 それ以外  ▶ 行末まで define : f a ;(define (f a) + ; + a 1) a 1 ・ Dot “.” 引数(atom)を並べる list . 1 2 . 3 . 4 ;(list 1 2 3 4) list 1 2 3 ;エラー 4 ;(list (1 2) (3) (4)) 11

Slide 13

Slide 13 text

・Under score ”_” 空白と同じ HTML上の空白の扱いにより、インデントが消えたりすることへの対処 Wisp (SRFI 119)  ルール + 1 2 ___ + 3 4 ____ + 5 6 12

Slide 14

Slide 14 text

t-expressions SRFI 110        その他(紹介だけ) let <* x $ cos $ f c *> ! dostuff x    13

Slide 15

Slide 15 text

括弧 ( ) を減らすと別の記号が増えます。 初心者向きかは微妙。 おしまい 14