标签: do-loops

在do循环中替代"last"

根据perl手册for last(http://perldoc.perl.org/functions/last.html),last不能用于打破do {}循环,但它没有提到替代方案.我正在维护的脚本具有以下结构:

do {
    ...
    if (...) 
    {
        ...
        last;
    }
} while (...);
Run Code Online (Sandbox Code Playgroud)

而且我很确定他想要循环结束,但它实际上退出了当前子程序,所以last如果有更好的方法可以推荐,我需要更改或重构整个循环.

perl control-flow do-loops

8
推荐指数
2
解决办法
4875
查看次数

Lisp DO变量语法推理

在Peter Seibel的Practical Common Lisp中,他给出了这个例子:

(do ((nums nil) (i 1 (1+ i)))
    ((> i 10) (nreverse nums))
  (push i nums))
Run Code Online (Sandbox Code Playgroud)

我可以看到它是如何工作的,在循环中使用nums但不给它一个步骤形式.为什么要将num放在变量定义中而不是这样做:

(let (nums) (do ((i 1 (+ i 1)))
         ((> i 10) (nreverse nums))
       (push i nums)))
Run Code Online (Sandbox Code Playgroud)

我确信这是一个很好的理由,但我还没有得到它.

lisp syntax let do-loops

6
推荐指数
1
解决办法
659
查看次数

带有if语句的do-while循环中的随机数

我试图让一个随机数生成器生成一个1到9之间的数字串,如果它生成一个8,它应该显示最后8,然后停止生成.

到目前为止,它打印1 2 3 4 5 6 7 8,但它不会生成随机的数字串,因此我需要知道如何使循环实际生成如上所述的随机数,感谢您的帮助!

使用Javascript

// 5. BONUS CHALLENGE: Write a while loop that builds a string of random 
integers
// between 0 and 9. Stop building the string when the number 8 comes up.
// Be sure that 8 does print as the last character. The resulting string 
// will be a random length.
print('5th Loop:');
text = '';

// Write 5th loop here:
function getRandomNumber( upper ) {
  var num = Math.floor(Math.random() * …
Run Code Online (Sandbox Code Playgroud)

javascript random loops do-while do-loops

6
推荐指数
1
解决办法
1326
查看次数

在Scheme中使用"do"

CODE SNIPPET 1和CODE SNIPPET 2有什么区别?

;CODE SNIPPET 1
(define i 0)                      
(do ()                             
  ((= i 5))                       ; Two sets of parentheses
  (display i)                     
  (set! i (+ i 1))) 


;CODE SNIPPET 2
(define i 0)                      
(do ()                             
  (= i 5)                         ; One set of parentheses
  (display i)                     
  (set! i (+ i 1))) 
Run Code Online (Sandbox Code Playgroud)

第一个代码片段产生01234,第二个代码片段产生5.发生了什么?额外的一组括号有什么作用?另外,我见过[(= i 50)]用而不是((= i 5)).有区别吗?谢谢!

scheme do-loops

5
推荐指数
2
解决办法
9764
查看次数

澄清一个fortran隐含的循环

很多年前我使用过FORTRAN,并且最近负责维护一个旧的FORTRAN程序(F77).以下代码不熟悉:

      READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS,  
   .    ( BUFFER(BIX), BIX=1, NUM_WORDS )  
Run Code Online (Sandbox Code Playgroud)

回顾一些在线论坛发现,让我感到困惑的部分,即延续线,是一个隐含的循环.由于我的程序在这里给我带来麻烦,我想将其转换为传统的DO循环.转换它也可能有助于下一个从现在起5年后冷却这个东西的可怜的邋!!无论如何,我对DO循环等效的最佳猜测是

  READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS  
  DO BIX=1, NUM_WORDS  
    READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) BUFFER(BIX)  
  ENDDO  
Run Code Online (Sandbox Code Playgroud)

但是,当我只进行此更改时,正在运行的测试用例停止工作.我仍然觉得这里发生的是两个不同的READ(第一个获得NUM_WORDS,第二个循环数据),所以我尝试了一个不那么激烈的变化,将其转换为两个语句但保留隐含的循环:

  READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS  
  READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) ( BUFFER(BIX), BIX=1, NUM_WORDS )  
Run Code Online (Sandbox Code Playgroud)

但只是这种变化也会导致良好的测试用例失败.在我的两个改动中,NUM_WORDS的值正如预期的那样,所以看起来循环就是它失败的地方.

那么,原始隐含循环的等效DO循环是什么?或者我完全走错了路?
谢谢

fortran do-loops

5
推荐指数
1
解决办法
149
查看次数

使用数组成员作为fortran中do循环的控制变量

我很惊讶你不能把一个数组成员作为do循环的控制变量,如下所示:

program test
    integer, dimension(2) :: i 

    do i(1) = 1, 3
    do i(2) = 1, 3
        ! anything here
        write(*, *) i
    end do
    end do
end program
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么不允许这样做?

编辑: 或是允许但我做错了?

来自ifort v 11.1的错误消息是:

test.f90(4): error #5082: Syntax error, found IDENTIFIER 'I' when expecting one of: ( % : . = =>
    do i(1) = 1, 3
-------^
test.f90(4): error #5082: Syntax error, found ',' when expecting one of: <END-OF-STATEMENT> ;
    do i(1) = 1, 3
---------------^
test.f90(5): error …
Run Code Online (Sandbox Code Playgroud)

fortran fortran90 do-loops

5
推荐指数
3
解决办法
911
查看次数

VBA DO循环问题

我试图在powerpoint VBA中创建一个弹出问题,到目前为止一切顺利.但是下面的代码似乎不起作用.想法是你得到一个价值的弹出框,输入100 - 200(含).但必须输入一个值或可以接受failed作为输入.无法取消输入框或无效/空响应.内循环(循环1)似乎工作正常,但如果我输入150它不会终止循环2而是继续前进,除非类型失败但它停止任何文本而不是仅停止"failed".

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)

    'Declare Variables
    Dim xType, xLimitHi, xLimitLo, xPrompt As String
    Dim InputvarTemp As String
    Dim msgResult As Integer

    xLimitHi = 200
    xLimitLo = 100
    xPrompt = "Enter Value between 100 and 200 (Inclusive)"
    Do 'loop 2 check within limit or failed
        msgResult = vbNo
        Do 'loop 1 check Empty / Null or Cancelled input
            InputvarTemp = InputBox(xPrompt, xPrompt)
            If StrPtr(InputvarTemp) = 0 Then ' Check if …
Run Code Online (Sandbox Code Playgroud)

powerpoint vba powerpoint-vba do-loops powerpoint-2010

4
推荐指数
1
解决办法
300
查看次数

Scheme/Racket:做循环评估顺序

以下过程在方案r6rs和Racket中都有效:

;; create a list of all the numbers from 1 to n
(define (make-nums n)
  (do [(x n (- x 1)) (lst (list) (cons x lst))]
    ((= x 0)
     lst)))
Run Code Online (Sandbox Code Playgroud)

我已经为r6rs和Racket测试了它并且它确实正常工作,但我只知道DrRacket肯定.

我的问题是,如果保证了一步表达式((- x 1)(cons x lst)在这种情况下)将按顺序进行评估.如果不能保证,那么我的程序不是很稳定.

我没有在任何一种语言的标准中看到任何指定这一点的东西,但我在这里问,因为当我测试时它按顺序进行了评估.

operator-precedence racket do-loops

3
推荐指数
1
解决办法
2540
查看次数

如何在 Fortran 的 do 循环中跳过几次迭代

例如,我想以 2 为增量从 1 循环到 500。但是,对于每 8 个循环,我想跳过接下来的 18 个循环(使 do 变量增加 18)。我怎么做?

我的代码是:

event = 0
do i = 1,500,2
    event = event + 1
    if (event .eq. 8) then
          i = i + 18
          event = 0
    endif
enddo
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误消息:“DO 主体中的 do 变量不应出现在变量定义上下文中”。基本上我不能改变循环中的变量“i”。那么我应该如何编写代码来实现它呢?

谢谢。

fortran loops fortran77 fortran90 do-loops

3
推荐指数
1
解决办法
1901
查看次数

在do-loop中跳过迭代(fortran)

我想循环N次迭代,但是在特定条件下应该"跳过"一些迭代.我知道我可以使用goto语句来完成它,例如:

       do i = 1, N
          if condition(i) goto 14
          ! Execute my iteration if condition(i) is false
    14    continue
       end do
Run Code Online (Sandbox Code Playgroud)

但我有点害怕这些goto陈述,我想知道是否有另一种解决方案(我使用的是fortran 90,但对任何解决方案都感兴趣,即使它需要更新的版本).

iteration fortran fortran90 do-loops

3
推荐指数
1
解决办法
1521
查看次数