我是球拍编程语言的新手,所以作为快速测试,我在DrRacket上输入了这个:
>(define (test k)
(when (not (= k 0))
(begin
k
(test (- k 1)))))
>(test 5)
我期望输出: 54321
但反而得不到任何回报......
尝试了另一种方法:
>(define (test k)
(when (not (= k 0))
(begin
(test (- k 1)) k)))
>(test 5)
但是这只打印了5号。我不确定发生了什么。我究竟做错了什么?非常感谢任何帮助,并提前非常感谢你!
答案 0 :(得分:4)
如果要在控制台上显示该值,则必须显式打印,否则k
的行无效 - 请记住,Scheme的核心是函数式编程语言和条件返回 last 表达式的值,所有其他语句只是为效果执行,但不返回值。一些提示:
(define (test k)
(unless (zero? k) ; use unless instead of when-not, zero? instead of (= x 0)
(display k) ; display prints in console
(test (sub1 k)))) ; use sub1 instead of (- x 1)
答案 1 :(得分:0)
尝试了一种不同的方法,似乎产生了结果:
> (define (prnt k) k)
> (define (test k)
(when (not (= k 0))
(begin
(print k)
(test (- k 1)))))
> (test 5)
这打印54321这是我所期望的行为。不太确定为什么这样做但以前的尝试没有,但如果有人能够阐明这个话题,那将非常感激!