我帮助我的兄弟(他将作为CS专业开始他的学习)在函数式编程中,我并不熟悉但理解这些原理。
您是否可以帮助我纠正以下用于显示Hello World 10次的Racket脚本,而无需更改或添加特定方法,例如' display' ?
谢谢
#lang Racket
(define (HelloWorld n)
(cond [(= n 0) " "]
[(= n 1) "Hello, world !"]
[(> n 1) (HelloWorld (- n 1))]
)
)
答案 0 :(得分:4)
您的程序将显示“Hello World!”只有一次,因为在递归调用中你不打印任何东西。只返回调用的最终结果,这包含字符串“Hello World!”。
另一方面,在不打印字符串的情况下显示 n 次字符串的唯一方法是通过连接字符串 n 次来产生结果。例如:
#lang Racket
(define (HelloWorld n)
(if (<= n 0)
""
(string-append "Hello, world ! " (HelloWorld (- n 1)))))
> (HelloWorld 10)
"Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! "
注意递归是如何工作的:最后一种情况是n <= 0
(这比n = 0
更好,以避免使用负输入进行infinte递归),在这种情况下,结果是空字符串。在n > 0
的情况下,一旦字符串与函数的结果应用于n-1
,就会获得结果。