J-форк

May. 6th, 2011 06:09 pm
kaipa: (Default)
[personal profile] kaipa
Одна из самых изящных конструкций в языке J, на мой взгляд, это форк. Работает он так. Пусть x и z -- монадные глаголы (в J функции называются глаголами, которые могут быть монадными, то есть от одного аргумента, и диадными -- от двух), а y -- диадный глагол. Тогда форк (x y z) вычисляется как:

(x y z) a = (x a) y (z a)

Такая конструкция позволяет сэкономить много ненужных повторов и промежуточных переменных. Классический пример -- вычисление среднего:
   (+/ % #) 1 2 3 4
2.5

Здесь три глагола: +/ -- складывает элементы вектора (строго говоря, это глагол '+' и наречие '/' -- "вставка"), % -- деление, и # -- число элементов.

Просто и понятно.

Другая похожая конструкция -- hook или "крючок" -- менее наглядна. Она раскрывается как:

(x y) a = a x y a

Например, вычислим нормированный вектор, используя те же самые глаголы:
   (% +/) 1 2 3 4 5
0.0666667 0.133333 0.2 0.266667 0.333333

Profile

kaipa: (Default)
kaipa

April 2017

S M T W T F S
       1
2345678
9101112131415
16171819202122
23242526272829
30      

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 13th, 2025 04:41 am
Powered by Dreamwidth Studios