Recursion DrRacket递归函数
我是racket编程语言的新手,所以作为一个快速测试,我在DrRacket上输入了以下内容:Recursion DrRacket递归函数,recursion,racket,Recursion,Racket,我是racket编程语言的新手,所以作为一个快速测试,我在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
>(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。我不知道发生了什么事。我做错了什么?非常感谢您的帮助,并提前向您表示感谢 只是尝试了一种不同的方法,似乎取得了效果:
> (define (prnt k) k)
> (define (test k)
(when (not (= k 0))
(begin
(print k)
(test (- k 1)))))
> (test 5)
这是我预期的54321。不太清楚为什么这样做有效,但之前的尝试没有,但如果有人能够阐明这个主题,那将不胜感激 只是尝试了一种不同的方法,似乎取得了效果:
> (define (prnt k) k)
> (define (test k)
(when (not (= k 0))
(begin
(print k)
(test (- k 1)))))
> (test 5)
这是我预期的54321。不太清楚为什么这样做有效,但之前的尝试没有,但如果有人能够阐明这个主题,那将不胜感激 如果希望在控制台上显示值,则必须显式打印该值,否则带有k
的行将无所作为-请记住,Scheme的核心是一种函数式编程语言,条件返回最后一个表达式的值,所有其他行都只是为了实现此效果而执行,但不要返回值。以下几点提示:
(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)
如果希望在控制台上显示值,则必须显式打印该值,否则带有k
的行将无所作为-请记住,Scheme的核心是一种函数式编程语言,条件返回最后一个表达式的值,所有其他行都只是为了效果而执行,但不要返回值。以下几点提示:
(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)
这是因为您使用的是
(print k)
,而不是原始代码中的k
。这就像说if(true){x;返回y;}else z
,在此代码中,y
返回,但x
完全不执行任何操作<代码>(如果#t(begin x y)z)的工作方式完全相同。这是因为您在原始代码中使用的是(print k)
,而不仅仅是k
。这就像说if(true){x;返回y;}else z
,在此代码中,y
返回,但x
完全不执行任何操作(如果#t(开始x y)z)
的工作方式完全相同。