2

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

在 Clojure 我可以输入

(print 'a 'b 'c)

并且该print函数计算出这是任意数量的非字符串参数并将它们打印出来,并用空格分隔。

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

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

4

3 回答 3

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并使其成为一个列表。

这有什么用例?

于 2012-06-05T04:46:09.013 回答
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
于 2012-06-05T09:35:40.330 回答
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"))))
于 2012-06-05T11:06:01.667 回答