2

Clojure からの Scheme (Dr-Scheme) を見ています。

Clojure では入力できます

(print 'a 'b 'c)

print関数は、これが任意の数の非文字列引数であることを認識し、それらをスペースで区切って出力します。

Scheme では、print関数は 1 つの引数を想定しています。

スキームでClojureの印刷機能に相当するものを取得する方法はありますか?

4

3 に答える 3

2

興味深い...あなたはそれらの1つをかなり簡単に転がすことができます、しかし私はそれの必要性を見るかどうかわかりません。例えば:

#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))

ただし、一般的に、ユーザー向けの出力を生成する場合は、出力をより適切に制御する必要があり、ユーザー向けの出力を生成しない場合も、同様に満足していると思います。その周りに一対のパレンを叩き、それをリストにします。

これのユースケースは何ですか?

于 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 に答える