Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scheme_syntax_sugars.pdf

Niyarin
June 28, 2019
190

 Scheme_syntax_sugars.pdf

Niyarin

June 28, 2019
Tweet

Transcript

  1. Scheme/SRFIの syntax sugarの紹介 Niyarin

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

  3. SRFI ・Scheme の拡張の仕様 ・RNRS(Schemeの標準仕様)にたまにマージされる ・内容はいろいろある ・データ構造 SRFI 69 (hash) SRFI113

    (set) ・組み込みデータ構造の処理 SRFI 1 (reduce とか) SRFI 132 (sortとか) ・実用的なやつ SRFI64 (test suite) SRFI 106 (Socket) 2
  4. Syntax Sugar ・S式やめる ・可読性があがる?  ・初心者にはフレンドリー?  ・”Being Popular” では ”I still

    don't find prefix math expressions natural.” Paul Graham (前置記法による数式が自然であるとは思えない)  3
  5. Curly-infix-expressions (SRFI 105) ・{}は拡張のために予約されている → {}を中間表現に使う ・あまりサポートする処理系は少ない Guile {n >

    5} ;(> n 5) {a + b + c} ;(+ a b c) (read-enable 'curly-infix) 4
  6. Curly-infix-expressions (SRFI 105) ・f(x)形式も使える ・演算子と手続きの区別はない {‘a cons ‘b} ;(cons ‘a

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

    3}} ;(+ 1 (* 2 3)) (1 + 2 * 3);($nfx$ 1 + 2 * 3) 6
  8. どちらが良いか? { f{n - 1}(x) } ((f (- n 1))

    x) ・C式 ・S式 7
  9. 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
  10. 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
  11. Wisp (SRFI 119) ・なんだこれ ・標準で使える処理系はない →WispのサイトにGuile用のコードがあるのでインストールする define : factorial n

    __ if : zero? n ____ . 1 ____ * n : factorial (- n 1) display : factorial 5 newline 10
  12. 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
  13. ・Under score ”_” 空白と同じ HTML上の空白の扱いにより、インデントが消えたりすることへの対処 Wisp (SRFI 119)  ルール +

    1 2 ___ + 3 4 ____ + 5 6 12
  14. t-expressions SRFI 110        その他(紹介だけ) let <* x $

    cos $ f c *> ! dostuff x    13
  15. 括弧 ( ) を減らすと別の記号が増えます。 初心者向きかは微妙。 おしまい 14