5

我想将在列表中大于 2 的所有项目的操作放入 J 中的无意义(如未显式捕获变量中的参数)函数中。我想通过使用~钩子来做到这一点,比如f =: ((> & 2) #)~但这似乎既不可行也不((> & 2) #~)行。

我的理由是我的函数的形式是(f y) g ywhere yis list, fis(> & 2)gis #。我将不胜感激任何帮助!

4

2 回答 2

7

Everything is OK except you mixed the order of the hook. It's y f (g y) so you want

 (#~ (>&2)) y
于 2013-06-27T18:55:50.027 回答
1

f g当应用于单个参数(即单子)时, 钩子具有形式和解释是(unaltered input) f (g input). 因此,正如 Eelvex 所指出的,您可以将其表述为类似hook =: #~ >&2. 此外,正如 kaledic 所指出的,该成语(#~ filter)在 J 中极为常见,以至于它通常被解读为一个有凝聚力的整体:keep-items-matching-filter.*

如果您想要一个在符号上看起来与原始名词短语相似的无点操作短语(y > 2) # y,您可能希望使用>&2 # ]表示]“未改变的输入”(即恒等函数)甚至(] # 2:) # ]或某些变体的 fork。

(*) 实际上,该模式(f~ predicate)定义了一整类惯用语,例如(<;.1~ frets)将数组分割成分区以及(</.~ categories)将数组中的项目分类到桶中。

于 2013-07-08T21:03:32.473 回答