式を未評価にする 'expr'
|
説明
|
|
•
|
式をシングルクォート ' ' で囲むと式の評価を遅らせます。
|
•
|
たとえば、文 x := 2; と y := 3; に続いて f := 'x+y'; があると、f に割り当てられた値は x+y であり 5 ではありません。
|
>
|
x := 2: y := 3: f := 'x + y';
|
| (1.1) |
| (1.2) |
•
|
別の例として、help(Digits); は help 関数への引数が名前ではないというメッセージを返します。Digits は整数値に評価されるからです。望むヘルプの記述を得るには、代わりにクォートで囲んだ形 help('Digits'); を用います。
|
•
|
式を未評価のクォートで囲むことにより型 uneval を持つ新しい式が作られます。これはもとの式に評価されます。たとえば、式 '2' は 2 に評価されます。
|
•
|
それぞれの評価の後、1つのクォート分深さが取り除かれます。したがって名前 a に値 1 が割り当てられていると、ダブルクォートで囲まれた式 ''a'' は 'a' に評価され、式 'a' は a に評価され、a は 1 に評価されます。
|
| (1.3) |
| (1.4) |
| (1.5) |
| (1.6) |
•
|
評価は簡単化とは異なることに注意して下さい。式 '2 + 3' は、まず式 '5' に簡単にされ、数 5 に評価されます。
|
•
|
未評価の特別な場合は名前を解除するために用いられます。たとえば、文 x := 2; は x に値 2 を割り当て、x := 'x'; は名前 x をもとの割り当てられていない状態に戻します (したがって x はそれ自身を表します)。ある場合には、for i to n do a[i] := evaln(a[i]) end do; のように、名前を解除するために evaln 関数が必要です。ここで i は評価されなければいけませんが、a[i] は完全評価されてはいけません。
|
•
|
型の名前や他の手続きのオプションなど、手続きに引数として渡す名前をクォートで囲むことは重要です。たとえば、
|
>
|
dependent := 2:
type( x, 'dependent( { x, y } )' );
|
| (1.7) |
>
|
type( x, dependent( { x, y } ) );
|
| (1.8) |
•
|
コマンド map と map2 は、特別な評価規則を持つ関数に対して上手く動作しません。たとえば、関数が型 uneval を持つパラメータを使用する場合、 map は期待した結果を返しません。解決策として、 特別な評価規則を持つ手続きを、通常の評価規則を持つ手続きで 覆い隠す(wrap) することができます。(map は通常の評価規則を持ち、その引数が評価されることに注意してください。) つぎの例と解決策を考えます。
|
>
|
f:=(x::uneval,y::uneval)->x+y;
|
| (1.9) |
Error, (in f) f uses a 2nd argument, y (of type uneval), which is missing
| |
>
|
map(proc(x,y) f(x,y) end proc, [t,u,v],w);
|
| (1.10) |
|
|
Download Help Document
Was this information helpful?