Argument Transmitters Интересная возможность языка SL5 (родственика SNOBOL). При связывании параметров происходит вызов процедуры (argument transmitter).
positiveint:=procedure (n)
if (n:= integer(n)) >0
then succeed n
else fail
end
gcd:=procedure (x:positiveint, y:positiveint)
В данном примере “n” преобразуется в integer и результат подвязывается к параметру. Если преобразование не прошло, либо n неположительное, возникает fail. Похоже SL5 имеет fail модель аналогичную языку Icon. В Icon нет argument transmitters. Однако можно было бы сделать проверки внутри gcd. Пример вызова gcd:
gcd ((-1 | 2) , (-10 | 3 | 4)) будет выполнен gcd(2, 3).
(-1 | 2) и (-10 | 3 | 4) это так называемые генераторы. Генератор возвращает значение. Если gcd потерпел fail, gcd попробует новое значение генератора. Когда генератор достигнет конца будут пробоваться значения в следующем генераторе.
|