J-форк

May 06, 2011 18:09

Одна из самых изящных конструкций в языке 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

j, программирование

Previous post Next post
Up