如
Section II H所定義與舉例,片語 s=: 0 : 0
用來定義 s 為一指令稿,而明確定義連接詞可進一步得到純雙邊動詞(4 : s)、動詞(3 : s)、連接詞(2 : s)、副詞(1 : s)或名詞(0 : s)。左引數 14 到 10 可用來替代 4 到 0 得到隱式但相同的定義。
右引數 0 可用來直接由鍵盤作各種相對應的定義:k : 0 同於 k :(0 : 0)。更進一步,封裝表達方式 b=: <;._2 s 或表格表達式 t=: >b (或 t=:[;._2 s)
可用來取代所有前述的各種定義指令稿 s 。故:
f=: 3 : 0
a=: 2+b=. y. ^ 2
a+a*b
:
x.*x.+y.
)
a=: b=: 19
f 3
110
a,b 僅有全域名改變
11 19
如前例:
1. |
由 3 : 0 產生單邊與雙邊的定義區別在一單冒號行;
若不存在該行,無雙邊定義。 |
2. |
明確定義函數的結果為非檢驗區塊最後執行的句子得到的結果。見控制結構
檢驗區塊的定義。 |
3. |
由連系詞 =. 指定的名字為區域性名字;指定給它的值不影響同名的使用 without entity defined
或 在其他呼叫它的物件內。由 =: 指定者為全域性名字。 |
4. |
區域變數不能地區化 |
5. |
名字 x. 與 y. 代表左與右引數。當定義連接詞,有必要提及其左與右引數
(採用 u. 與 v.) 以及衍生函數的引數(x. and y.)。若用 m. 替代 u. 則限定對應的引數為名詞,採用 n.
替代 v.也有相同的效果。例如: |
conj=: 2 : '(u. y.)+ (v. y.)'
mc=: 2 : 0
(u.y.)+(v.y.)
)
dc=: 2 : 0 雙邊案例
:
(u.y.)+(v.x.)
)
(!conj% 2 4 5);(!mc% 2 4 5);(1 2 3 !dc% 2 4 5)
+---------------+---------------+--------------+
|2.5 24.25 120.2|2.5 24.25 120.2|3 24.5 120.333|
+---------------+---------------+--------------+
控制結構.
明確 定義的執行順序可由控制單字 諸如 if. do. else. end. 與 while.
決定。例如,一函數以兩原子括住根的方式尋找函數 f
的根,程式如下:
root=: 3 : 0
m=.+/%#while.~:/y.do.if.~:/*f b=.(m,{.)y.do.y.=.b else.y.=.(m,{:)y.end.end.m y.
)
f=: 4:-%:
b=: 1 32
root b
16
這類定義也可以在控制單字前後跳行,如此較具可讀性:
root=: 3 : 0
m=. +/ % #
while. ~:/y.
do. if. ~:/*f b=. (m,{.) y.
do. y.=.
b
else. y.=. (m,{:) y.
end.
end. m y.
)
如前例,單字 if.
與其對應字 end. 標示著一控制結構的起始與終點,如同 while. 與其對應 end.;這樣的結構也可以鑲套,如 if. 結構落在
while. 結構內。
控制單字 for.、if.、select.、try.、while.與 whilst.
這些標示著控制結構起始,各有對應的終點 end.,且構成另一種型態的分句符號。在前例 do. 與 else. 打破
if. 結構成三個簡單的區塊,各自含有一句子,而 在 while.結構的
do.將結構分成兩個區塊,前個為一簡單句子,而第二個本身為一 if.
控制結構。
一般而言,區塊 包含零個或以上的簡單句子與控制結構。以下總結區塊的角色:
for. T do. B end.
for_xyz. T do. B end.
if. T do. B end.
if. T do. B else. B1 end.
if. T do. B elseif. T1 do. B1 elseif. T2 do. B2 end.
select. T case. T0 do. B0 fcase. T1 do. B1 case. T2 do. B2 end.
try. B catch. B1 end.
while. T do. B end.
whilst. T do. B end. 類似 while.,但跳過第一次檢驗。
以B 或 T 起頭的單字代表區塊。T 區塊最後執行的句子,其結果值的第一原子會被用來檢驗是否為非零,而檢驗的結果決定了下個要執行的區塊。
(空白 T 區塊或省略 T 區塊視為真值)在 try.區塊若錯誤產生,
程式跳到對應的 catch. 區塊繼續執行 。最後結果為不在 T 區塊之最後執行句子的結果,若沒有這樣的句子,最後結果為 i.0 0
。
其餘控制單字的功能摘述如下:
assert. T |
若 T 不全為1傳回謬誤 |
break. |
跳到控制結構 for., while.,
or whilst. 的終點 |
continue. |
跳到控制結構 for., while.,
or whilst. 的起點 |
goto_name. |
跳到標籤 |
label_name. |
定義跳躍的標籤 |
return. |
結束函數 |
其他的說明與範例見
控制結構。
以下範例使用控制單字與 u. 、 n. 建構層級連接詞 L:
:
Level=: 2 : 0
m=. 0{ 3&$&.|. n.
ly=. L. y. if. 0>m do. m=.0>.m+ly end.
if. m>:ly do. u. y. else. u. Level m&.> y. end.
:
'l r'=. 1 2{ 3&$&.|. n.
lx=. L. x. if. 0>l do. l=.0>. l + lx end.
ly L. x. if. 0>r do. r=.0>. r + ly end.
b=. (l,r)>:lx,ly
if. b-: 0 0 do. x. u. Level(l,r)&.>y.
elseif. b-: 0 1 do. x. u. Level(l,r)&.>y.
elseif. b-: 1 0 do. (<x.) u. Level(l,r)&.>y.
elseif. 1 do. x. u. y.
end.
)
] a=: (i.2 3);(<<2 3 4) ; 3
+-----+---------+-+
|0 1 2|+-------+|3|
|3 4 5||+-----+|| |
| |||2 3 4||| |
| ||+-----+|| |
| |+-------+| |
+-----+---------+-+
+: Level 0 a
+------+---------+-+
|0 2 4|+-------+|6|
|6 8 10||+-----+|| |
| |||4 6 8||| |
| ||+-----+|| |
| |+-------+| |
+------+---------+-+
+: L: 0 a
+------+---------+-+
|0 2 4|+-------+|6|
|6 8 10||+-----+|| |
| |||4 6 8||| |
| ||+-----+|| |
| |+-------+| |
+------+---------+-+
下個 前個
字彙
索引
主選單