Functional programming scheme中的循环和迭代。
我在复习离散数学课上的一些问题,读了一篇引起我注意的练习(注意:这不是家庭作业,我只是好奇而已) 问题:对于以下程序段,“print”语句执行了多少次?(i,j,k,m是整数): 我试着用python来做,但是很无聊,因为我在几秒钟内就完成了。所以为了好玩,我试着用DrRacket用scheme作为语言。然而,在阅读了关于循环的文档之后,我似乎找不到这类循环的参考。那么,使用这个特定的例子(或者我猜是一个循环数不确定的普通例子),如何解决这个问题呢?这样的循环:Functional programming scheme中的循环和迭代。,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我在复习离散数学课上的一些问题,读了一篇引起我注意的练习(注意:这不是家庭作业,我只是好奇而已) 问题:对于以下程序段,“print”语句执行了多少次?(i,j,k,m是整数): 我试着用python来做,但是很无聊,因为我在几秒钟内就完成了。所以为了好玩,我试着用DrRacket用scheme作为语言。然而,在阅读了关于循环的文档之后,我似乎找不到这类循环的参考。那么,使用这个特定的例子(或者我猜是一个循环数不确定的普通例子),如何解决这个问题呢?这样的循环: for i := 1 to 20
for i := 1 to 20 do
for j := 1 to i do
print [i, j]
与球拍中的相同,假设循环范围如下:1到20
包括从1到(包括)20的所有数字
请注意,上述内容不限于一个嵌套循环,您可以根据需要声明尽可能多的嵌套循环和迭代变量。这样的循环:
for i := 1 to 20 do
for j := 1 to i do
print [i, j]
与球拍中的相同,假设循环范围如下:1到20
包括从1到(包括)20的所有数字
请注意,以上内容不限于一个嵌套循环,您可以根据需要声明任意多个嵌套循环和迭代变量。MIT Scheme:
(do ((cnt 0) (i 1 (+ i 1))) ((> i 20) cnt)
(do ((j 1 (+ 1 j))) ((> j i))
(do ((k 1 (+ 1 k))) ((> k j))
(do ((m 1 (+ 1 m))) ((> m k))
(set! cnt (+ 1 cnt))))))
;Value: 8855
但这实际上是一个数学问题,而不是编程问题。麻省理工学院方案:
(do ((cnt 0) (i 1 (+ i 1))) ((> i 20) cnt)
(do ((j 1 (+ 1 j))) ((> j i))
(do ((k 1 (+ 1 k))) ((> k j))
(do ((m 1 (+ 1 m))) ((> m k))
(set! cnt (+ 1 cnt))))))
;Value: 8855
但这实际上是一个数学问题,不是一个编程问题