Scheme博士的递归

时间:2014-05-06 16:57:56

标签: scheme racket

我正在创建一个使用递归来打印列表元素的简单代码:

(define (printList list)
  (if (empty? list)
      '()
      (begin
        (display (car list))
        (printList (cdr list)))))

它确实有效,但我想知道是否有一种不打印空列表的方法。当我用(printList'(1 2 3 4))运行我的程序时,我得到了:

1 2 3 4()

有什么方法可以解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:5)

您的输出包含

  1. display s:1234(颜色:粉红色)
  2. 函数的结果:'()(颜色:蓝色)
  3. Dr Racket不会打印该功能的结果void,因此您可以在基本情况下返回void

    (define (printList list)
      (if (empty? list)
          (void)
          (begin
            (display (car list))
            (printList (cdr list)))))
    

    但是说

    会更优雅
    (define (printList list)
      (unless (empty? list)
        (display (car list))
        (printList (cdr list))))
    

    如果列表为空并且不需要明确的void,则会隐式返回begin