Clojure中打印函数的等效方案

时间:2012-06-05 04:26:00

标签: clojure scheme racket

我正在看来自Clojure的Scheme(Dr-Scheme)。

在Clojure中我可以输入

(print 'a 'b 'c)

并且print函数指出这是一个任意数量的非字符串参数,并用空格分隔打印出来。

在Scheme中,print函数需要一个参数。

有没有办法在Scheme中获得相当于Clojure的打印功能?

3 个答案:

答案 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"))))