Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scheme_syntax_sugars.pdf
Search
Niyarin
June 28, 2019
0
220
Scheme_syntax_sugars.pdf
Niyarin
June 28, 2019
Tweet
Share
More Decks by Niyarin
See All by Niyarin
Scheme用nREPLの開発(エラー出力の改善)
niyarin
0
130
bel lispの紹介
niyarin
0
660
nanopass-compiler-frameworkを使ってみました
niyarin
0
390
Gorgos-parser-combinator-written-in-scheme
niyarin
0
350
outputting-beautiful-s-expression
niyarin
0
340
Serialisp
niyarin
1
630
Mongo DBとS式検索
niyarin
0
270
goodbye-python-repl
niyarin
0
320
SchemeのEphemeronとWeak Pairの説明
niyarin
0
900
Featured
See All Featured
For a Future-Friendly Web
brad_frost
175
9.4k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Visualization
eitanlees
146
15k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Adopting Sorbet at Scale
ufuk
73
9.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Rails Girls Zürich Keynote
gr2m
94
13k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Documentation Writing (for coders)
carmenintech
67
4.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Writing Fast Ruby
sferik
628
61k
Transcript
Scheme/SRFIの syntax sugarの紹介 Niyarin
内容 ・SRFIとは ・Scheme のsyntax sugarの紹介 1
SRFI ・Scheme の拡張の仕様 ・RNRS(Schemeの標準仕様)にたまにマージされる ・内容はいろいろある ・データ構造 SRFI 69 (hash) SRFI113
(set) ・組み込みデータ構造の処理 SRFI 1 (reduce とか) SRFI 132 (sortとか) ・実用的なやつ SRFI64 (test suite) SRFI 106 (Socket) 2
Syntax Sugar ・S式やめる ・可読性があがる? ・初心者にはフレンドリー? ・”Being Popular” では ”I still
don't find prefix math expressions natural.” Paul Graham (前置記法による数式が自然であるとは思えない) 3
Curly-infix-expressions (SRFI 105) ・{}は拡張のために予約されている → {}を中間表現に使う ・あまりサポートする処理系は少ない Guile {n >
5} ;(> n 5) {a + b + c} ;(+ a b c) (read-enable 'curly-infix) 4
Curly-infix-expressions (SRFI 105) ・f(x)形式も使える ・演算子と手続きの区別はない {‘a cons ‘b} ;(cons ‘a
‘b) {+(1 2)};(+ 1 2) {cons (‘a ‘b)} ;(cons ‘a ‘b) 5
Curly-infix-expressions (SRFI 105) ・演算子の優先順位はない ・複数の演算子を混ぜたり、{}内が偶数個の場合 → 自分で$nfx$を定義してどうにかしてってことらしい {1 + {2 *
3}} ;(+ 1 (* 2 3)) (1 + 2 * 3);($nfx$ 1 + 2 * 3) 6
どちらが良いか? { f{n - 1}(x) } ((f (- n 1))
x) ・C式 ・S式 7
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
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
Wisp (SRFI 119) ・なんだこれ ・標準で使える処理系はない →WispのサイトにGuile用のコードがあるのでインストールする define : factorial n
__ if : zero? n ____ . 1 ____ * n : factorial (- n 1) display : factorial 5 newline 10
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
・Under score ”_” 空白と同じ HTML上の空白の扱いにより、インデントが消えたりすることへの対処 Wisp (SRFI 119) ルール +
1 2 ___ + 3 4 ____ + 5 6 12
t-expressions SRFI 110 その他(紹介だけ) let <* x $
cos $ f c *> ! dostuff x 13
括弧 ( ) を減らすと別の記号が増えます。 初心者向きかは微妙。 おしまい 14