Я придумал неправильный J-глагол в голове, который найдет долю избыточных букв в строке. Я начал только с кучей глаголов, не имеющий приоритета, определенных и попытался группируя внутрь:Как заставить группировать монадические глаголы?
c=. 'cool' NB. The test data string, 1/4 is redundant.
box =. 5!:2 NB. The verb to show the structure of another verb in a box.
p=.%#~.%# NB. First attempt. Meant to read "inverse of (tally of unique divided by tally)".
box < 'p'
┌─┬─┬────────┐
│%│#│┌──┬─┬─┐│
│ │ ││~.│%│#││
│ │ │└──┴─┴─┘│
└─┴─┴────────┘
p2=.%(#~.%#) NB. The first tally is meant to be in there with the nub sieve, so paren everything after the inverse monad.
box < 'p2'
┌─┬────────────┐
│%│┌─┬────────┐│
│ ││#│┌──┬─┬─┐││
│ ││ ││~.│%│#│││
│ ││ │└──┴─┴─┘││
│ │└─┴────────┘│
└─┴────────────┘
p3=. %((#~.)%#) NB. The first tally is still not grouped with the nub sieve, so paren the two together directly.
box < 'p3'
┌─┬────────────┐
│%│┌──────┬─┬─┐│
│ ││┌─┬──┐│%│#││
│ │││#│~.││ │ ││
│ ││└─┴──┘│ │ ││
│ │└──────┴─┴─┘│
└─┴────────────┘
p3 c NB. Looks about right, so test it!
|length error: p3
| p3 c
(#~.)c NB. Unexpected error, but I guessed as to what part had the problem.
|length error
| (#~.)c
Моим вопрос, почему мой подход к группировке потерпеть неудачу с этой ошибкой длиной, и как я должен сгруппировал его, чтобы получить желаемый эффект? (Я предполагаю, что это как-то связано с превращением его в крючок вместо группировки, или просто не понимая, что ему нужно использовать формы монады, но я не знаю, как это проверить или обойти, если это так).
Обычно я использую @ вместо & при работе с монадическими глаголами, потому что они имеют тот же эффект и что у них есть и для связывания существительных с глаголами. Тем не менее, я использовал и в диадическом виде через крючок в этом решении. -. @ (% ~ & # ~.) 'cool' и использование -. вместо 1- – bob
Я должен был понять, что мне нужен дополнительный, а не обратный. Кроме того, ваше решение, датчанин, является лояльным переводом моего первоначального мышления: 1 - # & ~.% # Может быть прочитано «один минус единственного числа, деленного на счет». И @bob, я считаю, что ваше решение ~. @ (% ~ & # ~.) Можно было бы прочитать: «дополнение к разделению нечетких уникальных и уникальных». Правильно ли я понимаю оба значения? – dukereg
Со своей стороны ваша интерпретация верна. Я также понял, что вчера вечером вы могли получить ответ, который ближе к дробному формату, чем десятичный float, применяя х: глагол к результату. x: @ -. @ (% ~ & # ~.) 'cool' приводит к 1r4, который является рациональным выражением в J для 0.25. Надеюсь, что это полезно. – bob