Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-09-28

KMRCLを眺める(207) CMSG

| 23:24 | KMRCLを眺める(207) CMSG - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(207) CMSG - わだばLisperになる

random.lispも眺め終えたので、今回は、KMRCLのconsole.lispからCMSGです。

console.lispはその名の通りコンソールでなにかするため(主にログを出力したり)のユーティリティの用です。

CMSGの定義は、

(defvar *console-msgs* t)

(defun cmsg (template &rest args)
  "Format output to console"
  (when *console-msgs*
    (setq template (concatenate 'string "~&;; " template "~%"))
    (apply #'format t template args)))

となっていて、*CONSOLE-MSGS*の値で出力したりしなかったりを制御できるようにしてあり、あとは先頭にコメントの;; を付けるというシンプルなものです。

(kl:cmsg "Hello, World!")
->
;; Hello, World!

FORMATに投げているので、FORMATのオプションも色々使えます。

(progn
  (kl:cmsg "~37,,,'*A" "")
  (kl:cmsg "~37:@<~A~>" "Hello, World!")
  (kl:cmsg "~37,,,'*A" ""))
;⇒ NIL
;->
;; *************************************
;;             Hello, World!            
;; *************************************

こういう風にFORMATに丸投げする際には、オプションも渡せるようにしてFORMATの高機能を生かすというパターンは良くみかける気がします。