我正在看来自Clojure的Scheme(Dr-Scheme)。
在Clojure中我可以输入
(print 'a 'b 'c)
并且print
函数指出这是一个任意数量的非字符串参数,并用空格分隔打印出来。
在Scheme中,print
函数需要一个参数。
有没有办法在Scheme中获得相当于Clojure的打印功能?
答案 0 :(得分:2)
有趣......你可以轻松地推出其中一个,但我不确定我是否认为需要它。例如:
#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并将其列入清单。
这是什么用例?
答案 1 :(得分:2)
也许您正在寻找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
答案 2 :(得分:0)
我使用这组定义来打印由新行分隔的多个参数:
(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"))))