Явное Определение | 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. . Таким образом, ключевые слова являются видом пунктуации.
Более детальное описание и примеры можно найти в разделе Управляющие Конструкции.