图标 - 如何实现ZipWith的等价物

时间:2018-04-17 20:15:12

标签: lazy-evaluation icon-language

在Icon中,每个表达式基本上都是一个流。像*这样的大多数函数的命名方式都暗示了它们对单个元素的作用。

例如,此处foo.icn* 2映射到流上。

procedure main()
    every write((1 | 2 | 3) * 2)
end

我无法从一小部分Icon文档中看出,我已经看到它将如何交错两个非平凡的流......以及像2这样的单例是否是一个元素流或某种神奇的标量值,它分布并且有时表现为无限流...类似于标量扩展在APL中的工作方式。

使用两个非平凡的流进行测试,显示了Icon使用的遍历顺序。最右边的流是最里面的循环,流可以遍历多次。

这也很好,因为这意味着我们不需要区分标量和单例流。

procedure main()
    every write((1 | 2 | 3) * (2 | 0 | 0))
end

产生

% icon foo.icn
2
0
0
4
0
0
6
0
0

但是,我无法弄清楚如何编写一个同时遍历两个流的操作......你将如何实现等效的zipWith

以下是使用假设zipWith函数的示例,其中*作为字符串传入。 (我不确定Icon是否具有一流的功能)

procedure main()
    every write(zipWith("*", (1 | 2 | 3), (2 | 0 | 0)))
end

哪会产生:

2
0
0

0 个答案:

没有答案