gpt4 book ai didi

loops - 第四:具有多个导出点的可移植无限循环

转载 作者:行者123 更新时间:2023-12-05 00:55:09 25 4
gpt4 key购买 nike

我需要实现一个具有多个退出点的不确定循环。
不幸的是,最明显的解决方案 - REPEAT - UNTIL with multiple WHILE 在 Gforth 和 swapforth 中都不起作用(当然,下面示例中的循环可以用 DO - LOOP 实现。但是,该代码只是一个演示。真正的问题与嵌入式系统中的硬件控制有关,因此循环确实必须是不确定的):

: test1 ( step -- step count )
0
begin
over +
dup .
dup 20 < while
dup 13 = while
repeat
;

3 test1

在“Thinking Forth”中引用了摩尔的声明:

Many times conditionals are used to get out of loops. That particular use can be avoided by having loops with multiple exit points. This is a live topic, because of the multiple WHILE construct which is in poly- Forth but hasn’t percolated up to Forth ’83. It’s a simple way of defining multiple WHILEs in the same REPEAT. Also Dean Sanderson [of Forth, Inc.] has invented a new construct that introduces two exit points to a DO LOOP. Given that construction you’ll have fewer tests.



不幸的是我没有找到院长的解决方案。
是否有任何可移植的方式在 Forth 的无限循环中实现多个退出点?

最佳答案

经过一些实验,我创建了一个基于 DO + LOOP 的解决方案。
不知道是不是和Dean Sanderson提出的一样。

我已经在 Gforth 和 swapforth 中成功地测试了它。
似乎可以创建任意数量的退出点。
无限循环是通过以下方式创建的: 0 1 DO 循环内容在这里 0 +LOOP。
退出点由放置在 IF THEN 中的 LEAVE 创建。

示例代码:

: test1 ( start step -- count step )
swap
1 0 do
over +
dup .
dup 20 > if
." >20 "
leave
then
dup 13 = if
." =13 "
leave
then
dup 17 = if
." =17 "
leave
then
0 +loop
;

检测结果:
> 1 3 test1
4 7 10 13 =13 ok
> 2 3 test1
5 8 11 14 17 =17 ok
> 0 3 test1
3 6 9 12 15 18 21 >20 ok

关于loops - 第四:具有多个导出点的可移植无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com