如何在Scheme(STK)中省略参数

时间:2012-08-22 09:20:47

标签: scheme

可能是一个简单的问题:我想包装Scheme的“(format ..)”函数,以便处理我的调试输出(包括格式字符串的包装)。

由于“格式”需要一个可变数量的参数,我的包装器需要这样做,这也产生了一个关于如何告诉scheme有一个省略号参数以及如何引用它的问题。

我想到了这样的事情:

(define debugPrint
    (lambda (formatString ELLIPSIS_PARAMETER)
        (if debug
            (format #t (string-append "<!--" formatString "-->") ELLIPSIS_PARAMETER)
            ()
        )
    )
)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

这里有点符号:

(define (debugPrint formatString . params)
 (if debug
   (apply format #t (string-append "<!--" formatString "-->") params)
   '()))

请注意apply,因为点符号包含列表中的所有参数,当您使用(debugPrint "~a: ~a" key name)时,formatString将绑定到"~a: ~a"params将绑定到(key name)(确保键和名称的值,而不是符号;)。