j - J 中的foldList 副词

标签 j

回答FoldList like primitive in J的问题,我想创建一个副词 fold ,这样 x u Fold y 就是用动词 u 和 inital 折叠 yx:

    fold =: 2 : 0
z =.x
for_item. y do. z =. z u item end.
z
)

但是我在尝试时遇到错误:

   1 (+fold) 1 2 3
|value error: x
|   z=.    x

这里出了什么问题?谢谢。

最佳答案

只是一些小事情。

首先,副词的数字代码是1。您的 2 : 0 定义的是连词,而不是副词。现在的情况是,J 期望 fold 有两个直接参数,而您只提供了一个(+;这两个数字数组是间接的,而不是直接的,论据)。然而,这并不是 J 在这里提示的,因为另一个问题实际上首先把它绊倒了。我稍后会介绍这一点,但您需要做的第一件事是将 fold 定义为副词 [1]。

J 提示的更直接的问题是它不知道 x 的含义。为什么?出于同样的原因,如果您替换 2 : 0 (或 conjunction Define),甚至更相关的是,adverb Define - - 使用动词定义。因为显式动词(直接或派生)默认为一元并且没有 x 参数(因此提及 x 是值错误)。如果您想定义二元动词,则必须明确要求。

现在,直接定义二元​​动词非常简单:您只需说二元定义,而不是说动词定义。但是从修饰语(副词或连词)派生二元动词就不那么明显了。您必须使用special colon syntax它允许您区分显式定义的单价和二价。此语法适用于所有显式定义,包括动词、副词和连词,但对于副词和连词,这是派生显式动词的唯一方法。

底线:

fold =: adverb define
  NB. Note solitary colon on next line. Everything after that is dyadic.
:
  z =.x
  for_item. y do. z =. z u item end.
  z
)

[1]:您可能会发现使用名称类的标准覆盖更容易记住(并稍后阅读),如副词定义连词定义(对于一个-衬垫,您可以使用 def 代替 define)。

关于j - J 中的foldList 副词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353755/

相关文章:

J 默契词评价

j - 如何向通过 jconsole.exe 运行的 J 脚本提供 STDIN 数据?

function - 函数和模的 J 语法

j - 将 csv 文件导入 J 并将它们用作变量

parsing - 从 J 中的平面文件读取表格数据

j - 排名如何运作?

J : Iverson's `table` function from _A Personal View of APL_

list - J,找不到的动词

j - 在 J 中打开具有自定义填充值的框

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