]b=: i.7 0 1 2 3 4 5 6 b^2 Квадраты 0 1 4 9 16 25 36 b^3 Кубы 0 1 8 27 64 125 216 b^0.5 Квадратные корни 0 1 1.41421 1.73205 2 2.23607 2.44949Союз с & позволяет привязать фиксированный аргумент к диаде, производя соответствующий монадный глагол. Например:
square=: ^&2 Квадрат (степень с 2) square b 0 1 4 9 16 25 36 (sqrt=: ^&0.5) b Квадратный корень 0 1 1.41421 1.73205 2 2.23607 2.44949Левый аргумент можно привязать подобным образом:
Log=: 10&^. Логарифм по основанию 10 Log 2 4 6 8 10 100 1000 0.30103 0.60206 0.778151 0.90309 1 2 3Глаголы с привязанными аргументами можно, конечно, использовать и в вилках. Например:
in29=: 2&< *. <&9 Проверка на попадание в интервал in29 0 1 2 5 8 13 21 0 0 0 1 1 0 0 IN29=: in29 # ] Выборка попавших IN29 0 1 2 5 8 13 21 5 8 LOE=: <+.= 5 LOE 3 4 5 6 7 0 0 1 1 1 integertest=: <. = ] Монада <. дает пол (ближайшее меньшее целое) integertest 0 0.5 1 1.5 2 2.5 3 1 0 1 0 1 0 1 int=: integertest int (i.13)%3 1 0 0 1 0 0 1 0 0 1 0 0 1
Упражнения
7.1 | В программе IN29 глагол # использован диадно.
Введите фразы типа (j=: 3 0 4 0 1) # i.5 для
исследования # . Каким будет
результат #j#i.5 ?
(попробуйте и 1j1#i.5 ) Ответ: +/j |
7.2 | Закройте ответы справа и примените следующие программы к различным
спискам, чтобы выяснить (описав его на русском) предназначение каждой: test1=: >&10 *. <&100 Проверить, если в интервале от 10 до 100 int=: ] = <. Проверить, если целое test2=: int *. test1 Проверить, если целое и от 10 до 100 test3=: int +. test1 Проверить, если целое или от 10 до 100 sel=: test2 # ] Выбрать целые от 10 до 100 |
7.3 | В предыдущем упражнении, закройте определения программ слева и попробуйте
написать новые, производящие описанные эффекты. |
7.4 | Просмотрите еще раз использование закрепляющего наречия в
Упражнениях 6.4-5, и поэкспериментируйте с его использованиям для
программ из Упражнения 7.2. |