println なマクロ書いた

処理系によって print が改行しなかったり無かったりするのがムカついたので書いた。

(define-syntax println
  (syntax-rules ()
    ((_)
     (begin
       (newline)))
    ((_ a b ...)
     (begin
       (display a)
       (println b ...)))))

使い方はこんな感じ:

(println "foo")
(println)
(println "foo" "bar")
(println)
(println "foo" "bar" "quz")
(println)
(println '(foo) '(foo bar) '(foo bar quz))

出力結果はこんな感じ:

foo

foobar

foobarquz

(foo)(foo bar)(foo bar quz)

更新

  1. 2 つ目のルールが要らないという風のうわさを試してみたら本当に要らなかったので消した。