重新:根據維基百科「Algol68的使用的‘proceduring’來實現用戶定義 短路運營商&程序」。 - 這個怎麼用?
Algol68-r0(原始/未修正的定義)有兩個與短路評估有關的概念。
想象一下編碼器想要定義一個「短路評估」的矩陣乘法運算符,所以一旦左邊的參數是一個「零」矩陣,那麼就會有進一步的右邊評估......這種用戶定義的定義可能是:
MODE MAT = FLEX[0,0]REAL;
OP ISZERO = (MAT a)BOOL: ¢ insert actual code here ¢ ~;
PRIO TIMESF = 7;
OP TIMESF = (MAT a, PROC MAT in b)MAT:
IF ISZERO a THEN a ELSE MAT b = in b; ¢ insert actual code here ¢ ~ FI;
MAT a = 0, b = 16, c = 25;
print(a TIMESF b TIMESF c) ¢ would print 0 without calculating 16*25 ¢
相反,編碼器希望左邊和右邊的參數是並行計算的。這樣的用戶定義的定義可以是:
PRIO TIMESPAR = 7;
OP TIMESPAR = (MAT a, MAT b)MAT: ¢ insert actual code here ¢ ~;
逗號告訴編譯器,它是免費評估左手和右手按任何順序,甚至並行。 (這使編譯器優化評估選項)
或者編碼器可能需要強制評估是連續的:
PRIO TIMESSEQ = 7;
OP TIMESSEQ = (MAT a; MAT b)MAT: ¢ insert actual code here ¢ ~;
在這種情況下,「;」被稱爲「gomma」,適用於「逗逗」。
Algol68的-R1(修訂於1974年,可在SourceForge上的Windows和Linux),刪除了所有這些能力離開編碼器,手動/特別適用「proceduring」 ......如
第一組矩陣的定義是相同的:
MODE MAT = FLEX[0,0]REAL;
PRIO TIMESF = 7;
OP TIMESF = (MAT a, PROC MAT in b)MAT:
IF ISZERO a THEN a ELSE MAT b = in b; ¢ insert actual code here ¢ ~ FI;
MAT a = 0, b = 16, c = 25; ¢ 3 1x1 matrices are "widening" from REAL numbers ¢
但使用不同的是,注意使用兩個lambda表達式(MAT:b乘以MAT:C)的和(MAT:C):
print(a TIMESF MAT:b TIMESF MAT:c) ¢ would print 0 without calculating 16*25 ¢
透明在Algol68-r1中保留了去核和擴大的功能。