Хороший вопрос, и тот, который заставил меня покопаться в моей ссылке Nuvo c для (^:)
Power Conjunction https://code.jsoftware.com/wiki/Vocabulary/hatco#Common_Uses_2
Я имею в виду Nuvo c, так как эта ссылка сейчас используется вместо словаря J.
Насколько я могу судить, проблема в том, что у вас есть функция dyadi c (ваши аргументы 'empty'
и ''
), и вы пытаетесь ее форсировать быть монади c с вашим тестом (''&-:)
'empty'[^:(''&-:) ''
|domain error
| 'empty' [^:(''&-:)''
Ошибка домена часто появляется, когда у вас нет нужного количества аргументов, или вы используете аргументы типа, который является не подходит.
Если мы изменим ваш тест на форк ('' -: ])
, он будет работать, потому что теперь аргументы x и y обрабатываются соответствующим образом. ]
выбирает аргумент y, а существительное в левом зубце не требует аргументов.
'empty'[^:(''-:]) '' NB. turn the test into a fork
empty
Другой способ, который работает, - это изменить аргумент x в глагол, используя "_
, который создает глагол бесконечного ранга и при вызове вернет результат, который вы ожидаете. Это снова избавляет от проблемы путаницы dyadi c monadi c, так что ваш оригинальный тест теперь работает. Скобки вокруг empty"_
необходимы для отделения силового соединения ^:
от глагола.
('empty'"_) ^:(''&-:) '' NB. turn the x argument into a verb
empty
Другие подходы, которые вы можете использовать, - взглянуть на наречие Amend }
https://code.jsoftware.com/wiki/Vocabulary/curlyrt#dyadic