| Явное Определение | m : n _ _ _ |
Здесь m — целое, обозначающее следующие варианты:
|
f=: 3 : 0 a=: 2+b=. y ^ 2 a+a*b : x*x+y ) a=: b=: 19 f 3 110 a,b NB. Изменилось только глобально присвоенное имя. 11 19Как показано далее:
| 1. | При использовании 3 : 0 , строка, состоящая из одного двоеточия, отделяет определения монадного и диадного случаев. Если такой строки нет, область определения диадного случая пуста. |
| 2. | Результатом явного определения является результат его последнего предложения, выполненного не в тестовом блоке; в случаях 3 : и 4 : этим результатом должно быть существительное. Cм. Управляющие Конструкции для определения блока. |
| 3. | Присвоенные =. имена являются локальными; их новые значения не производят никакого эффекта как вовне данного определения, так и внутри других, вызванных им определений. Имена, присвоенные =: , являются глобальными (глобальное присваивание локальных имен не допускается). Присваивание локативов (с использованием =: или =.) всегда глобально. |
| 4. | Аргументы определения инициализируются =. . Для диадного
случая это подобно: f=: 4 : 0 x=. (левый аргумент) y=. (правый аргумент) (остаток глагола) ) |
| 5. | Имена x и y обозначают левый и правый аргументы. В определении союза можно ссылаться как на его левый и правый аргументы (используя u и v), так и на аргументы получающегося в результате его применения глагола (x и y ); подобно, в определении наречия можно ссылаться как на его левый аргумент (используя u), так и на аргументы производимого глагола (x и 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 : 'm=.+/%#while.~:/y do.if.~:/*f b=.(m,{.)y do.y=.b else.y=.(m,{:)y end.end.m y'
f=: 2 - *:
b=: 1 10
root b
1.41421
Для читабельности, это определение можно разбить на нескольких строк.
Например так:
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. , управляющие конструкции могут быть вложены. Слова do. и else. делят конструкцию if. на три простых блока, каждый из которых является предложением; а do. в конструкции while. делит ее на два блока: первый является простым предложением, а второй сам по себе является управляющей конструкцией if. . Таким образом, ключевые слова являются видом пунктуации.
Более детальное описание и примеры можно найти в разделе Управляющие Конструкции.