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
230
Scheme_syntax_sugars.pdf
Niyarin
June 28, 2019
Tweet
Share
More Decks by Niyarin
See All by Niyarin
Scheme用nREPLの開発(エラー出力の改善)
niyarin
0
150
bel lispの紹介
niyarin
0
730
nanopass-compiler-frameworkを使ってみました
niyarin
0
420
Gorgos-parser-combinator-written-in-scheme
niyarin
0
390
outputting-beautiful-s-expression
niyarin
0
380
Serialisp
niyarin
1
660
Mongo DBとS式検索
niyarin
0
310
goodbye-python-repl
niyarin
0
360
SchemeのEphemeronとWeak Pairの説明
niyarin
0
1k
Featured
See All Featured
Gamification - CAS2011
davidbonilla
81
5.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
720
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
GraphQLとの向き合い方2022年版
quramy
49
14k
How to Ace a Technical Interview
jacobian
277
23k
How GitHub (no longer) Works
holman
314
140k
Building Adaptive Systems
keathley
43
2.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
Unsuck your backbone
ammeep
671
58k
A Tale of Four Properties
chriscoyier
160
23k
Raft: Consensus for Rubyists
vanstee
140
7k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
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