2012-08-22 46 views
1

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

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

我认为是这样的:

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

感谢您的帮助提前!

回答

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) (确定键和名称的值,而不是符号;)。

+0

啊,就这样吧:) - 另外没有lambda的符号也不错。我应该阅读关于如何编写方案的教程,而不是阅读其他人的代码;) – milnet