ニé™ç›® スクリプトを書ãå‰ã« 
ã§ã¯å®Ÿéš›ã«ã‚¹ã‚¯ãƒªãƒ—トを書ã„ã¦ã¿ã¾ã—ょã†ã€ã¨ã™ã‚‹æ™‚ã«ã€æœ€ä½Žã§ã‚‚知ã£ã¦ãŠã‹ãªã‘れã°ã„ã‘ãªã„ Scheme ã®æ–‡æ³•ã¨ã„ã†ã‚‚ã®ãŒã‚りã¾ã™ã€‚ã“れを知らãªã‘れ㰠Script-Fu ã¯æ›¸ã‘ãªã„ã¨ã„ã†ã‚‚ã®ã§ã™ã€‚沢山知ã£ã¦ã„れã°çŸ¥ã£ã¦ã„ã‚‹ã»ã© Script-Fu ã‚’æ›¸ãæ™‚ã«æœ‰åˆ©ã§ã™ãŒã€ã¯ã˜ã‚ã‹ã‚‰ãれã»ã©æ²¢å±±ç†è§£ã—よã†ã¨ã—ã¦ã‚‚ç„¡ç†ãŒã‚ã‚‹ã®ã§ã€ã“ã“ã§ã¯å„ªå…ˆåº¦ã®é«˜ã„ã‚‚ã®ã‹ã‚‰æ®µéšŽçš„ã«èª¬æ˜Žã—ã¦ã„ãã¾ã™ã€‚
手始ã‚ã«ã€Scheme ã§ã®è¨ˆç®—方法ã¨å¤‰æ•°ã®ä»£å…¥ã¨ãƒªã‚¹ãƒˆã¯ Script-Fu を書ã上ã§å¿…ãšã¨ã„ã£ã¦ã„ã„ã»ã©ä½¿ã‚れるã®ã§ã€ã“れを説明ã—ã¦ã‹ã‚‰ç°¡å˜ãªã‚¹ã‚¯ãƒªãƒ—トを書ã„ã¦ã¿ã¾ã™ã€‚ã•らã„ã†ã¨ã€Gimp ã§é–¢æ•°ã‚’呼ã³å‡ºã—ãŸæ™‚ã«ã¯ã»ã¨ã‚“ã©ã®å ´åˆã§ãƒªã‚¹ãƒˆã§è¿”ã£ã¦ãã‚‹ã®ã§ã€ãƒªã‚¹ãƒˆã®è€ƒãˆæ–¹ã‚’ç†è§£ã›ãšã« Script-Fu を書ãã®ã¯ã¨ã¦ã‚‚困難ã§ã™ã€‚
2.1 Script-Fu コンソール 
ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ Script-Fu コンソールを使ã„ã¾ã™ã€‚メニューã‹ã‚‰ フィルタ/Script-Fu/Script-Fu コンソール... ã‚’é¸ã¶ã¨ä¸‹ã®ã‚ˆã†ãªãƒ€ã‚¤ã‚¢ãƒã‚°ãŒé–‹ãã¾ã™ã€‚ã“ã“ã®ã‚³ãƒžãƒ³ãƒ‰æ¬„ã«è‰²ã€…ã¨ã‚³ãƒžãƒ³ãƒ‰ã‚’入力ã™ã‚‹ã“ã¨ã§å¯¾è©±çš„ã«å®Ÿè¡Œçµæžœã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

ã“ã“ã§ã¯ Gimp ã®é–¢æ•°ã‚’直接実行ã—㦠TinyScheme 出力を得るã“ã¨ãŒã§ãã¾ã™ã€‚ãã®ãŸã‚スクリプトを作æˆã™ã‚‹æ™‚ã‚„ã€ã¡ã‚‡ã£ã¨é–¢æ•°ã®å応を見ã¦ã¿ãŸã„時ã«ã¨ã¦ã‚‚便利ã§ã™ã€‚
2.2 計算方法 
2.2.1 å‰ç½®è¨˜æ³•ã¨å››å‰‡æ¼”ç®— 
ã¾ãšæœ€åˆã«ã€æ•°ã®è¨ˆç®—方法ã‹ã‚‰ã¯ã˜ã‚ã¾ã™ã€‚åŠ ç®—ã€æ¸›ç®—ã€ä¹—ç®—ã€é™¤ç®—ã®æ¼”ç®—åã¯ãれãžã‚Œ +ã€-ã€*ã€/ ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚例ãˆã° 2 㨠3 ã‚’è¶³ã—ç®—ã—ã¦ã¿ã¾ã—ょã†ã€‚コンソール欄㫠2+3 ã¨å…¥åŠ›ã™ã‚‹ã¨ã€ã‚¨ãƒ©ãƒ¼ãŒå‡ºã¦ã—ã¾ã„ã¾ã™ã€‚
注æ„: ">" ã®å³å´ã«ç¶šã„ã¦æ›¸ã„ã¦ã‚ã‚‹ã‚‚ã®ãŒ Script-Fu コンソールã«å…¥åŠ›ã—ãŸã‚‚ã®ã§ã€æ¬¡ã®è¡ŒãŒãã®å‡ºåŠ›ã§ã™
> 2+3
Error: eval: unbound variable: 2+3

エラーãŒå‡ºã‚‹ç†ç”±ã¯ä¸‰ã¤ã‚りã¾ã™ã€‚計算をã•ã›ã‚‹ã«ã¯ã€Scheme ã®ãƒ«ãƒ¼ãƒ«ã‚’守らãªãã¦ã¯ã„ã‘ãªã„ã®ã§ã™ã€‚上ã®è¨ˆç®—ã§é–“é•ã£ã¦ã„ã‚‹ã¨ã“ã‚ã¯ã“ã“ã§ã™ã€‚
- 1. 計算å¼å…¨ä½“を括弧ã§å›²ã‚€
- ã“ã®è¨ˆç®—å¼ã¯è¨ˆç®—ãŒå§‹ã¾ã‚‹å‰ã‹ã‚‰çµ‚ã‚‹ã¨ã“ã‚ã¾ã§ã€å…¨ä½“を括弧ã§å›²ã¾ãªãã¦ã¯ã„ã‘ã¾ã›ã‚“。例: (2+3)
- 2. 空白スペースãŒç„¡ã„
- ã“ã®è¨ˆç®—å¼ã«ã¯ã€æ¼”ç®—å (+) ã¨è¢«æ¼”ç®—é … (2 㨠3) ã¨ã®é–“ã«ç©ºç™½ã‚¹ãƒšãƒ¼ã‚¹ãŒã‚りã¾ã›ã‚“。スペースã§é–“を区切ã£ã¦ã‚„らãªã‘れã°ã€"2+3" ã¨ã„ã†ä¸€ã¤ã®å¤‰æ•°ã§ã‚ã‚‹ã¨ã¿ãªã•れã¦ã—ã¾ã„ã¾ã™ã€‚例: (2 + 3)
- 3. å‰ç½®è¨˜æ³•ã«ãªã£ã¦ã„ãªã„
- å‰ç½®è¨˜æ³• (Wikipedia
) ã§ã¯å…¨ã¦ã®è¢«æ¼”ç®—é …ã®å‰ã«æ¼”ç®—åãŒã‚りã¾ã™ã€‚普通ã¯è¨ˆç®—ã™ã‚‹æ•°ã®é–“ã«ã€è¶³ã—ç®—ã™ã‚‹ã¨ã‹ã‹ã‘ç®—ã™ã‚‹ãªã©ã®è¨ˆç®—方法を書ãã®ã§ã™ãŒã€ã“ã“ã§ã¯è¨ˆç®—方法を全ã¦ã®æ•°å—ã®å‰ã«æ›¸ãã¾ã™ã€‚例: (+ 2 3)
よã£ã¦ã€2 㨠3 ã‚’è¶³ã—ç®—ã—ãŸã„å ´åˆã¯ (+ 2 3) ã¨ãªã‚Šã¾ã™ã€‚コンソールã®ã‚³ãƒžãƒ³ãƒ‰å…¥åŠ›æ¬„ã«å…¥ã‚Œã¦ã¿ã¦ä¸‹ã•ã„。
> (+ 2 3)
5
ã“ã®ãƒ«ãƒ¼ãƒ«ã«ã‚ˆã‚Šã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã« (+ 2 3) ã¨å…¥ã‚Œã‚‹ã¨ã€5 ã¨ã„ã†ç”ãˆãŒè¿”ã£ã¦ãã‚‹ã¨æ€ã„ã¾ã™ã€‚å‰ç½®è¨˜æ³•ã®æ›¸ãæ–¹ã¯ã¡ã‚‡ã£ã¨æ…£ã‚ŒãŒå¿…è¦ã‹ã‚‚ã—れã¾ã›ã‚“。簡å˜ãªç·´ç¿’ã‚’ã—ã¦ã¿ã¾ã—ょã†ã€‚
2.2.2 å‰ç½®è¨˜æ³•ã¨è¨ˆç®—ã®ç·´ç¿’ 
å•題ã§ã™ã€‚æ£è§£ã‚’見るå‰ã«å®Ÿéš›ã«ã©ã†ãªã‚‹ã®ã‹è‡ªåˆ†ã§è€ƒãˆã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«å…¥ã‚Œã¦è©¦ã—ã¦ä¸‹ã•ã„。
å•題
- 8 ã‚’ 2 ã§å‰²ç®—ã™ã‚‹
- -4 ã‚’å¾—ã‚‹
- 2 㨠5 㨠7 ã‚’ã‹ã‘ç®—ã™ã‚‹
- 4 㨠5 ã‚’è¶³ã—ç®—ã—ãŸã‚‚ã®ã‹ã‚‰ 2 を引ã
- 2 㨠4 ã‚’è¶³ã—ç®—ã—ãŸã‚‚ã®ã¨ã€3 㨠5 ã‚’è¶³ã—ç®—ã—ãŸã‚‚ã®ã¨ã‚’ã‹ã‘ç®—ã™ã‚‹
æ£è§£
- 1. (/ 8 2)
- å››å‰‡æ¼”ç®—ã®æ¼”ç®—åã«ã¯ã€åŠ ç®—ã«ã¯ + ã‚’ã€æ¸›ç®—ã«ã¯ - ã‚’ã€ä¹—ç®—ã«ã¯ + ã‚’ã€é™¤ç®—ã«ã¯ / を使ã„ã¾ã™ã€‚
- 2. (- 4)
- (- 0 4) ã§ã‚‚åŒã˜çµæžœãŒå¾—られã¾ã™ãŒã€ç¬¦å·ã‚’å転ã•ã›ãŸã„ã ã‘ã®æ™‚ã¯ã“ã®æ§˜ã«æ›¸ãã“ã¨ãŒã§ãã¾ã™ã€‚-4 ã ã‘を書ãã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- 3. (+ 2 5 7)
- ã“ã®ã‚ˆã†ã«è¶³ã—ç®—ã—ãŸã„æ•°å—を並ã¹ã¦æ›¸ãã“ã¨ãŒã§ãã¾ã™ã€‚並ã¹ã¦æ›¸ãã¨ã€å¼•ãç®—ã®æ™‚ã¯æœ€åˆã®æ•°å—ã‹ã‚‰æ®‹ã‚Šã®æ•°å—ã‚’è¶³ã—ãŸã‚‚ã®ã§å¼•ãç®—ã—ã€ã‹ã‘ç®—ã®æ™‚ã¯å…¨ã¦ã®æ•°ã‚’掛ã‘ã‚‹ã“ã¨ã«ãªã‚Šã€å‰²ã‚Šç®—ã®æ™‚ã¯æœ€åˆã®æ•°å—ã‹ã‚‰æ®‹ã‚Šã®æ•°å—を掛ã‘ãŸã‚‚ã®ã§å‰²ã‚Šã¾ã™ã€‚
- 4. (- (+ 4 5) 2)
- 普通ã®è¨ˆç®—å¼ã¨åŒæ§˜ã«æ‹¬å¼§ã«ã¯å„ªå…ˆé †ä½ãŒã‚りã€ã‚ˆã‚Šå†…å´ã«ã‚る括弧ã§é–‰ã˜ã‚‰ã‚ŒãŸã‚‚ã®ã‹ã‚‰è¨ˆç®—ã•れã¦ã„ãã¾ã™ã€‚
- 5. (* (+ 2 4) (+ 3 5))
- å‰ç½®è¨˜æ³•ã§è¨ˆç®—å¼ã‚’括弧ã§å›²ã¿ãªãŒã‚‰æ›¸ã„ã¦ã„ãã¨ã€ä¸æ…£ã‚ŒãªãŸã‚ã«é–“é•ã£ãŸæ›¸ã方をã—ã¦ã—ã¾ã†å ´åˆãŒã‚りã¾ã™ã€‚é•·ã複雑ãªè¨ˆç®—å¼ã§ã‚ã£ã¦ã‚‚ã€ä¸€ã¤ä¸€ã¤ç¢ºèªã—ãªãŒã‚‰æ‹¬å¼§ã‚’é–‰ã˜ã‚‹ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚
2.3 変数を使ㆠ
変数を宣言ã™ã‚‹ã“ã¨ã§ã€è¨ˆç®—å¼ãªã©ã«å¤‰æ•°ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚変数ã¯ã•ã¾ã–ã¾ãªã‚‚ã®ãŒå…¥ã‚‹å…¥ã‚Œç‰©ã§ã€æ•°å€¤ã‚„æ–‡å—列やリストãªã©ã‚’入れるã“ã¨ãŒã§ãã¾ã™ã€‚å¤‰æ•°ã®æœ‰åŠ¹ç¯„å›²ã«åˆ†ã‘ã¦è€ƒãˆã‚‹ã¨ã€å¤§åŸŸå¤‰æ•° (ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°) ã¨å±€æ‰€å¤‰æ•° (ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°) ã¨ã«åˆ†ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
GIMP-2.4 以é™ã« SIOD ã‹ã‚‰äº¤æ›ã—ã¦å®Ÿè£…ã•れ㟠TinyScheme ã§ã¯å¤§åŸŸå¤‰æ•°ã‚’使ãˆãªããªã‚Šã€ä½¿ç”¨ã§ãã‚‹ã®ã¯å±€æ‰€å¤‰æ•°ã ã‘ã«ãªã‚Šã¾ã—ãŸã€‚
2.3.1 局所変数 
変数を使用ã™ã‚‹å‰ã«ã¯ã€ã¾ãšå¤‰æ•°ã®ä½¿ç”¨ã‚’宣言ã—ãªã‘れã°ã„ã‘ã¾ã›ã‚“。ã“れ㯠let* 構文を使用ã—ã¦è¡Œã„ã¾ã™ã€‚ã“れ㯠let* ã«ç¶šã‘ã¦å¤‰æ•°åã¨ã€ãã®å¤‰æ•°ã«ä»£å…¥ã—ãŸã„ã‚‚ã® (å¼ã®çµæžœã§ã‚ã£ã¦ã‚‚よã„) を書ãã¾ã™ã€‚ã“ã®ã‚ˆã†ã«æ›¸ãã¾ã™ã€‚
(let* ((変数å 代入ã™ã‚‹ã‚‚ã®) ...) ...)
ã“ã®å¤‰æ•°ã¯å±€æ‰€å¤‰æ•°ãªã®ã§ã€let* æ§‹æ–‡ã®å¤–ã§å¤‰æ•°ã‚’使ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。
変数 a ã« 6 を入れるã«ã¯æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚
> (let* ((a 6)))
()
括弧 () ãŒè¡¨ç¤ºã•れã¾ã—ãŸã€‚ã¾ã 何も評価ã—ã¦ã„ãªã„ãŸã‚ã§ã™ã€‚評価ã®å¯¾è±¡ã¨ã—ã¦ã€å¤‰æ•° a ã«ã¯ä½•ãŒå…¥ã£ã¦ã„ã‚‹ã®ã‹ã‚’評価ã•ã›ã¦ã¿ã¾ã™ã€‚
> (let* ((a 6)) a)
6
最後㫠a ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ã§ã€ãã“ã§ a を評価ã—ãŸçµæžœãŒè¿”ã£ã¦ã㦠6 を出力ã—ã¾ã—ãŸã€‚åˆã‚ã¦ã‚„る人ã«ã¯æ„味ãŒã‚ã‹ã‚‰ãªã„ã¨æ€ã„ã¾ã™ãŒã€ãã†ã„ã†ã‚‚ã®ã ã¨æ€ã£ã¦ãã ã•ã„。ã“ã“ã§ã¯ã¾ã é‡è¦ãªã“ã¨ã§ã¯ãªã„ã®ã§æ°—ã«ã—ãªãã¦ã„ã„ã§ã™ã€‚大事ãªã“ã¨ã¯ã€æ§‹æ–‡ã®æ›¸ãæ–¹ã§ã™ã€‚
次ã«ã€å¤‰æ•° a ã« 6 を入れã€å¤‰æ•° b ã« 8 を入れã€ãã®äºŒã¤ã‚’è¶³ã—ç®—ã—ã¦ã¿ã¾ã™ã€‚
>(let* ((a 6) (b 8)) (+ a b))
a ã«ã¯ 6 ãŒã€b ã«ã¯ 8 ãŒå…¥ã£ã¦ã„ã‚‹ã®ã§ã€æœ€å¾Œã® (+ a b) ã§ã¯ (+ 6 8) ã¨ã„ã†è¨ˆç®—ãŒè¡Œã‚れ㦠14 ãŒè¿”ã£ã¦ãã¾ã™ã€‚
Script-Fu コンソールã§ã¯æ–‡ç« ã‚’ 1 è¡Œã§æ›¸ã切らãªã„ã¨ã„ã‘ãªã„ãŸã‚ã«æ§‹é€ ãŒåˆ†ã‹ã‚Šã«ãã„ã§ã™ã€‚ç†è§£ã—ã‚„ã™ã„よã†ã«ã€ä¸Šã®è¨ˆç®—を段è½ã‚’ã¤ã‘ã¦æ•´å½¢ã—ã¦ç¾ã™ã¨æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
(let* ↠let* æ§‹æ–‡ã®å§‹ã¾ã‚Š
( ↠変数宣言ã®å§‹ã¾ã‚Š
(a 6) ↠変数 a ã®åˆæœŸå€¤ã¯ 6
(b 8) ↠変数 b ã®åˆæœŸå€¤ã¯ 8
) ↠変数宣言ã®çµ‚ã‚り
(+ a b) â† å¤‰æ•°ã®æœ‰åŠ¹ç¯„å›²å†…ã§å¤‰æ•°ã‚’使ã£ã¦ã„ã‚‹
) ↠let* æ§‹æ–‡ã®çµ‚ã‚りï¼å¤‰æ•°ã®æœ‰åŠ¹ç¯„å›²çµ‚ã‚り
ã“ã“ã§ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®çµŒé¨“ãŒã‚る人ã¯ã€å¤‰æ•°ã®å®£è¨€ã®æ™‚ã«å¤‰æ•°ã®åž‹ã‚’指定ã—ã¦ã„ãªã„ã“ã¨ã«æ°—付ãã‹ã‚‚ã—れã¾ã›ã‚“。Scheme ã®å¤‰æ•°ã¯åž‹ã®ç„¡ã„ã‚‚ã®ãªã®ã§ã€æ•´æ•°åž‹ã§ã‚ã‚‹ã¨ã‹æ–‡å—列型ã§ã‚ã‚‹ã¨ã‹ã‚’指定ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。例ãˆã°å¤‰æ•° moji ã«æ–‡å—列 "The Gimp" ã‚’å…¥ã‚Œã‚‹å ´åˆã¯ã“ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
> (let* ((moji "The Gimp")) moji)
"The Gimp"
æ–‡å—列ã§ã¯æ–‡å—を二é‡å¼•用符 (") ã§å›²ã¾ãªãã¦ã¯ã„ã‘ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。もã—囲ã¾ãªã‹ã£ãŸå ´åˆã€å¤‰æ•° moji ã«å¤‰æ•° The を入れよã†ã¨ã—ã¦ã„ã‚‹ã®ã ã¨è§£é‡ˆã•れã€ã‚¨ãƒ©ãƒ¼ã«ãªã£ã¦ã—ã¾ã„ã¾ã™ã€‚
> (let* ((moji The Gimp)) moji)
Error: eval: unbound variable: The
2.3.2 変数ã®ä»£å…¥ 
let* æ§‹æ–‡ã¯ã€let* æ§‹æ–‡ã®ç¯„囲内ã§ã®ã¿æœ‰åйãªå¤‰æ•°ã®å®£è¨€ã¨åˆæœŸå€¤ã®ä»£å…¥ã‚’行ã†ã“ã¨ãŒã§ãã‚‹ã“ã¨ã¯ä¸Šã«èª¬æ˜Žã—ãŸã¨ãŠã‚Šã§ã™ã€‚ã™ã§ã«å®£è¨€ã—ãŸå¤‰æ•°ã«åˆ¥ã®å€¤ã‚’代入ã™ã‚‹ã«ã¯ set! 構文を使ã„ã¾ã™ã€‚
(set! 変数 代入ã™ã‚‹ã‚‚ã®)
例ãˆã°ã€ã“ã®ã‚ˆã†ã«ä½¿ã„ã¾ã™ã€‚
(let*
(
(a 6) ↠変数 a ã®åˆæœŸå€¤ã¯ 6
(b 8) ↠変数 b ã®åˆæœŸå€¤ã¯ 8
)
(+ a b) ↠6+8 ã®è¨ˆç®—を行ã†
(set! a 4) ↠変数 a ã®å€¤ãŒ 4 ã«å¤‰æ›´
(+ a b) ↠4+8 ã®è¨ˆç®—を行ã†
)
ã¾ã 宣言ã•れã¦ã„ãªã„変数を set! ã§ä½¿ãŠã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。
2.4 リスト 
Script-Fu を扱ã†ä¸Šã§ã€ãƒªã‚¹ãƒˆ (list) ã¨ã„ã†è€ƒãˆã¯éžå¸¸ã«é‡è¦ã§ã™ã€‚ãªãœãªã‚‰ Gimp ã§é–¢æ•°ã‚’呼ã³å‡ºã—ãŸæ™‚ã€è¿”ã£ã¦ãã‚‹ã‚‚ã®ã¯å¤§æŠµãƒªã‚¹ãƒˆã§ã‚«ãƒ—セル化ã•れã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚リストã§è¿”ã•れãŸå ´åˆã€ãƒªã‚¹ãƒˆã®ä¸ã‹ã‚‰å¿…è¦ãªå€¤ã‚’å–り出ã—ã¦ã‚„らãªã‘れã°ãªã‚Šã¾ã›ã‚“。
2.4.1 リストã®ä½œã‚Šæ–¹ 
リストã¯è¦ç´ ã®ä¸¦ã³ã§æ§‹æˆã•れã¦ã„ã¾ã™ã€‚è¦ç´ ã«ã¯æ•°å€¤ã‚„æ–‡å—列や真å½ã‚„リストãªã©ãŒå…¥ã‚Šã¾ã™ã€‚ãƒªã‚¹ãƒˆã¯æ‹¬å¼§ã®å‰ã«å¼•用符 (') を使ã£ã¦ã“ã®ã‚ˆã†ã«ã—ã¦ä½œã‚‰ã‚Œã¾ã™ã€‚
'(è¦ç´ 1 è¦ç´ 2 è¦ç´ 3 ... )
例ãˆã° 2 㨠4 㨠6 ã®æ•°å€¤ãŒä¸¦ã‚“ã§ã„るリストを作るã«ã¯ã“ã†ã—ã¾ã™ã€‚
> '(2 4 6)
(2 4 6)
コンソールã‹ã‚‰ã¯ã“ã®ã‚ˆã†ã«æ•°å€¤ã‚’括弧ã§é–‰ã˜ã¦ä¸¦ã¹ãŸã‚‚ã®ãŒè¿”ã£ã¦ãã¾ã™ã。リストã®å…ˆé ã‹ã‚‰ 2 4 6 ã¨é †ç•ªã«å…¥ã£ã¦ã„ã‚‹ã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ã€‚リストã®ä¸ã«ã•らã«ãƒªã‚¹ãƒˆã‚’作るã«ã¯ã€å¼•用符無ã—ã®æ‹¬å¼§ã§ä¸¦ã¹ã¾ã™ã€‚色々ãªã‚¿ã‚¤ãƒ—を並ã¹ã¦ã¿ã¾ã™ã€‚
> '(5 "The Gimp" #t (7 8))
(5 "The Gimp" #t (7 8))
5 ãŒæ•°å€¤ã€"The Gimp" ãŒæ–‡å—列ã€#t ãŒçœŸå½å€¤ (#t ãŒçœŸã‚’ç¾ã—ã€#f ã®å½ã‚’ç¾ã™) ã§ã€(7 8) ㌠7 㨠8 ã§æ§‹æˆã•れるリストã§ã™ã€‚
list ã§ãƒªã‚¹ãƒˆã‚’作るã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れ㯠list ã«ç¶šã‘ã¦è¦ç´ を書ãã ã‘ã§ãƒªã‚¹ãƒˆãŒã§ãã¾ã™ã€‚
(list (è¦ç´ 1) (è¦ç´ 2) (è¦ç´ 3) ... )
ã‚‚ã—è¦ç´ を一ã¤ã‚‚書ã‹ãªã‹ã£ãŸå ´åˆã€ç©ºã£ã½ã®ãƒªã‚¹ãƒˆãŒä½œã‚‰ã‚Œã¾ã™ã€‚
=> (list 1 3 5 7)
(1 3 5 7)
=> (list)
()
2.4.2 car 㨠cdr 
ãれã§ã¯ãƒªã‚¹ãƒˆã®ä¸ã«å…¥ã£ã¦ã„ã‚‹ã‚‚ã®ã‚’å–り出ã—ã¦ã¿ã¾ã—ょã†ã€‚リストã®å…ˆé ã®è¦ç´ ã‚’å–り出ã™ã«ã¯ car ã‚’ã€ãƒªã‚¹ãƒˆã®æ®‹ã‚Šã‚’å–り出ã™ã«ã¯ cdr を使ã„ã¾ã™ã€‚
> '(1 2 3)
(1 2 3)
> (car '(1 2 3))
1
> (cdr '(1 2 3))
(2 3)
ã¾ãšã¯ãƒªã‚¹ãƒˆ '(1 2 3) を確èªã—ã¦ã„ã¾ã™ã€‚ã“ã“ã‹ã‚‰ car を使ã£ã¦ãƒªã‚¹ãƒˆã®å…ˆé ã®è¦ç´ ã‚’å–り出ã—ã¦ã‚„る㨠1 ãŒè¿”ã£ã¦ãã¾ã™ã€‚cdr を使ãˆã° (2 3) ã¨ã€ãƒªã‚¹ãƒˆã®æ®‹ã‚ŠãŒãƒªã‚¹ãƒˆã§è¿”ã£ã¦ãã¾ã™ã€‚ãƒªã‚¹ãƒˆã®æ®‹ã‚Šã®è¦ç´ ã¯ãƒªã‚¹ãƒˆã«ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
次ã«ãƒªã‚¹ãƒˆ (2 3) ã‹ã‚‰ 2 㨠3 ã‚’å–り出ã—ã¦ã¿ã¾ã—ょã†ã€‚6 ã‚’å–り出ã™ã«ã¯å…ˆã»ã©ã®çµæžœã‹ã‚‰ã•ら㫠car を使ãˆã°ã„ã„ã§ã™ã。8 ã‚’å–り出ã™ã«ã¯è¿½åŠ ã—㦠cdr ã®æ¬¡ã« car を使ãˆã°ã§ãã¾ã™ã。
> (car (cdr '(1 2 3)))
2
> (cdr (cdr '(1 2 3)))
(3)
> (car (cdr (cdr '(1 2 3))))
3
6 ã‚’å–り出ã™ã«ã¯æ‹¬å¼§ã§é–‰ã˜ã¦ cdr ã‚’å…ˆã«ä½¿ã„ã€ãã®å¾Œã§ car を使ã†ã“ã¨ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。8 ã‚’å–り出ã™ãŸã‚ã« cdr を二回使ã†ã¨ã€è¦ç´ ãŒä¸€ã¤ã®ãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã‹ã‚‰ car を使ã£ã¦ä¸ã«ã‚ã‚‹ 8 ã‚’å–り出ã—ã¾ã™ã€‚cdr を三回使ã†ã¨è¦ç´ ãŒç„¡ããªã‚Šã€ç©ºã£ã½ã®ãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã™ã€‚ã“れã‹ã‚‰ã¯ã‚‚ã†ä½•ã‚‚å–り出ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。
> (cdr (cdr (cdr '(1 2 3))))
()
2.4.3 連続ã™ã‚‹ car 㨠cdr ã®çŸç¸®å½¢ 
car 㨠cdr を何回ã‹çµ„ã¿åˆã‚ã›ã¦ä½¿ã†ã“ã¨ã§ãƒªã‚¹ãƒˆã®ä¸ã®è¦ç´ ã‚’å–り出ã™ã®ã§ã™ãŒã€ä½•度も (car (cdr ... )) ã¨æ›¸ãã®ã¯é¢å€’ã§ã™ã€‚ãã“ã§ car 㨠cdr ã‚’ã¾ã¨ã‚ã¦æ›¸ãやり方ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ãれ㯠c 㨠r ã®é–“ã« a 㨠d を書ãã®ã§ã™ã€‚a ã¯å…ˆé ã‚’å–り出ã™ã“ã¨ã‚’ã€d ã¯æ®‹ã‚Šã‚’å–り出ã™ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚例ãˆã°ã“ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚
> (car (cdr '(1 2)))
2
> (cadr '(1 2))
2
> (car (cdr (cdr '(1 2 3 4))))
3
> (caddr '(1 2 3 4))
3
二ã¤ã®è¦ç´ ãŒå…¥ã£ã¦ã„るリストã®å¾Œã‚ã‚’å–り出ã™ã«ã¯ cadr ã‚’ã€ä¸‰ç•ªç›®ã‚’å–り出ã™ã«ã¯ caddr を使ã„ã¾ã™ã€‚四番目をå–り出ãã†ã¨ cadddr を使ã†ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã—ã‹ã—五番目ã®è¦ç´ ã‚’å–り出ãã†ã¨ caddddr を使ã†ã¨ã‚¨ãƒ©ãƒ¼ã¨ãªã£ã¦ã—ã¾ã„ã¾ã™ã€‚残念ãªãŒã‚‰ã‚ã¾ã‚Šé•·ã„ã‚‚ã®ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„よã†ã§ã™ã€‚cdr 㨠car を組ã¿åˆã‚ã›ã¦ä½¿ã†ãªã©ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚
> (caddddr '(1 2 3 4 5))
Error: unbound variable: caddddr
> (cadr (cdddr '(1 2 3 4 5)))
3
> (caddr (cddr '(1 2 3 4 5)))
3
リストã®ä¸ã®è¦ç´ ã®ä¸€ã¤ã¨ã—ã¦ãƒªã‚¹ãƒˆã‚’入れるã“ã¨ã‚‚ã§ãã¾ã™ã€‚リストã®ä¸ã«å…¥ã£ã¦ã„るリストã‹ã‚‰è¦ç´ ã‚’å–り出ã™ã«ã¯ã€ã¾ãšå¤–å´ã‹ã‚‰ä¸ã®ãƒªã‚¹ãƒˆã‚’å–り出ã—ã€ãã®æ¬¡ã«å†…å´ã®ãƒªã‚¹ãƒˆã‹ã‚‰è¦ç´ ã‚’å–り出ã—ã¾ã™ã€‚例ãˆã°ã€ã“ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
> (caddr '(1 5 (7 6) 4))
(7 6)
> (car (caddr '(1 5 (7 6) 4)))
7
'(1 5 (7 6) 4) ãŒãƒªã‚¹ãƒˆã§ã™ã€‚(7 6) ã¯ãƒªã‚¹ãƒˆã®ä¸ã«ã¯å…¥ã£ã¦ã„るリストã§ã™ã€‚ãã—ã¦ãƒªã‚¹ãƒˆ '(1 5 (7 6) 4) ã‚’ caddr ã—ã¦ã‚„ã‚‹ã¨ä¸‰ç•ªç›®ã®è¦ç´ ã€ã¤ã¾ã‚Šãƒªã‚¹ãƒˆ (7 6) ãŒå–り出ã›ã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã®ä¸ã® 6 ã‚’å–り出ã™ã«ã¯ã€ã•らã«car ã—ã¦ã‚„れã°ã„ã„ã‚ã‘ã§ã™ã€‚
ã“れらをè¸ã¾ãˆã¦ã€ãƒªã‚¹ãƒˆã‹ã‚‰è¦ç´ ã‚’å–り出ã™ãŸã‚ã®ç·´ç¿’ã‚’ã¡ã‚‡ã£ã¨ã—ã¦ã¿ã¾ã—ょã†ã€‚
ç·´ç¿’å•題
- '(3 5 7) ã‹ã‚‰ 5 ã‚’å–り出ã™
- '(4 5 (6 7) 8) ã‹ã‚‰ 7 ã‚’å–り出ã™
car 㨠cdr ã®ä»²é–“を使用ã—ã¦ã€ãªã‚‹ã¹ãå°‘ãªã„æ‰‹é †ã§å–り出ã›ã‚‹ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚
æ£è§£(例)
- (cadr '(3 5 7))
- (cadr (caddr '(4 5 (6 7) 8)))
2.5 評価å¼ã¨è¿”り値 
評価å¼ã€ã¨ã„ã†ã®ã¯ä½•ã‹ã¨ã„ã†ã®ã¯é›£ã—ã„ã®ã§ã™ãŒã€å‰å¾Œã‚’括弧ã§å›²ã‚“ã å¼ã§ã‚ã‚‹ã¨ç°¡å˜ã«è€ƒãˆã¦ãã ã•ã„。最åˆã«å‡ºã¦ããŸè¨ˆç®—ã®å¼ã‚‚評価å¼ã®ä¸€ç¨®ã§ã™ã€‚å¼ã‚’評価ã™ã‚‹ã¨ã€é€šå¸¸ã¯ä½•らã‹ã®å€¤ãŒè¿”ã£ã¦ãã¾ã™ã€‚(+ 5 3) ã®çµæžœã¨ã—㦠8 ãŒè¿”ã£ã¦ããŸã“ã¨ã‚’æ€ã„出ã—ã¦ä¸‹ã•ã„。
> (+ 5 3)
8
ã“れ㯠(+ 5 3) ã®è¨ˆç®—å¼ã‚’計算ã—ãŸã®ã§ã™ãŒã€ã“ã“ã§ã¯è¨ˆç®—ã—ãŸã“ã¨ã‚’評価ã—ãŸã®ã ã¨ã„ã„ã¾ã™ã€‚ãã—ã¦å¼ã‚’評価ã—ãŸçµæžœã€8 ãŒè¿”ã£ã¦ããŸã®ã ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚let* を使ã£ãŸå ´åˆã¯ã€æœ€å¾Œã®å¼ã‚’評価ã—ãŸã‚‚ã®ãŒè¿”ã£ã¦ãã¾ã™ã€‚
> (let* ((a 6)) a)
6
ã¾ãšå¤‰æ•° a ã« 6 を入れã¦ã€a ã ã‘を書ã„ã¦è©•価ã—ã¦ã„ã¾ã™ã€‚ãã®ã¾ã¾ a ã®å†…容ãŒå‡ºåŠ›ã•れã¾ã™ã€‚リストを作æˆã—ãŸã¨ãã®çµæžœã¯ãƒªã‚¹ãƒˆãŒè¿”ã£ã¦ãã¾ã™ã€‚ã¤ã¾ã‚Šã€è©•価ã—ãŸã¨ãã®è¿”り値ã¯ãƒªã‚¹ãƒˆãªã®ã§ã™ã€‚
> '(3 7 2)
(3 7 2)
ã»ã¨ã‚“ã©ã®å ´åˆã€Gimp ã®é–¢æ•°ã‚’呼ã³å‡ºã—ãŸæ™‚ã§è¿”り値ãŒã‚ã‚‹ãªã‚‰ã€ãã®è¿”り値ã¯ãƒªã‚¹ãƒˆã«ãªã£ã¦ã„ã¾ã™ã€‚リストã«ãªã£ã¦ã„ã‚‹å ´åˆã€car ãªã©ã‚’使ã£ã¦å¿…è¦ãªå€¤ã‚’å–り出ã—ã¦ã‚„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
駆ã‘足㧠Scheme ã®èª¬æ˜Žã‚’ã—ã¦ãã¾ã—ãŸãŒã€é›£ã—ã‹ã£ãŸã§ã—ょã†ã‹ï¼Ÿ ç°¡å˜ãªè¦å‰‡ã§ä½œã‚‰ã‚Œã¦ã„ã‚‹ã®ã§ã€ã¡ã‚‡ã£ã¨ã‚³ãƒ„ã‚’ã¤ã‹ã‚“ã§ã—ã¾ãˆã°ã™ãã«ç†è§£ã§ãã‚‹ã¨æ€ã„ã¾ã™ã€‚ã“れã¾ã§ã®ã¨ã“ã‚ã‚’ã¾ã¨ã‚ã¦ã¿ã¾ã™ã€‚
- Scheme ã®æ§‹æ–‡ã¯å‰å¾Œã‚’æ‹¬å¼§ã§æ‹¬ã‚‹
- æ‹¬å¼§å†…ã®æœ€åˆã®è¦ç´ ãŒæ‰‹ç¶šã (関数å) ã§ã€æ®‹ã‚Šã®è¦ç´ ã¯å¼•æ•°ã¨ã„ã†å‰ç½®è¨˜æ³•
- 評価å¼ã‚’評価ã—ãŸå ´åˆã€è©•価ã®çµæžœãŒè¿”ã•れる