f
を次のように定義します。f(n):=sum(1..n,i,i^2)
n
までの2乗の和を計算します。従って、 f(4)
を実行すると 30
を表示します。sq(a,b):=( n=(b-a); n2=(-n_2,n_1); draw(a,b); draw(a,a-n2); draw(b,b-n2); draw(a-n2,b-n2); )
(命令文_1; … ;命令文_k)
の形をしています。さらに、関数は変数 n と n2 を使います。これらの変数は、関数が最初に呼ばれたときに作られますが、局所変数ではありません。その値は、あとで関数が呼ばれたときにも参照されます。mean(a,b,c):=( sum=a+b+c; sum/3; )
mean([3,4],[2,7],[4,7])
は [3,6]
を意味します。fac(n):=if(n==0,1,n*fac(n-1));
gcd(a,b):=if(b==0, //再帰の終了条件 a, //最後にaを戻り値とする if(b>a, //bがaより大きければ gcd(b,a), //aとbを入れ替えて再帰 gcd(b,mod(a,b)) //そうでなければaをbで割った余りを用いて再帰 ) );
[9,27]
を、 c に[18,54]
を代入します。x=3; b=[x^2,x^3]; c=2*b;
f(x):= ( x=x+x; println(x); y="User" ); x="Hello "; y="World"; println(x+y); f(x); println(x+y);
Hello World Hello Hello Hello User
regional(…)
命令によって明示的に定義されます。関数の外に出れば自動的に消去されます。さきほどのプログラムを少し変更した次のプログラムでは y
は、関数の中で局所変数です。f(x):= ( regional(y); x=x+x; println(x); y="User"; ); x="Hello "; y="World"; println(x+y); f(x); println(x+y);
Hello World Hello Hello Hello World
a=3; timesa(x):= x*a; println(timesa(2)); a=5; println(timesa(2));
6 10
timesa(2)
の戻り値(評価結果)は大域的変数 a
の値に依存し、まず a=3
として評価されます。そのあと、 a=5
と再定義されると、関数 timesa
の結果は変化します。これはあるときにはそのつもりで実行されることもあれば、そうでないこともあります。関数を定義したときに、その値が変化しないように「凍結」させたいこともあるでしょう。 ::=
で関数を定義すれば変数の値を凍結することができます。この演算子は、変数に割り当てられた値をすべてコピーし、関数内に拘束します。先ほどのコードを次のように変えます。a=3; timesa(x)::= x*a; println(timesa(2)); a=5; println(timesa(2));
6 6
a
には元の値が書き戻されます。この拘束のプロセスは、関数内で使われるすべての変数に及ぶだけではありません。 それは、関数の実行に関係する すべての 変数に及びます。a=3; timesa(x)::= x*a; println(timesa(2)); println(timesa(2,a->10));
6 20
println(i); repeat(4,i,println(i)); println(i);
0 + i*1 1 2 3 4 0 + i*1
complex([0,1])
演算子によって戻すことができます。その他の既定の定数は、論理で使う true と false 空リストの nil です。A
によってアクセスできます。この件については 幾何学要素へのアクセスに詳しく書かれています。:
を使います。コロンのあとの任意の文字列がデータにアクセスするためのキーとして付け加えられます。このキーで任意の値が付加されます。A:"age"=17; B:"age"=34; A:"haircolor"="brown"; B:"haircolor"="blonde";
forall(allpoints(),p, println(p:"age"); println(p:"haircolor"); )
17 brown 34 blonde
keys(...)
演算子でアクセスできます。したがって先ほどの例では、次のコードによりprint(keys(A));
["age","haircolor"];
a=[]; a:"data"=18 print(a:"data")
Page last modified on Tuesday 06 of March, 2012 [10:08:55 UTC].
The original document is available at
http://doc.cinderella.de/tiki-index.php?page=Variables%20and%20FunctionsJ