Top / Alan ã¸ã®èª˜(ã„ã–ãª)ã„
Introduction to
Alan v0.31
Alan ã¸ã®èª˜(ã„ã–ãª)ã„
Last updated:
| 2008-01-07
|
Created:
| 2004-12-11
|
by Fumisky Wells
ãµãŸã‚Šã¯æ‰‹ã‚’ã¨ã‚Šã‚ã£ã¦ã€
ã“ãˆã‚’ãã‚ãˆã¦ã„ã„ã¾ã—ãŸã€‚
「ãƒãƒ«ã‚¹ï¼ã€
ãã®ã¨ãŸã‚“ã€æœ¨ã®ãã«
ã¤ã¤ã¾ã‚ŒãŸã€ã‚ã®å¤§ããª
飛行石ãŒã´ã‹ã‚Šã¨å…‰ã‚Šã€
ãŸã¡ã¾ã¡é»’ãã‹ã‚ã£ã¦ã„ã£ãŸã®ã§ã™ã€‚
....
ラピュタã¯ã€ä¸ã—ã‚“ã‹ã‚‰
ãŒã‚‰ãŒã‚‰ã¨ã“ã‚ã‚Œã¦ã„ãã¾ã™ã€‚
--天空ã®åŸŽãƒ©ãƒ”ュタ より
CONTENTS
- Alan ã£ã¦ä½•ï¼Ÿ
- ã¯ã˜ã‚ã®ä¸€æ©
- 例
- 例1 "Hello, World"
- 例2 シンプル㪠grep
- 例3 関数呼ã³å‡ºã—
- ãã®ä»–ã®ã‚µãƒ³ãƒ—ル
- ラピュタã®å‘ªæ–‡
- ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã€ã”質å•ã€ã”æ案ãªã©
- 用語
- 補足
Alan ã£ã¦ä½•ï¼Ÿ
Alan ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒ 言語ã§ã™ã€‚
ã‚ãŸãã—ã“㨠Fumisky Wells ãŒè¶£å‘³ã§ä½œã£ã¦ã„ã‚‹ã‚‚ã®ã§ã™ã€‚
- Alan ã§ä½•ãŒã§ãã‚‹ã‹
- 概è¦
Alan ã§ä½•ãŒã§ãã‚‹ã‹
(v0.31) class ã§ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ»ãƒ‡ã‚£ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ»ãƒ¡ãƒ³ãƒé–¢æ•°ãŒä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ãŸã ã—ã€ãƒ¡ãƒ³ãƒé–¢æ•°å†…ã§åž‹ãƒ‘ラメータã¯ã¾ã 使ãˆã¾ã›ã‚“。ã¾ãŸã€ã‚ªãƒ–ジェクト指å‘ã¯ã¾ã サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。
(v0.30) class (ã¨ã¯è¨€ã£ã¦ã‚‚ã¾ã æ§‹é€ ä½“ãƒ¬ãƒ™ãƒ«)ã§ç·ç§°åž‹ãŒä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸ(例: class Complex[T] ... end)。ãŸã ã—ã€ãƒ¡ãƒ³ãƒé–¢æ•°å†…ã§åž‹ãƒ‘ラメータã¯ã¾ã 使ãˆã¾ã›ã‚“。
(v0.29) class (ã¨ã¯è¨€ã£ã¦ã‚‚ã¾ã æ§‹é€ ä½“ãƒ¬ãƒ™ãƒ«)を組ã¿è¾¼ã¿ç·ç§°åž‹(array, list, map)ã®ä¸ã§ä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚
(v0.28) class (ã¨ã¯è¨€ã£ã¦ã‚‚ã¾ã æ§‹é€ ä½“ãƒ¬ãƒ™ãƒ«)ãŒè¨˜è¿°ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚
(v0.15) WikiMini ãŒè¨˜è¿°ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚
(v0.10) DNS ã§åå‰æ¤œç´¢ã‚’ã—ãŸã‚Š(Netパッケージ)ã€çµæžœã‚’ã‚ャッシュã—ãŸã‚Šã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚
(v0.09) Webサーãƒã®ãƒã‚°è§£æžãらã„ã¯ä½•ã¨ã‹ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚
(v0.08) å¤ä¸–代㮠BASIC 程度ã®ã“ã¨ãŒã‚„ã£ã¨ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸ(^^;)。
骨組ã¿(例外処ç†ã€åå‰ç©ºé–“ã€ãªã©)ã®ä½œæˆã‚’優先ã—ãŸã®ã§ã€
æä¾›ã•ã‚Œã¦ã„る関数やデータ型ã¯ã¾ã 包括的ã§ã‚‚直交的ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。
何ãŒã§ããªã„ã‹ã€ã¯ åˆ¶ç´„äº‹é …
ã‚’ã”å‚照下ã•ã„。
ã¾ã 制約ã らã‘ã§ã™ãŒã€æ©Ÿèƒ½æ‹¡å¼µã¯ã“ã‚Œã‹ã‚‰å¾ã€…ã«è¡Œã£ã¦ã„ã予定ã§ã™ã€‚
概è¦
概è¦ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
勉強
今ã¯ä»•äº‹&趣味㧠C++ 㨠Perl を使用ã—ã¦ã„ã¾ã™ãŒã€
段々ã¨ä¸æº€ãŒãŸã¾ã£ã¦ãã¾ã—ãŸ(笑)。
「ã“ã‚“ãªè¨€èªžã£ã¦ãªã„ã‹ãªã€ã¨æ€ã£ã¦æŽ¢ã—ã¦ã¿ã¾ã—ãŸãŒã€
ãªã‹ãªã‹è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
ãã‚“ãªä¸ã€å‹‰å¼·ã‚’å…¼ãã¦ä½œã£ã¦ã¿ã‚‹ã®ã‚‚1ã¤ã®æ–¹æ³•ã¨æ€ã„ã€
実行ã«ç§»ã—ã¦è¦‹ã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚
ã¾ã‚ã€éŽåŽ»ä½•åº¦ã‹é “挫ã—ã¦ã„ã‚‹ã®ã§ã€ä»Šå›žã‚‚ã©ã“ã¾ã§ã§ãã‚‹ã‹ã¯ï¼Ÿã§ã™ãŒã€‚
å°†æ¥çš„ã«ã¯ C++ & Perl (ã®ã†ã¡ã€ä»•äº‹&趣味ã§ä½¿ç”¨ã™ã‚‹ç¯„囲ã®ã‚µãƒ–セット)
ã‚’ Alan ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã¨ã„ã„ã‹ãªã€
ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
(2006/05) 仕事㧠Ruby を使ã„始ã‚ã¾ã—ãŸã€‚
Ruby を最åˆã«çŸ¥ã£ã¦ã„れ㰠Perl を使ã‚ãªã‹ã£ãŸã‹ã‚‚ã—ã‚Œã¾ã›ã‚“(^^;)。
言語ã¨ã—ã¦ã¯ Ruby ã®æ–¹ãŒ Perl より好ãã§ã™ã€‚
ライブラリã¨ãƒ‰ã‚ュメントã«é–¢ã—ã¦ã¯ perl
ã«ã‚ã¨ä¸€æ©åŠã°ãªã„よã†ã§ã‚‚ã‚ã‚Šã¾ã™ã€‚
(2007/08) ...ãªã©ã¨æ˜¨å¹´æ›¸ã„ã¦ã—ã¾ã„ã¾ã—ãŸãŒã€Rails を使ã£ã¦è€ƒãˆãŒ
変ã‚ã‚Šã¾ã—ãŸã€‚Rails 本(AWDwR) 㨠Rails API サイトã§ã€ã‚„ã‚ŠãŸã„ã“ã¨ãŒ
大体出æ¥ã¦ã—ã¾ã„ã¾ã™ã€‚é©šãï¼
åå‰ã®ç”±æ¥
åå‰ "Alan" ã¯ã€å˜ã« "A language",
"Another language" ãらã„ã®æ„味ã§ã™ã€‚
今インタプリタã€ç›®æ¨™ã‚³ãƒ³ãƒ‘イラ
Alan ã¯ã€Œä»Šã®ã¨ã“ã‚ã€ã‚¤ãƒ³ã‚¿ãƒ—リタã§ã™ã€‚
「今ã®ã¨ã“ã‚ã€ã¨ã„ã†ã®ã¯ã€æœ¬æ¥ã‚³ãƒ³ãƒ‘イラを作ã£ã¦ã¿ãŸã‹ã£ãŸã®ã§ã™ãŒã€
ãƒã‚¤ãƒŠãƒªã®ç”Ÿæˆãªã©é›£ã—ãã†ãªã®ã§ã€ã¨ã‚Šã‚ãˆãšã‚¤ãƒ³ã‚¿ãƒ—リタã«ã—ãŸã€ã¨ã„ã†
安直ãªç†ç”±ã‹ã‚‰ã§ã™ã€‚
é™çš„型言語
C++(åž‹ã‚ã‚Š)ã¨Perl(åž‹ãªã—)ã®ä¸¡æ–¹ã‚’経験ã—ã¾ã—ãŸãŒã€å€‹äººçš„ã«ã¯åž‹ãŒ
ã‚ã£ãŸæ–¹ãŒã‚ˆã„ã¨æ€ã£ã¦ã„ã¾ã™ã€‚ãªã®ã§ã€Alan ã‚‚åž‹ã‚り言語ã¨ã—ã¾ã™
(ã¨ã„ã†ã‹ã€å‹•çš„型言語や型ãªã—言語を使ã†ãªã‚‰ Ruby ã‚„ Perl ãŒæ—¢ã«ã‚ã‚‹ã§ã¯ãªã„ã‹)。
åž‹ã«é–¢ã™ã‚‹ç§è¦‹ã‚’
「Technical Documentã€ã®
「è¨è¨ˆæ–¹é‡ã€ã®ç« ã®
「型ã«ã¤ã„ã¦ã€ã®ç¯€
ã«æ›¸ã„ã¦ã„ã¾ã™ã€‚
例外処ç†
例外処ç†ã®åœ¨ã‚‹ç„¡ã—ã¯ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«å¤§ãã影響ã™ã‚‹ã®ã¨ã€
気軽ã«ä¾‹å¤–処ç†ã‚’使用ã§ãる言語ãŒæ¬²ã—ã‹ã£ãŸã€ã¨ã„ã†ç†ç”±ã‹ã‚‰ã€
例外処ç†ã¯æ—©ã„ã†ã¡ã‹ã‚‰ã‚µãƒãƒ¼ãƒˆã—ãŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
ç¾æ™‚点ã§ã¯ã¾ã 制約ãŒå¤šã„ã§ã™ãŒã€éª¨çµ„ã¿éƒ¨åˆ†ã¯å®Ÿè£…ã§ãã¾ã—ãŸã€‚
ã¯ã˜ã‚ã®ä¸€æ©
Alan ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒã¾ã ã®å ´åˆã¯
ãã¡ã‚‰ã‚’å…ˆã«è¡Œã£ã¦ãã ã•ã„。
ã“ã“ã‹ã‚‰ã¯ã€ç°¡å˜ãªå…¥é–€ç·¨ã¨ã—㦠Alan ã®éŠã³æ–¹ã«ã¤ã„ã¦è¿°ã¹ã¾ã™ã€‚
- Alan スクリプトを入力ã—ã¦ã¿ã¾ã—ょã†
$ alan
put("Hi")
Ctrl-D
ãªãŠã€ä¸Šã® Ctrl-D ã¯ã€Unixç³»ã§ã®
入力ã®çµ‚りを示㙠Control-D ã§ã™ã€‚
ã“ã®ä¾‹ã¯ "Hi" ã¨å°å—ã™ã‚‹ Alan スクリプトã§ã™ã€‚
- çµæžœã¯ã“ã®ã‚ˆã†ã«ãªã‚Šã¾ã™:
$ alan
put("Hi")
Hi
$
"Hi" ã¨è¡¨ç¤ºã•ã‚ŒãŸã§ã—ょã†ã‹ï¼ŸãªãŠã€æœ€å¾Œã® $ ã¯ãƒ—ãƒãƒ³ãƒ—トã§ã™ã€‚
- alan ãŒå®Ÿè¡Œã§ãã‚‹ã“ã¨ã‚’確èªã§ããŸã‚‰ã€æ¬¡ã«ã€é©å½“ãªã‚¨ãƒ‡ã‚£ã‚¿
(vi, emacs, ãªã©)ã§ä¸‹ã®ã‚ˆã†ãª alan プãƒã‚°ãƒ©ãƒ を書ãã€é©å½“ãª
ファイルåã§ä¿å˜ã—ã¾ã™ã€‚ã“ã“ã§ã¯ tst.al ã¨ã—ã¾ã™:
put("Hello, World!\n")
次ã„ã§ã€
$ alan tst.al
ã¨ã—ã¦ã€ç”»é¢ã«
$ alan tst.al
Hello, World!
$
ã¨è¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€æˆåŠŸã§ã™ï¼
1行ã®ç°¡å˜ãª alan プãƒã‚°ãƒ©ãƒ ã§ã™ãŒã€æ£ã—ã実行ã•ã‚Œ
終了ã—ã¾ã—ãŸã€‚
ã‚ã¨ã¯æ¬¡ç« "例" 以é™ã‚’ã”覧ã«ãªã£ã¦ã¿ã¦ä¸‹ã•ã„。
- エラーã¨ãªã£ãŸå ´åˆã€‚
ã‚‚ã—
$ alan tst.al
cannot open tst.al
ã¨ã§ã‚‚出ãŸã‚‰ã€ãƒ•ã‚¡ã‚¤ãƒ«åã®æŒ‡å®šãƒŸã‚¹ã§ã™ã€‚
ファイル(ã“ã“ã®ä¾‹ã§ã¯ tst.al)ãŒå˜åœ¨ã™ã‚‹ã‹ã€
ファイルåã®ã‚¿ã‚¤ãƒ—ミスã‹ã€ç¢ºèªã—ã¦ã¿ã¦ãã ã•ã„。
ã‚‚ã—
$ alan tst.al
error: syntax error
0001 put("Hello, World!\n"
^
ã¨ãªã£ãŸå ´åˆã€æ–‡æ³•ã‚¨ãƒ©ãƒ¼ã§ã™ã€‚最åˆã® 0001 ã¯ãƒ•ã‚¡ã‚¤ãƒ« tst.al
ä¸ã®è¡Œç•ªå·ã‚’表ã—ã¦ã„ã¾ã™ã€‚ã¾ãŸã€ä¸ŠçŸ¢å°(åˆã¯ãƒãƒƒãƒˆ(^))ã§ç¤ºã—ãŸ
個所ãŒã‚¨ãƒ©ãƒ¼ã®ç™ºç”Ÿã—ãŸå ´æ‰€ã‚’指ã—ã¦ã„ã¾ã™ã€‚
上ã®ä¾‹ã§ã¯ã€æœ€å¾Œã®é–‰ã˜æ‹¬å¼§ã§ syntax error(文法エラー)
ã¨ãªã£ã¦ã„ã¾ã™ã。詳ã—ãã¯æ¬¡ç« 以é™ã§èª¬æ˜Žã—ã¾ã™ãŒã€ã“ã®å ´åˆã¯
é–‰ã˜æ‹¬å¼§ãŒæŠœã‘ã¦ã„ã¾ã™ã€‚
エラーã¯æ§˜ã€…ãªã‚‚ã®ãŒç™ºç”Ÿã—ã†ã‚‹ã®ã§å…¨ã¦ã®ã‚±ãƒ¼ã‚¹ã‚’ã“ã“ã§
示ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“ãŒã€ä»–ã«ç™ºç”Ÿã—ã†ã‚‹å…¸åž‹çš„ãªã‚±ãƒ¼ã‚¹ã‚’
ã‚ã¨ï¼’ã¤è¼‰ã›ã¾ã™:
$ alan tst.al
error: undefined ID(pt)
0001 pt("Hello, World!\n")
^
↑ã“ã‚Œã¯ã€ã€Œptãªã‚“ã¦è˜åˆ¥å(ID; Identifier)ã¯ãªã„よã€ã¨è¨€ã£ã¦ã„ã¾ã™ã€‚
å°å—関数 put ã®ã‚¹ãƒšãƒ«ãƒŸã‚¹ã§ã™ã。
$ alan tst.al
error: string literal is ending without closing by double-quotation(")
0001 put("Hello, World!\n);
^
↑ã“ã‚Œã¯ã€ã€Œæ–‡å—列ãŒè¡Œã®çµ‚ã‚Šã§é–‰ã˜ã¦ãªã„ã§ã™ã‚ˆã€
今ã®ã¨ã“ã‚ケアレスミスを防ã目的ã§ã€è¤‡æ•°è¡Œã«æ¸¡ã‚‹æ–‡å—列ã¯
許ã—ã¦ã„ã¾ã›ã‚“(ã“ã‚Œã§ã¯ã¾ã£ãŸè¨˜æ†¶ãŒã‚ã‚‹)。
例
- 例1 "Hello, World"
- 例2 シンプル㪠grep
- 例3 関数呼ã³å‡ºã—
- ãã®ä»–ã®ã‚µãƒ³ãƒ—ル
例1 å°å—
ãŠãã¾ã‚Šã§ã™ãŒã€Hello,World! ã‚’å°å—ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ï¼š
put("Hello, World!\n")
ã§ã™ã€‚ãŸã£ãŸä¸€è¡Œã§ã™ãŒã€ä¸‹è¨˜ã®ã‚ˆã†ãª Alan ã®ä»•æ§˜ãŒåˆ†ã‹ã‚‹ã‹ã¨æ€ã„ã¾ã™:
- å°å—㯠print ã§ã¯ãªã printf ã§ã‚‚ãªã cout ã§ã‚‚ãªã put
ã¨ã—ã¾ã—ãŸ(*1)。
- putã¨ã„ã†æ‰‹ç¶šãã« Hello,World æ–‡å—列をパラメータã¨ã—ã¦æ¸¡ã—ã¦ã„ã‚‹ã®ã§ã™ãŒã€
パラメータã«ã¯æ‹¬å¼§ãŒå¿…è¦ã¨ã„ã†ã“ã¨
(ãŸã ã—ã€ãƒ‘ラメータãŒãªã„å ´åˆã¯æ‹¬å¼§ãŒçœç•¥ã§ãã¾ã™)
(*2)。
- æ–‡å—列㯠double-quote ã§å›²ã„ã¾ã™ã€‚
- 改行ã¯æ–‡å—列ä¸ã® \n ã§è¡Œã„ã¾ã™ï¼ˆC/Perlç³»ã§ã™ã)。
- æ–‡ã®æœ€å¾Œã«ã‚»ãƒŸã‚³ãƒãƒ³ã¯ã‚ã‚Šã¾ã›ã‚“。
v0.14 ã¾ã§ã¯ C/C++ ã¨åŒæ§˜ã‚»ãƒŸã‚³ãƒãƒ³ã§çµ‚端ã—ã¦ã„ã¾ã—ãŸãŒã€
v0.15 ã§æ–‡ã¨å¼ã®åŒºåˆ¥ã‚’ãªãã—ãŸçµæžœã€ã‚»ãƒŸã‚³ãƒãƒ³ã ã¨éƒ½åˆãŒæ‚ªã„ã“ã¨ã«
気付ãã€ã‚»ãƒŸã‚³ãƒãƒ³ã‚’廃æ¢ã—ã¦ã¿ã¾ã—ãŸã€‚
言語仕様ã®ãƒ‡ã‚¶ã‚¤ãƒ³ã®é¡›æœ«ã¯
リリースノート ã‚’ã”覧下ã•ã„。
例2 シンプル㪠grep
Alan Ver0.09以é™ã§ãƒ•ã‚¡ã‚¤ãƒ«åž‹(file)ã¨æ£å‰‡è¡¨ç¾åž‹(rex)ã‚’å‚™ãˆã¦ã„ã¾ã™
(言語仕様/データ型
å‚照)。
grep ã¨åŒç‰ã®æ©Ÿèƒ½ã® Alan スクリプトã¯ä¸‹è¨˜ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ï¼š
for str:s in stdins do
if s in /[Hh]ello/ then
put(s)
end
end
ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€stdins(Perl ã® <> ã«ç›¸å½“)ã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚’èªã¿ã€
æ–‡å—列 hello åˆã¯ Hello ã«ãƒžãƒƒãƒã™ã‚‹è¡Œã‚’å°å—ã—ã¾ã™ã€‚
å„行を解説ã—ã¾ã™ï¼š
- 1行目: コメント㯠# ã‹ã‚‰è¡Œã®çµ‚ã‚Šã¾ã§ã§ã™ã€‚スクリプト系ã®å®šç•ªã§ã™ã。
- 3行目: ç¹°ã‚Šè¿”ã—ã‚’è¡Œã†æ–‡ã¨ã—㦠for...do...end 文を使用ã—ã¦ã„ã¾ã™ã€‚
foræ–‡ã¯ã€å復åを使ã£ãŸç¹°ã‚Šè¿”ã—ã«ä½¿ç”¨ã—ã¾ã™ã€‚
- 3行目: æ–‡å—列型 str ã®å¤‰æ•° s を宣言ã—ã¦ã„ã¾ã™ã€‚ç¹°ã‚Šè¿”ã—ã®è£œåŠ©å¤‰æ•°ã§ã™ã€‚
変数宣言ã¯
str : s
ã¤ã¾ã‚Š
åž‹ : 変数å
ã§ã™ã€‚
(*3)。
- 3行目: stdins ã¯ã€ã‚³ãƒžãƒ³ãƒ‰è¡Œã§æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ã€‚
Perl ã® <> ã«ç›¸å½“ã—ã¾ã™ã€‚
以下ã®æ€§è³ªã‚’æŒã¡ã¾ã™ã€‚
- コマンド行ã§ãƒ•ã‚¡ã‚¤ãƒ«åãŒæŒ‡å®šã•ã‚Œã¦ã„ã‚Œã°ã€ãã‚Œã‚’é †ç•ªã«
1行ã¥ã¤èªã¿è¾¼ã‚“ã§ã„ãファイルå復åã§ã™ã€‚
- コマンド行ã§æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«åãŒè¤‡æ•°ã§ã‚ã‚Œã°ã€
é †ç•ªã«ã‚ªãƒ¼ãƒ—ンã—㦠1. ã¨åŒæ§˜ã«èªã¿è¾¼ã‚“ã§ã„ãã¾ã™ã€‚
- コマンド行ã«ä½•ã‚‚指定ãŒãªã‘ã‚Œã°æ¨™æº–入力(stdin)ã‹ã‚‰ï¼‘è¡Œã¥ã¤
èªã¿è¾¼ã¿ã¾ã™ã€‚
stdins ã¯å復å(Iteratorã€ã‚¤ã‚¿ãƒ¬ãƒ¼ã‚¿ã€åˆã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã€‚Alan ã§ã¯å復å
ã¨å‘¼ã¶ã“ã¨ã«ã—ã¾ã™ï¼‰ã§ã™ã€‚
ç§ã®çŸ¥ã£ã¦ã„る範囲ã®è¨€èªž(C, Perl ãªã©)ã§ã¯ã€æ¨™æº–入力をèªã‚“ã§ä½•ã‚‰ã‹ã®
処ç†ã‚’ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ã¯å¤§æŠµ while get ... ã¨ã„ã†å½¢ã ã£ãŸã¨æ€ã„ã¾ã™ãŒã€
Alan ã§ã¯åˆ—処ç†ã¯å…¨ã¦å復åを通ã˜ã¦è¡Œã„ã¾ã™ã€‚
ファイルã¨ã¯ã€Œæ–‡å—ã®åˆ—ã€ã§ã‚ã‚Šã€Alan ã® fileåž‹ã¨ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®å復å
ã§ã™ã€‚
(C/C++ ã® FILEåž‹ã‚‚ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…部表ç¾ã¨ã„ã†ã‚ˆã‚Šã¯ã€
「ファイルã®å復åã€ã¨è¨€ã£ãŸæ–¹ãŒã‚ˆã‚Šæ£ç¢ºã ã¨æ€ã„ã¾ã™)
- 4行目: foræ–‡ã®ä¸ã® if æ–‡ã«ã¤ã„ã¦ã‚‚ã€æ—¢ã« Perl, awk, Ruby を知ã£ã¦ã„ã‚‹
æ–¹ãªã‚‰èª¬æ˜Žã¯ä¸è¦ã‹ã¨æ€ã„ã¾ã™ãŒã€ã¾ã ã®æ–¹ã®ãŸã‚ã«èª¬æ˜Žã—ã¾ã™ã€‚
/パターン/
ã¯ã€æ£å‰‡è¡¨ç¾ã‚’表ã—ã¾ã™ã€‚
検索パターンã®ã‚ˆã†ãªã‚‚ã®ã§ã™ãŒã€è©³ã—ãã¯ã“ã“ã§ã¯ç•¥ã—ã¾ã™ã€‚æ–‡ä¸ã®
/[Hh]ello/
ã¯ã€hello åˆã¯ Hello ã®ä¸¡æ–¹ã®æ¤œç´¢ãƒ‘ターンをã¾ã¨ã‚ãŸã‚‚ã®ã§ã™ã€‚
ifæ–‡ã®æ¡ä»¶å¼ï¼š
s in /パターン/
ã¯ã€ãƒ‘ターンマッãƒå¼ã§ã™ã€‚Perl ã® $s =~ /パターン/ ã¨åŒã˜ã§ã™ã€‚
æ–‡å—列 s ã®å€¤ãŒãƒ‘ターンã«ãƒžãƒƒãƒã—ã¦ã„れ㰠true ã‚’ã€ãã†ã§ãªã‘ã‚Œã°
false ã‚’è¿”ã™ã€æ¯”較å¼ã§ã™ã€‚
パターンマッãƒå¼ã®æ¼”ç®—åãŒãªãœ "in" ãªã®ã‹ã¨ã„ã†ã¨ã€ä¸Šã®å¼ã¯
「文å—列 s ãŒã€ãƒ‘ターンã§è¡¨ç¾ã§ãã‚‹æ–‡å—列集åˆã«
属ã™ã‚‹(= in)ã‹å¦ã‹ã€
ã¨ã„ã†é›†åˆå¼ã§ç†è§£ã™ã‚‹ã¨ç´å¾—ã§ãã‚‹ã‹ã¨æ€ã„ã¾ã™
(ãŸã—㋠言語 CLU ãŒãã†ã ã£ãŸã‚ˆã†ãªã‚ã„ã¾ã„ãªè¨˜æ†¶ãŒã‚ã‚Šã¾ã™)。
- 5行目: if文㯠s ãŒãƒ‘ターンã«ãƒžãƒƒãƒã—ã¦ã„れ㰠put(s) を実行ã—ã¾ã™ã€‚
- 以上ã€foræ–‡ã®éƒ¨åˆ†ã‚’ã¾ã¨ã‚ã‚‹ã¨ã€
for str:s in stdins do
:
end
ã¯ã€ã€Œæ¨™æº–入力ã‹ã‚‰ï¼‘è¡Œãšã¤èªã¿ã€æ–‡å—列変数 s ã«å…¥ã‚Œã€æ¨™æº–入力
ã®æœ€å¾Œã¾ã§ç¹°ã‚Šè¿”ã™ã€ã¨ã„ã†æ„味ã§ã™ã€‚
例3 関数呼ã³å‡ºã—
1ã‹ã‚‰nã¾ã§ã®å€¤ã‚’足ã™ã€Œç‰å·®ç´šæ•°ã®å’Œã€ã‚’処ç†ã™ã‚‹é–¢æ•°ã®ä¾‹ã§ã™ã€‚
å…¬å¼ã‚’使用ã™ã‚Œã°ä¸€ç™ºã§ç”ãˆã¯ã§ã¾ã™ãŒã€ã“ã“ã§ã¯å†å¸°å‘¼ã³å‡ºã—ã§
実装ã—ã¦ã„ã¾ã™ã€‚
# 'sum' function
int:sum(int:n)
if n==1 then
1
else
n + sum(n-1)
end
end
# Main
put(sum(10))
- 関数定義ã®æ–‡æ³•ã¯
戻り型 : 関数å(引数宣言) ... end
ã§ã™
(*4)。
- 関数ã®æˆ»å€¤ã¯é–¢æ•°ã®æœ€å¾Œã®å¼ã®å€¤ã§ã™ã€‚
returnã§é€”ä¸ã‹ã‚‰é–¢æ•°ã‚’抜ã‘ã‚‹å ´åˆã€return ã®ç›´å‰ã®å¼ãŒ
関数ã®æˆ»å€¤ã¨ãªã‚Šã¾ã™
(C/C++ ç‰ã® return å¼; ã¨ã„ã†è¨˜è¿°ã¯ã§ãã¾ã›ã‚“ã®ã§ã”注æ„下ã•ã„
(*5)
)。
ãã®ä»–ã®ã‚µãƒ³ãƒ—ル
ãã®ä»–ã€ãƒ†ã‚¹ãƒˆçš„ã«ä½œæˆã—ãŸã‚µãƒ³ãƒ—ルãŒ
sample/
ã«ã‚ã‚Šã¾ã™ã®ã§ã€ã”å‚考ã¾ã§ã«ã€‚
以下ã¯ã€ä¸€ä¾‹ã§ã™:
ラピュタã®å‘ªæ–‡
天空ã®åŸŽãƒ©ãƒ”ュタã¯ä»Šã§ã‚‚ç§ã®å¥½ããªæ˜ ç”»ã®1ã¤ã§ã™ã€‚
æ˜ ç”»ã®æœ€å¾Œã®æ–¹ã§ã€ã‚·ãƒ¼ã‚¿ã¯ç¥–国ラピュタをæ¨ã¦ãƒ‘ズーã¨å…±ã«
大地ã«é™ã‚Šã¦ç”Ÿãã¦è¡Œãã“ã¨ã‚’é¸ã‚“ã ã®ã§ã—ãŸã€‚
ãã®ã¨ãã€ã‚·ãƒ¼ã‚¿ãŒè¬Žã®å‘ªæ–‡ã‚’å”±ãˆã¦ãƒ©ãƒ”ュタを崩壊ã•ã›ãŸã‚·ãƒ¼ãƒ³ã¯å°è±¡çš„ã§ã™ã€‚
「ãƒãƒ«ã‚¹ï¼ã€
ã“ã®å‘ªæ–‡ãã®ã‚‚ã®ã«ãƒ©ãƒ”ュタを崩壊ã•ã›ã‚‹åŠ›ãŒã‚ã£ãŸã®ã§ã—ょã†ã‹ï¼Ÿ
多分ã€ãã†ã§ã¯ãªã„ã§ã—ょã†ã€‚呪文をスイッãƒã¨ã—ã¦ã€
ã‚らã‹ã˜ã‚ラピュタã«ä»•çµ„ã‚“ã§ã‚ã£ãŸè‡ªå·±å´©å£Šã®ãŸã‚ã®æ©Ÿæ§‹ãŒä½œå‹•ã—ãŸã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
ã²ã¨ã¤ã®è¨€è‘‰ã‚’ãã£ã‹ã‘ã«ã€ã‚らã‹ã˜ã‚仕組んã§ã‚ã£ãŸæ©Ÿæ§‹ãŒåƒã出ã™...。
ãã†ã€ã“ã‚Œã¯ã¾ã•ã—ãプãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®ä¸–ç•Œã§ã™ã€‚
「ãƒãƒ«ã‚¹ã€ã«ç›¸å½“ã™ã‚‹ã‚‚ã®ã‚’ Unix/Linux ã§è¨€ãˆã°ã€"sudo rm -r /"
ã§ã—ょã†ã‹ã€‚「スゥドゥー アールエムマイナスアール スラッシュã€
...怪ã—ã„呪文ã§ã™ã。良ã„åã®çš†ã•ã‚“ã¯æ±ºã—ã¦çœŸä¼¼ã—ãªã„ã§ãã ã•ã„(^^;)。
プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã‚’レゴã«ä¾‹ãˆã‚‹ã¨ã€ç„¡é™ã®ãƒ–ãƒãƒƒã‚¯ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
ブãƒãƒƒã‚¯ãŒè¶³ã‚Šãªããªã£ã¦ã¤ã¾ã‚‰ãªã„æ€ã„ã‚’ã™ã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。
ãƒ¬ãƒ¼ãƒ«ã‚„é›»æ± ãƒ»ãƒ¢ãƒ¼ã‚¿ã¾ã§ã¤ã„ã¦ãã¾ã™^^。
部屋ã„ã£ã±ã„ã®åŸŽã‚„町やãƒãƒœãƒƒãƒˆã‚„車ãªã©ã€å¥½ããªã‚ˆã†ã«æ§‹ç¯‰ã§ãã¾ã™ã€‚
ãã—ã¦ã€ãã“ã«å¥½ããªå‘ªæ–‡ã‚’与ãˆã‚‹ã“ã¨ã§ã€å¥½ããªã‚ˆã†ã«å‹•ã‹ã™ã“ã¨ãŒã§ãã‚‹ã®ã§ã™ã€‚
Alan ã‚‚ãã†ã‚„ã£ã¦ä½œã£ã¦ã¿ãŸã€å‘ªæ–‡ã‚’å”±ãˆã‚‹ãŸã‚ã®å‘ªæ–‡ã€ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
用語
Alan ã§ã¯åŸºæœ¬çš„ã« C/C++ ã®ç”¨èªžã‚’使用ã—ã¾ã™ã€‚
- フリー関数
- クラスã«å±žã•ãªã„関数。C言語㮠sin(3), printf(3)ãªã©ã€‚
→メンãƒé–¢æ•°
- メンãƒé–¢æ•°
- クラスã«å±žã™ã‚‹é–¢æ•°ã€‚他言語ã§è¨€ã†ãƒ¡ã‚½ãƒƒãƒ‰ãƒ»feature。
→フリー関数
補足
「ユーザズ・ドã‚ュメントã€ã¨ã„ã†è¦³ç‚¹ã‹ã‚‰ã¯æœ¬è³ªçš„ãªå†…容ã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€
Wells ã®ä¸»è¦³ãªã©ã‚’ã“ã“ã§ã‚³ãƒ¡ãƒ³ãƒˆã•ã›ã¦ã„ãŸã ãã¾ã™ã€‚
(*1)
å°å— = putæ–‡
ã¾ã‚ã€åå‰ã®é•ã„ã¯æœ¬è³ªçš„ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
マイナー言語 Turing
ã®å½±éŸ¿ã‚’å—ã‘ãŸã¨ã“ã‚ã§ã¯ã‚ã‚Šã¾ã™ã€‚
(*2)
変数定義文法ã¨æ‰‹ç¶šã呼出ã—
Fortran/C/Algol68 ç³»ã®å¤‰æ•°å®šç¾©(宣言) "type var" を採用ã—ãŸçµæžœã€
手続ã呼出ã—を括弧無㗠"proc parm" ã¨ã™ã‚‹ã¨æ–‡æ³•ã¨ã—ã¦çŸ›ç›¾ã—ã¦ã—ã¾ã£ãŸã€
ã¨ã„ã†ã¨ã“ã‚ã§ã™ã€‚Pascalç³»ã®æ‰‹ç¶šããŒæ‹¬å¼§ç„¡ã—ãªã®ã¯ä»–ã®æ–‡æ³•è¦å‰‡ã¨
矛盾ã—ã¦ãªã„ãŸã‚ã§ã™ã€‚ã“ã‚“ãªã¨ã“ã‚ã«ã€ãªãœ C ã®æ‰‹ç¶šãã§æ‹¬å¼§ãŒã„ã‚‹ã®ã‹ã®
ç†ç”±ãŒã‚るよã†ã§ã™ã€‚複雑ãªãƒã‚¸ãƒƒã‚¯(å—å¥è§£æžã«å—å¥æƒ…å ±ã‚’ feedback ã™ã‚‹ãªã©)
ã‚’å°Žå…¥ã™ã‚Œã°å›žé¿ã§ãã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ãŒã€ãã“ã¾ã§ã¯ã—ã¾ã›ã‚“ã§ã—ãŸã€‚
(*3)
変数宣言ã®æ–‡æ³•
変ã§ã™ã‹ï¼Ÿå¤‰ã§ã™ã‚ˆã。C/C++ çš„ã§ã‚‚ãªã‘れ㰠Pascalçš„ã§ã‚‚ãªã„。
ãŒã€è¦ã¯æ…£ã‚Œã§ã™ã€æ…£ã‚Œ(やや苦ã—ã„言ã„訳)。
(*4)
関数定義
(v0.15) begin ã‚’çœãã¾ã—ãŸã€‚
Cç³»ã¨Pascalç³»ã®ãƒ–æ ¼å¥½ãªçµ„ã¿åˆã‚ã›ã®ã‚ˆã†ã§ã€
ç§è‡ªèº«ã€ã‚ã¾ã‚Šå¥½ãã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€
ä»–ã®æ¡ˆã‚‚æ€ã„ã¤ã‹ãªã„ã®ã§ã¨ã‚Šã‚ãˆãšã“ã®ã¾ã¾é€²ã‚ã¾ã™ã€‚
(*5)
returnæ–‡
当åˆã€Eiffelã® result 構文を採用ã—ã¦ã„ãŸã®ã§ã™ãŒã€
æ„外ã«ä½¿ã„ã«ãã„。resultæ–‡ã¯ã€ã€Œå…¥ã‚Šå£ï¼‘ã¤ãƒ»å‡ºå£ï¼‘ã¤ã€ã®åŽŸå‰‡
ã¨å¯†æŽ¥ã«ã¤ãªãŒã£ã¦ã„ã¾ã™ã€‚
ãŒã€ã“ã®åŽŸå‰‡è‡ªèº«ãŒã€è¨€èªžã®å½¢å¼çš„æ„味論をより簡å˜ã«ã™ã‚‹ãŸã‚ã®
ã‚‚ã®ã§ã™ã€‚
ä»–æ–¹ã€returnæ–‡ã¯ã€Œã“れ以é™ã¯å‡¦ç†ã‚’ä¸æ–ã—ã¦é–¢æ•°ã‚’抜ã‘ã¦æ¬²ã—ã„ã€
ã¨è€ƒãˆã‚‹äººé–“ã®æ€è€ƒã®æ€§è³ªã‚’表ç¾ã—ãŸã‚‚ã®ã§ã‚ã‚‹ãŸã‚ã€
「入りå£ï¼‘ã¤ãƒ»å‡ºå£ï¼‘ã¤ã€ã®åŽŸå‰‡ã¨ã¯æ°´ã¨æ²¹ã¿ãŸã„ã§ã™ã。
çµå±€ã€å¾Œè€… returnæ–‡ を採用ã—ã¾ã—ãŸã€‚
(*6) loopæ–‡
Turing言語ã‹ã‚‰ã®æ‹å€Ÿã§ã™ã€‚
(*7) 関数ã®å…¥ã‚Œå
C ã«ç¿’ã£ã¦ã€Alan ã§ã‚‚関数ã®ãƒã‚¹ãƒˆã¯å®Ÿè£…ã—ã¦ã„ã¾ã›ã‚“。
関数ã®ãƒã‚¹ãƒˆã‚’廃æ¢ã—ãŸã®ã¯ã€C ã®å¤§ããªåŠŸç¸¾ã ã¨ç§ã¯æ€ã£ã¦ã„ã¾ã™ã€‚
ã“ã®ãŠã‹ã’ã§ã€ã‚³ãƒ³ãƒ‘イラãŒå˜ç´”ã«ãªã‚Šã€ã¾ãŸç”Ÿæˆã•ã‚Œã‚‹ã‚³ãƒ¼ãƒ‰ã‚‚
å˜ç´”ã«ãªã‚‹ã ã‘ã§ãªãã€å®Ÿç”¨æ€§ã¯ã‚ã¾ã‚Šå¤±ã‚ã‚Œã¦ã„ã¾ã›ã‚“。
å…¨ã¦ã‚’直交的ã«ã™ã‚‹å¿…è¦ã¯ãªã„ã€ã¨ã„ã†ã“ã¨ã ã¨ç§ã¯ç†è§£ã—ã¦ã„ã¾ã™ã€‚
ç§ã¯ã€Pascal(関数ã®å…¥ã‚Œåをサãƒãƒ¼ãƒˆã—ã¦ã„る)ã§å°‘々ã¨
C/C++ ã§å¤šãã®ãƒ—ãƒã‚°ãƒ©ãƒ を組ã¿ã¾ã—ãŸãŒã€ãã®çµŒé¨“上ã€
C/C++ã§ã€Œé–¢æ•°ã®å…¥ã‚ŒåãŒã‚ã£ãŸã‚‰ãªã‚ã€ã¨æ€ã£ãŸã“ã¨ã¯
ã»ã¨ã‚“ã©ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ã¾ãŸã€ã‚ã£ã¦ã‚‚ã€ã™ãã«
ä»–ã®è§£æ±ºæ–¹æ³•ãŒã™ãã«è¦‹ã¤ã‹ã£ãŸã‚‚ã®ã§ã™ã€‚
ãã†ã„ã†ã‚ã‘ã§ã€Alan ã§ã‚‚「å¯èƒ½ãªé™ã‚Šå˜ç´”ã«ã€ã®åŽŸå‰‡ã«ä¹—ã£å–ã‚Šã€
関数ã®å…¥ã‚Œåã¯æŽ¡ç”¨ã—ãªã„ã“ã¨ã«ã—ã¾ã—ãŸã€‚
(*8) 関数引数ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã€Œèªã¿å‡ºã—専用å‚照渡ã—ã€
ã“れも Turing言語ã‹ã‚‰ã®æ‹å€Ÿã§ã™ã€‚
C++ ã§è¨€ã†ã¨ã“ã‚ã® "const type &var" をデフォルトã¨ã—ã¦ã„ã‚‹ã€
ã¨ã„ã†ã“ã¨ã§ã™ã€‚
ã¾ãšã€å‚照渡ã—ã‚’ default ã¨ã—ãŸã®ã¯ã€ã‚µã‚¤ã‚ºã®å¤§ãã„変数(オブジェクト)
を関数ã«æ¸¡ã™ã‚±ãƒ¼ã‚¹ãŒå¢—ãˆã¦ããŸã“ã¨ã¸ã®å¯¾å‡¦ã§ã™ã€‚
次ã«ã€readonly ã‚’ default ã¨ã—ãŸã®ã¯ã€å‘¼å‡ºã—å´ã§ã€å¼•æ•°ãŒ
関数ã®ä¸ã§å¤‰æ›´ã•ã‚Œãªã„ã“ã¨ã‚’明示ã—ãŸã„ãŸã‚ã§ã™ã€‚
全体
å¦ç¿’・アプリ開発・アプリä¿å®ˆã€ã®åˆè¨ˆã¨ã„ã†è¦³ç‚¹ã§ã‚³ã‚¹ãƒˆã‚’下ã’ãŸã„ã€
ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚ã¾ã‚ã€ç§ã®è¦‹ç©ã‚‚りミスもã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ã®ã§ã€
ãã®éš›ã¯ã‚³ãƒ¡ãƒ³ãƒˆé ‚ã‘ã‚Œã°å¹¸ã„ã§ã™ã€‚
//以上
Top / Alan ã¸ã®èª˜(ã„ã–ãª)ã„
Alan ver0.31