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-09

KMRCLを眺める(150) ESCAPE-BACKSLASHES

| 19:20 | KMRCLを眺める(150) ESCAPE-BACKSLASHES - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(150) ESCAPE-BACKSLASHES - わだばLisperになる

今回もKMRCLのstring.lispの残り、ESCAPE-BACKSLASHESです。

動作は、

(KL:ESCAPE-BACKSLASHES "foo\\bar\\baz")
⇒ "foo\\\\bar\\\\baz"

というところで、名前のとおりバックスラッシュをエスケープ処理した文字列を返します

定義は、

(defun escape-backslashes (s)
  (substitute-string-for-char s #\\ "\\\\"))

となっていて、内部では、 SUBSTITUTE-CHARS-STRINGS を利用してバックスラッシュを追加しています。

自分もすっかり忘れていたのですが、CLでは、文字列中のバックスラッシュ(とダブルクォート)はエスケープして表現する必要があります。

(LENGTH "123\456\7890")
;⇒ 10

(LENGTH "123\\456\\7890")
;⇒ 12

ちなみに、シンボルの場合も似ていますが、文字列とシンボルでは、ダブルクォートとパイプの役割が逆転した感じになっています。

'|"|
;⇒ |"|

"|"
;⇒ "|"

'|\||
;⇒ |\||

"\""
;⇒ "\""

"\\"
;⇒ "\\"

'|\\|
;⇒ |\\|

'|"\foo"|
;⇒ |"foo"|

"|\foo|"
;⇒ "|foo|"

ゲスト



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