编辑“︁
Icon语言
”︁(章节)
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
===暂停表达式=== 要将一个过程转换成一个生成器,可以使用表达式{{code|suspend expr1 do expr2|"icon"}},这里的<code>do</code>子句是可选的;它暂停当前过程,将<code>expr1</code>生成的每个结果作为这个过程所产生结果返回。在再次调用这个过程之时于这个暂停之处恢复执行,此时先求值<code>expr2</code>再恢复<code>expr1</code>;如果<code>expr1</code>是生成器并产生了新结果,则再次暂停并返回它的结果;如果<code>expr1</code>不是生成器或者是生成器但不再产生新结果,则继续执行后面的语句。 例如:自己定义一个<code>ItoJ</code>生成器{{sfn|Tratt|2010|p=74}}: <syntaxhighlight lang="icon"> procedure ItoJ(i, j) while i <= j do { suspend i i +:= 1 } end </syntaxhighlight> 它建立一个生成器,它返回一系列的数,开始于<code>i</code>并结束于<code>j</code>,接着在它们之后返回{{code|&fail|"icon"}}。{{code|suspend i|"icon"}}停止执行,并返回<code>i</code>的值,而不重置这个函数的任何状态。当对相同函数做出另一次调用的时候,在这一点上于以前的状态下恢复执行。它接着进行<code>i +:= 1</code>,然后循环回到<code>while</code>的开始处,接着返回下一个值并再次暂停。这个循环将持续直到<code>i <= j</code>失败,这时调用{{code|fail|"icon"}}退出。这种机制允许轻易的构造[[迭代器]]{{sfn|Tratt|2010|p=74}}。 将例子稍作修改: <syntaxhighlight lang="icon"> procedure ItoJ(i, j) while i <= j do { suspend i | i*i i +:= 1 } end procedure main () every write(ItoJ(1,2)) end </syntaxhighlight> 将产生: <syntaxhighlight lang="console"> 1 1 2 4 </syntaxhighlight>
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息