在 Haskell 中,有两个函数允许对项目列表执行操作,以便将其减少为单个值。(当然不止两个,但这是我感兴趣的两个。)它们是foldl1
和foldr1
。如果要执行的操作是可交换的(例如加法),则使用其中的哪一个都没有关系。结果将是相同的。但是,如果运算不是可交换的(例如,减法),那么两者会产生非常不同的结果。例如:
foldr1 (-) [1..9]
foldl1 (-) [1..9]
第一个答案是 5,第二个答案是 -43。J 相当于 offoldr1
是插入副词/
,例如,
-/ 1+i.9
这相当于foldr1 (-) [1..9]
。我想在 J 中创建一个类似于插入副词的副词,但向左折叠而不是向右折叠。我能想到的最好的方法如下:
foldl =: 1 : 'u~/@|.'
因此,可以说:
- foldl 1+i.9
并得到 -43 作为答案,这是左折叠所期望的。
在 J 中有没有更好的方法来做到这一点?出于某种原因,扭转y
论点对我来说似乎没有效率。也许有一种方法可以做到这一点而不必诉诸于此。