钩子在文字短语中起作用,但在分配给变量时不起作用
Hook works in literal phrase, but not when assigned to variable
考虑:
x=.4 5 6 7
i.# x
0 1 2 3
这符合预期。钩子 #
作用于参数(列表 4 5 6 7
),返回它的长度 4
,然后传递给 i.
,数字 0 到 3 是印刷。
但是,如果我先将动词短语分配给一个变量,然后然后将它应用到同一个列表,我会得到不同的答案:
y=.i.#
y x
0
为什么?
(i. #) y
是一个钩子,而 i. # y
只是从右到左评估参数。 v1 v2 v3 v4 v5 y
等同于 v1 (v2 (v3 (v4 (v5 y))))
这里的问题是术语有些混乱。您的第二个示例 y =. i. #
确实是一个 挂钩 ,并且正在运行 as hooks are defined。你的第一个例子 i. # x
不是一个钩子,而是一个简单的 名词短语,并且也是这样操作的 名词短语 是定义。如果您想要 i. # x
的口头等价物,请使用 foo =: i. @: #
在第二个版本中使用了 hook。一个fork由3个动词组成,一个hook由2个动词组成。在你的第二个例子中你只有 2 个动词,i.
和 #
,所以你要处理的是一个 hook。 Hooks 总是调用左侧动词的二元价,无论 hook(动词本身)是单元调用还是二元调用。
如果你想要 i.
和 #
的无连词组合(尽管问你自己 "why?"),那么你必须使用特殊情况 "capped fork",或伪叉,[: i. #
。这个用例是它存在的理由。
注意:最好不要重新定义 x
或 y
或 u
或 v
;如果必须的话,在本地进行,基于同名的预先存在的值,并保留 nameclass,否则你只会让阅读你的代码的每个人感到困惑。
考虑:
x=.4 5 6 7
i.# x
0 1 2 3
这符合预期。钩子 #
作用于参数(列表 4 5 6 7
),返回它的长度 4
,然后传递给 i.
,数字 0 到 3 是印刷。
但是,如果我先将动词短语分配给一个变量,然后然后将它应用到同一个列表,我会得到不同的答案:
y=.i.#
y x
0
为什么?
(i. #) y
是一个钩子,而 i. # y
只是从右到左评估参数。 v1 v2 v3 v4 v5 y
等同于 v1 (v2 (v3 (v4 (v5 y))))
这里的问题是术语有些混乱。您的第二个示例 y =. i. #
确实是一个 挂钩 ,并且正在运行 as hooks are defined。你的第一个例子 i. # x
不是一个钩子,而是一个简单的 名词短语,并且也是这样操作的 名词短语 是定义。如果您想要 i. # x
的口头等价物,请使用 foo =: i. @: #
在第二个版本中使用了 hook。一个fork由3个动词组成,一个hook由2个动词组成。在你的第二个例子中你只有 2 个动词,i.
和 #
,所以你要处理的是一个 hook。 Hooks 总是调用左侧动词的二元价,无论 hook(动词本身)是单元调用还是二元调用。
如果你想要 i.
和 #
的无连词组合(尽管问你自己 "why?"),那么你必须使用特殊情况 "capped fork",或伪叉,[: i. #
。这个用例是它存在的理由。
注意:最好不要重新定义 x
或 y
或 u
或 v
;如果必须的话,在本地进行,基于同名的预先存在的值,并保留 nameclass,否则你只会让阅读你的代码的每个人感到困惑。