Clojure からの Scheme (Dr-Scheme) を見ています。
Clojure では入力できます
(print 'a 'b 'c)
print
関数は、これが任意の数の非文字列引数であることを認識し、それらをスペースで区切って出力します。
Scheme では、print
関数は 1 つの引数を想定しています。
スキームでClojureの印刷機能に相当するものを取得する方法はありますか?
興味深い...あなたはそれらの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))
ただし、一般的に、ユーザー向けの出力を生成する場合は、出力をより適切に制御する必要があり、ユーザー向けの出力を生成しない場合も、同様に満足していると思います。その周りに一対のパレンを叩き、それをリストにします。
これのユースケースは何ですか?
おそらくあなたは探してい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"))))