Должен признаться, что трудно понять, что вы пытаетесь сделать, но проблема, я думаю, заключается в использовании 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│
└───┘
могли бы вы объяснить, почему '(({&('no'; 'да')) @ (1 = $: @ ([: +/[: *: @ 0 ":) '] @ (».". e. & 1 4))) 7' приведет к 'no'? Что означает' $: 'ссылка сейчас и как результат вычисляется? – Dick
Лучше всего посмотреть на ссылку на словарь для $: http: // www.jsoftware.com/help/dictionary/d212.htm В основном он принимает самый большой глагол, в котором он входит и ставит его на свое место. Это примитив рекурсии в J. В словаре есть несколько хороших примеров того, как он использовался имитирует факторный примитив. – bob
Спасибо, bob.Но все же, есть ли какой-нибудь простой способ сказать, какой глагол «точно задает?»? В сложной негласной форме, как сказать это, потому что в коробке она гигантская глагол в любом случае, правильно? – Dick