2013-10-05 2 views
1

Мне интересно, почему следующее не удалось работать.странные результаты по составлению глаголов в J

(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))7 
1 

и

(({&('no';'yes'))@(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4)))7 
┌──┐ 
│no│ 
└──┘ 

Я бы ожидать, что она вернется yes, так как он принимает второй аргумент (потому что первое выражение в 1). Может кто-нибудь объяснить?

Спасибо.

ответ

3

Должен признаться, что трудно понять, что вы пытаетесь сделать, но проблема, я думаю, заключается в использовании Self-Reference ($ :).

Описание самосознания в словарях J говорит: «$: обозначает самый длинный глагол, который содержит его». http://www.jsoftware.com/help/dictionary/d212.htm

Объединив ({&('no';'yes')) с исходным глаголом

(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))

Вы фактически изменили глагол, который $: само референции, и я считаю, что это приводит к неожиданным() поведение. Я надеюсь, что это помогает. Если вы можете указать причину использования $: я мог бы дать лучший ответ о том, почему ваш глагол работает таким образом. Я склонен использовать его очень мало, так как обычно есть лучшие решения в J.

Просто еще одна мысль. Вы можете определить части глагола, который вы хотите создать отдельно, и это ограничит объем $: и даст вам поведение, которое вы хотели бы.

 choose=: (1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4)) 
    display=:({&('no';'yes')) 
    display @ choose 7 
┌───┐ 
│yes│ 
└───┘
+0

могли бы вы объяснить, почему '(({&('no'; 'да')) @ (1 = $: @ ([: +/[: *: @ 0 ":) '] @ (».". e. & 1 4))) 7' приведет к 'no'? Что означает' $: 'ссылка сейчас и как результат вычисляется? – Dick

+0

Лучше всего посмотреть на ссылку на словарь для $: http: // www.jsoftware.com/help/dictionary/d212.htm В основном он принимает самый большой глагол, в котором он входит и ставит его на свое место. Это примитив рекурсии в J. В словаре есть несколько хороших примеров того, как он использовался имитирует факторный примитив. – bob

+0

Спасибо, bob.Но все же, есть ли какой-нибудь простой способ сказать, какой глагол «точно задает?»? В сложной негласной форме, как сказать это, потому что в коробке она гигантская глагол в любом случае, правильно? – Dick

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