j - 为什么两个相似的 J 动词短语可以起作用,但只有一个与动态强力连词一起起作用?

标签 j

动词链''-:]按照我期望的方式工作。

   (''-:])''
1
   (''-:])'non-empty'
0

它也按照我期望的动态电源连接方式工作。

   'empty'[^:(''-:])''
empty
   'empty'[^:(''-:])'non-empty'
non-empty

动词短语''&-:产生相同的结果,正如我所期望的。

   (''&-:)''
1
   (''&-:)'non-empty'
0

当我尝试将 ''&-: 与动态幂连词一起使用时,J 产生域错误,我不明白为什么。此用例与所有其他用例有什么区别?

   'empty'[^:(''&-:)''
|domain error
|   'empty'    [^:(''&-:)''
   'empty'[^:(''&-:)'non-empty'
|domain error
|   'empty'    [^:(''&-:)'non-empty'

“域错误”行下方的消息是否试图告诉我任何具体信息?

我的实际用例是用另一个字符串替换空字符串。如果有人有任何更好的方法建议,我将不胜感激。

最佳答案

好问题,让我深入研究了 (^:) Power Conjunction https://code.jsoftware.com/wiki/Vocabulary/hatco#Common_Uses_2 的 Nuvoc 引用资料。
我指的是 Nuvoc,因为这是现在使用的引用而不是 J 词汇表。

据我所知,问题是您有一个二元函数(您的参数是 'empty'''),并且您试图强制它让你的测试成为一元 (''&-:)

   'empty'[^:(''&-:) ''
|domain error
|   'empty'    [^:(''&-:)''

当您没有正确数量的参数或您使用的参数类型不合适时,通常会出现域错误。

如果我们将您的测试更改为 fork ('' -: ]) 它会起作用,因为现在 x 和 y 参数得到了适当的处理。 ] 选择 y 参数,左侧的名词不需要参数。

   'empty'[^:(''-:]) ''  NB. turn the test into a fork
empty

另一种有效的方法是使用 "_ 将 x 参数更改为动词,这会创建一个无限等级的动词,并且在调用时将返回您期望的结果。这再次摆脱了解决了二元一元混淆的问题,以便您原来的测试现在可以工作。需要使用 empty"_ 两边的括号将强力连词 ^: 与动词分开。

   ('empty'"_) ^:(''&-:) '' NB. turn the x argument into a verb
empty

您可能采取的其他方法是查看 Amend 副词 } https://code.jsoftware.com/wiki/Vocabulary/curlyrt#dyadic

关于j - 为什么两个相似的 J 动词短语可以起作用,但只有一个与动态强力连词一起起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739015/

相关文章:

j - `0".>,.2}.` 部分在 J 脚本中的作用是什么?

j - 在列表上组合加法和除法动词

j - 适合连词 (!.) 应用于扩展

curl - 使用 J 从安全链接读取 CSV 文件

j - J语言计算一个原子在表中出现的次数

j - 使用 for 每个循环列出目录中的文件

j - 绘制一列精度浮点值

j - 在 J 中创建 y 形随机 float 组

io - 在 J 中读取多行标准输入

j - 如何在 J 中取字符串向量的外积?