2013-09-03 2 views
1

я определяю a как массив и найти беговую макс:Простой крючок не выполняется, как ожидалось

a =: 3 1 4 1 5 9 2 
    >./\ a 
3 3 4 4 5 9 9 

Тогда я хочу, чтобы отфильтровать дубликаты. Я знаю, что шишка (~.) делает это, поэтому я стараюсь:

~. >./\ a 
3 4 5 9 

Это работает, но я не знаю, почему. Я думал, что это не сработает. / и \ - наречия, поэтому (>./\) - это глагол. Затем мы имеем: f g y, который является крючком, и он должен быть выполнен как y f (g y). Очевидно, что это не работает.

Вместо этого он выполнен как ~. (>./\) (т. Е. f (g y)), как будто это было ~. @ (>./\). Так что здесь происходит?

Спасибо.

ответ

4

J выполняет заявления справа налево, чтобы ваш ~. >./\ a эквивалентно:

~. (((>./) \) a) 

Было бы крючок, если он был в круглые скобки, как:

(~. ((>./) \)) a 

Некоторые соответствующие обсуждения: function composition и how to take the train.

Редактировать: Для того, чтобы сделать это более ясным, f g y является всегдаf (g y). Если вам нужен крючок, вам нужно написать (f g) y.

+0

Отлично! Большое вам спасибо, теперь эти понятия намного яснее! – rubik

Смежные вопросы