プログラミング言語/Grass
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*Grass [#v6c37ba3]
#contents
*Grass is a grass-planting programming language. [#c1f9ef...
Grassは「ちょっと草植えときますね型言語」である。Grassが...
wwvwwwWWWwwWwwWWWWwvwWWwwwWwwvwWwwwWwwvwWWwWWWWWwvwWWWww...
WWWWwWWWWWWWwWWWWWWWwWWWWWWWWwWwwwwwwwwvwWWWwwwwwWWWWWwW...
WWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWwwwwwwWWWWWWwWWWWWWwWWWW...
WWWWWWWWWwWwwwwwwwvwWWWWWwwwwwwwWWWWWWWwWWWWWWWWwWWWWWWW...
WWWWWWWWWwWwwwwwwwvwWWWWWWWwwwwwwwwWWWWWWWWwWWWWWWWWWwWW...
WWWWWwWwwwwwwvwWWWWWWWWwwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWW...
WWWWwWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWwwwwwwwwwwWWWWWWWWW...
WWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwvwWWWWWWWWWWwwwwwwwwwwwWW...
WWWWWWwWWWWWWWWWWWWWwWwwwwwvwWWWWWWWWWWwwwwwwwwwwwwWWWWW...
WWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWwW...
WWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwWWWwwwwwwwwwww...
WWWWWWWWWWWWWWWWWwvwWWwwwwWWWwwwwwwwwwwWWWWwwwwwwwwwwWWW...
wWWWWWWwwwwwwwWWWWWWWwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwww...
WWWWWWWWWWwwwwwwwWwwvwWWWWwwwwwwwWWWWWwwwWWWWWWwwwwwwwWW...
WWWWWWWwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwwwwwwwvwWWwWWWWWw
*言語仕様 [#yb41e241]
**はじめに [#k25789b9]
もし「ラムダ計算」や「操作的意味論」という術語になじみが...
**プログラムの構造 [#sea007fe]
Grassのプログラムは、関数定義と関数適用(要するに関数の呼...
まず関数適用から見てみよう。
**関数適用 [#m484d3fd]
関数適用の構文は以下の通り。
WWW...(m個)...WWWwww...(n個)...www (ただしm,nは1以上)
つまり、一個以上のWの後に一個以上のwが続く形をしている。...
正式な構文はこの通りだが、このままでは余りに読み難いので...
さて、App(m, n)の意味は、「m個前に定義された値を、n個前に...
「n個前に定義された値」とはどういうことかというと、それは...
関数適用が書かれると、それに付随して一つの変数が暗黙に定...
例として、次のような関数適用の並びを考える。
WWWWWWWWwwwwwwwWwWww
略記法で書くと、
App(8, 7)
App(1, 1)
App(1, 2)
これは、JavaScriptで言えば次のようなコードに対応する。
var a = ???(???);
var b = a(a);
var c = b(a);
???の部分には前に定義された何らかの変数の名前が入る。
**関数定義 [#w11dab28]
次は関数定義を見よう。構文は以下の通り。
www...(n個)...www 関数適用* (ただしnは1以上、*は0回以...
つまり、wが一個以上続いた後に関数適用が0個以上続いたもの...
最初のwの並びの部分は仮引数の指定に対応している。といって...
これに続く関数適用の並びは関数の本体で、関数が呼ばれたと...
関数適用の場合と同様に、関数定義一つにつき一個の変数が暗...
例として、次の関数定義を考える。
wwwWWWwWWWwwWWw
略記法で書くと、
www
App(3, 1)
App(3, 2)
App(2, 1)
JavaScriptで考えるとこれは次のような定義に対応する。
var g = function(a, b, c) {
var d = a(c);
var e = b(c);
var f = d(e);
return f;
};
**部分適用 [#f18a958f]
既に見たように、Grassでは多引数の関数を定義できる。一方、...
Grassでは、一つの引数だけを渡して多引数関数を呼ぶことがで...
同じことを逆から見ると、Grassには多引数関数は存在しないと...
例として次の関数定義を考える。
www
App(2, 1)
App(4, 1)
カリー化された関数の定義と見なすと、これは以下のJavaScrip...
var f = function(a) {
return function(b) {
return function(c) {
var d = b(c);
var e = a(d);
return e;
};
};
};
**Grassプログラム [#meddee3c]
Grassのプログラムは、おおざっぱに言うと、関数定義と関数適...
プログラム ::= 関数定義 | プログラム v 関数定義 | プログ...
つまり、プログラムが関数適用から始まっていてはいけない。...
プログラム中に直接現れる関数定義と関数適用を、関数定義の...
プログラムは左から順に実行される。トップレベルの関数定義...
簡単なプログラムの例を見てみよう。
wWwvWw
w
App(1, 1)
v
App(1, 1)
これは次のようなJavaScriptプログラムに翻訳できる。
var c = function(a) {
var b = a(a);
return b;
};
var d = c(c);
d(d);
なお、このコードはcの呼び出しの時点で無限ループし、最終行...
意味を考えても分かる通り、関数内で定義された変数をトップ...
逆に、関数定義の中から、それより前のトップレベルの定義を...
ww // d
v
ww // c
App(3, 1)
App(1, 3)
v
ww // b
App(2, 1) // a
App(1, 5) // ☆
v
App(1, 2)
App(1, 4)
☆とコメントされた関数適用の位置から見ると、参照できる変数...
**プリミティブ [#a9f5dd63]
Grassの構文は以上で全てだが、これだけでは入出力ができない...
:In|入力を読む関数。任意の値を引数として受け付け、標準入...
:w|文字「w」(文字コード119)。
:Succ|文字の「次」を返す関数。与えられた文字の文字コード...
:Out|文字を出力する関数。与えられた文字を標準出力に書き出...
OutとSuccに渡す引数は文字でなければならない。文字でない値...
ここでいう「文字」とは、通常の関数と区別される特別な値で...
:T|二つの引数を取り、第一引数を返す。
:F|二つの引数を取り、第二引数を返す。
プリミティブを使ったプログラムの例を見てみよう。次に示す...
w
App(3, 4)
App(3, 1)
**字句構造 [#pd8598a4]
Grassプログラムで意味のある文字はw、W、vの三つである。全...
Grassプログラムは常にwから始まる。最初のwの前にWやvがあっ...
**終わり [#p9606266]
Grassの言語仕様は多分これで全部である。あとは頑張って草を...
*リンク [#m0750be8]
[[公式:http://www.blue.sky.or.jp/grass/doc_ja.html]]
終了行:
*Grass [#v6c37ba3]
#contents
*Grass is a grass-planting programming language. [#c1f9ef...
Grassは「ちょっと草植えときますね型言語」である。Grassが...
wwvwwwWWWwwWwwWWWWwvwWWwwwWwwvwWwwwWwwvwWWwWWWWWwvwWWWww...
WWWWwWWWWWWWwWWWWWWWwWWWWWWWWwWwwwwwwwwvwWWWwwwwwWWWWWwW...
WWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWwwwwwwWWWWWWwWWWWWWwWWWW...
WWWWWWWWWwWwwwwwwwvwWWWWWwwwwwwwWWWWWWWwWWWWWWWWwWWWWWWW...
WWWWWWWWWwWwwwwwwwvwWWWWWWWwwwwwwwwWWWWWWWWwWWWWWWWWWwWW...
WWWWWwWwwwwwwvwWWWWWWWWwwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWW...
WWWWwWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWwwwwwwwwwwWWWWWWWWW...
WWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwvwWWWWWWWWWWwwwwwwwwwwwWW...
WWWWWWwWWWWWWWWWWWWWwWwwwwwvwWWWWWWWWWWwwwwwwwwwwwwWWWWW...
WWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWwW...
WWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwWWWwwwwwwwwwww...
WWWWWWWWWWWWWWWWWwvwWWwwwwWWWwwwwwwwwwwWWWWwwwwwwwwwwWWW...
wWWWWWWwwwwwwwWWWWWWWwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwww...
WWWWWWWWWWwwwwwwwWwwvwWWWWwwwwwwwWWWWWwwwWWWWWWwwwwwwwWW...
WWWWWWWwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwwwwwwwvwWWwWWWWWw
*言語仕様 [#yb41e241]
**はじめに [#k25789b9]
もし「ラムダ計算」や「操作的意味論」という術語になじみが...
**プログラムの構造 [#sea007fe]
Grassのプログラムは、関数定義と関数適用(要するに関数の呼...
まず関数適用から見てみよう。
**関数適用 [#m484d3fd]
関数適用の構文は以下の通り。
WWW...(m個)...WWWwww...(n個)...www (ただしm,nは1以上)
つまり、一個以上のWの後に一個以上のwが続く形をしている。...
正式な構文はこの通りだが、このままでは余りに読み難いので...
さて、App(m, n)の意味は、「m個前に定義された値を、n個前に...
「n個前に定義された値」とはどういうことかというと、それは...
関数適用が書かれると、それに付随して一つの変数が暗黙に定...
例として、次のような関数適用の並びを考える。
WWWWWWWWwwwwwwwWwWww
略記法で書くと、
App(8, 7)
App(1, 1)
App(1, 2)
これは、JavaScriptで言えば次のようなコードに対応する。
var a = ???(???);
var b = a(a);
var c = b(a);
???の部分には前に定義された何らかの変数の名前が入る。
**関数定義 [#w11dab28]
次は関数定義を見よう。構文は以下の通り。
www...(n個)...www 関数適用* (ただしnは1以上、*は0回以...
つまり、wが一個以上続いた後に関数適用が0個以上続いたもの...
最初のwの並びの部分は仮引数の指定に対応している。といって...
これに続く関数適用の並びは関数の本体で、関数が呼ばれたと...
関数適用の場合と同様に、関数定義一つにつき一個の変数が暗...
例として、次の関数定義を考える。
wwwWWWwWWWwwWWw
略記法で書くと、
www
App(3, 1)
App(3, 2)
App(2, 1)
JavaScriptで考えるとこれは次のような定義に対応する。
var g = function(a, b, c) {
var d = a(c);
var e = b(c);
var f = d(e);
return f;
};
**部分適用 [#f18a958f]
既に見たように、Grassでは多引数の関数を定義できる。一方、...
Grassでは、一つの引数だけを渡して多引数関数を呼ぶことがで...
同じことを逆から見ると、Grassには多引数関数は存在しないと...
例として次の関数定義を考える。
www
App(2, 1)
App(4, 1)
カリー化された関数の定義と見なすと、これは以下のJavaScrip...
var f = function(a) {
return function(b) {
return function(c) {
var d = b(c);
var e = a(d);
return e;
};
};
};
**Grassプログラム [#meddee3c]
Grassのプログラムは、おおざっぱに言うと、関数定義と関数適...
プログラム ::= 関数定義 | プログラム v 関数定義 | プログ...
つまり、プログラムが関数適用から始まっていてはいけない。...
プログラム中に直接現れる関数定義と関数適用を、関数定義の...
プログラムは左から順に実行される。トップレベルの関数定義...
簡単なプログラムの例を見てみよう。
wWwvWw
w
App(1, 1)
v
App(1, 1)
これは次のようなJavaScriptプログラムに翻訳できる。
var c = function(a) {
var b = a(a);
return b;
};
var d = c(c);
d(d);
なお、このコードはcの呼び出しの時点で無限ループし、最終行...
意味を考えても分かる通り、関数内で定義された変数をトップ...
逆に、関数定義の中から、それより前のトップレベルの定義を...
ww // d
v
ww // c
App(3, 1)
App(1, 3)
v
ww // b
App(2, 1) // a
App(1, 5) // ☆
v
App(1, 2)
App(1, 4)
☆とコメントされた関数適用の位置から見ると、参照できる変数...
**プリミティブ [#a9f5dd63]
Grassの構文は以上で全てだが、これだけでは入出力ができない...
:In|入力を読む関数。任意の値を引数として受け付け、標準入...
:w|文字「w」(文字コード119)。
:Succ|文字の「次」を返す関数。与えられた文字の文字コード...
:Out|文字を出力する関数。与えられた文字を標準出力に書き出...
OutとSuccに渡す引数は文字でなければならない。文字でない値...
ここでいう「文字」とは、通常の関数と区別される特別な値で...
:T|二つの引数を取り、第一引数を返す。
:F|二つの引数を取り、第二引数を返す。
プリミティブを使ったプログラムの例を見てみよう。次に示す...
w
App(3, 4)
App(3, 1)
**字句構造 [#pd8598a4]
Grassプログラムで意味のある文字はw、W、vの三つである。全...
Grassプログラムは常にwから始まる。最初のwの前にWやvがあっ...
**終わり [#p9606266]
Grassの言語仕様は多分これで全部である。あとは頑張って草を...
*リンク [#m0750be8]
[[公式:http://www.blue.sky.or.jp/grass/doc_ja.html]]
ページ名: