我正在查看来自 Clojure 的 Scheme (Dr-Scheme)。
在 Clojure 我可以输入
(print 'a 'b 'c)
并且该print
函数计算出这是任意数量的非字符串参数并将它们打印出来,并用空格分隔。
在 Scheme 中,print
函数需要一个参数。
有没有办法在 Scheme 中获得相当于 Clojure 的打印功能?
有趣......你可以很容易地推出其中之一,但我不确定我是否需要它。例如:
#lang racket
(define (print-many . args)
(display
(apply
string-append
(add-between (map print-to-string args) " "))))
(define (print-to-string arg) (format "~v" arg))
(print-many 3 4 5 'b '(3 3 4))
不过,总的来说,我认为如果您为用户生成输出,您将希望更好地控制输出,如果您不为用户生成输出,您也会很高兴拍打它周围的一对parens并使其成为一个列表。
这有什么用例?
也许您正在寻找trace
?
#lang racket
(define (foo x y)
(+ x y))
(define (bar x)
(+ (foo 1 x)
(foo 2 (+ x 1))))
(require racket/trace)
(trace foo)
然后在交互窗口中:
> (bar 3)
>(foo 1 3)
<4
>(foo 2 4)
<6
10
我使用这组定义来打印由新行分隔的多个参数:
(define (println x) (display x) (newline))
(define (printlist l) (begin
(println (car l))
(if (not (null? (cdr l))) (printlist (cdr l)))))
(define (multiprint . args) (begin
(if (not (null? args)) (printlist args)
(println "Error: multiprint requires at least one argument"))))