首页 > 解决方案 > 基本图标:while 和every 之间的区别?

问题描述

显然,我手头有太多时间,所以我开始阅读有关图标语言的内容(注意:页面似乎有问题)。我肯定错过了关于生成器的一些非常明显的东西。我可以在两个地方看到这一点。

在此示例代码中可以看到为什么 Icon 很酷的典型示例:

while (write(read())

...while继续调用write,一直调用read,直到read从文件末尾掉出并返回fail,此时write失败然后while退出。非常聪明!但这不起作用

every (write(read())

我不知道为什么。常见问题解答说“它是消费者”,但没有解释什么是“消费者”。我认为它是“类似于不是真正发电机的发电机”。好的,很好,但为什么它不是生成器?这不正是您想要使用生成器的目的吗?

而同一个问题的另一面是为什么你必须拥有every。例如,考虑这个生成器的例子:

procedure ItoJ(i, j)
  while i <= j do {
    suspend i
    i +:= 1
  }
  fail
end

在这种情况下,您必须使用every

every i := ItoJ(1,5) do write(x)

但为什么我不能:

while i := ItoJ(1,5) do write(i)

这两个陈述看起来和我很相似。我假设我在这里遗漏了一些关键概念。

标签: icon-language

解决方案


推荐阅读