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-05-01

KMRCLを眺める(147) STRING->LIST

| 15:57 | KMRCLを眺める(147) STRING->LIST - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(147) STRING->LIST - わだばLisperになる

今回はKMRCLのstrings.lispから、STRING->LISTです。

名前からすると、(coerce 文字列 'list)の別名かと思えますが、動作は、

(KL:STRING->LIST "いろはにほへと")
⇒ (いろはにほへと)

(KL:STRING->LIST "foo bar baz")
⇒ (FOO BAR BAZ)

という感じです。

実装を眺めてみると、

(defun string->list (string)
  (let ((eof (list nil)))
    (with-input-from-string (stream string)
      (do ((x (read stream nil eof) (read stream nil eof))
           (l nil (cons x l)))
          ((eq x eof) (nreverse l))))))

文字列をストリームとして読み込んでREADしてリストにして返すということみたいです。

ということで、

(KL:STRING->LIST "(foo bar baz)")
⇒ ((FOO BAR BAZ))

(KL:STRING->LIST "foo: bar: baz:")
>>> 読み込みエラー

ということにもなります。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100501