Common Lisp でリストの末尾に追加するマクロ
(defmacro push-2-tail (lat x)
`(setf ,lat (append ,lat (list ,x))))
(defvar *db* '((a b c) (d e f)))
(push-2-tail *db* '(g h i))
*db*
;; -> ((a b c) (d e f) (g h i))
;; なぜなら (push-2-tail *db* '(g h i)) は
;; こう展開される(こう書いたのと同じだ)から
;; (setf *db* (append *db* (list '(g h i))))
#CommonLisp #defmacro #push
SN 2013/08/01 00:41:18
Archives > CommonLisp_defmacro_test_01.html
(string= "aaaai" "aaa" :start1 0 :end1 3)
;; -> T
(string= "aaaai" "aaa")
;; -> NIL
(string= "aaa" "aaa")
;; -> T
#CommonLisp #Lisp #string= #CLISP
SN 2013/07/23 22:48:05
Archives > CommonLisp_string=.html
Common Lisp の文字列置換には substitute-if が使える。
Syntax は (substitute-if replacement predicate string)
(substitute-if #\_ (complement #'alphanumericp) "text-text-test!")
;; -> "text_text_test_"
(substitute-if #\_ #'alphanumericp "text-text-test!")
;; -> "____-____-____!"
(substitute-if #\_ #'(lambda (x) (equal x #\!)) "text-text-test!")
;; -> "text-text-test_"
(substitute-if #\_ #'digit-char-p "text1-text2-test3!")
;; -> "text_-text_-test_!"
参考:
Land of Lisp
#CommonLisp #Lisp #CLISP #substitute-if #alphanumericp #digit-char-p #complement
SN 2013/07/22 22:34:38
Archives > CommonLisp_substitute-if.html
Scheme の iota を Common Lisp でなるだけシンプルに書きなおしてみようと思って、まずは引数に max だけを取るバージョンを書いてみた。
(defun iota (max)
(labels ((iota-iter (n)
(if (<= n 0)
'()
(cons n (iota-iter (1- n))))))
(reverse (iota-iter max))))
(iota 10)
;; -> (1 2 3 4 5 6 7 8 9 10)
参考:
SRFI-1のiotaっぽいものをCommon Lispで書き直してみた(その2) - 新・日々録 by TRASH BOX@Eel
http://d.hatena.ne.jp/eel3/20090307/1236401934
#CommonLisp #Lisp #Scheme #iota
SN 2013/07/22 16:08:41
Archives > CommonLisp_simple_iota.html
;; CLISP でのマルチバイト文字
[1]> (char-code #\a)
97
[2]> (char-code #\あ)
12354
[3]> (code-char 12354)
#\HIRAGANA_LETTER_A
[4]> (char-code #\心)
24515
[5]> (code-char 24515)
#\U5FC3
[6]> (ext:convert-string-to-bytes "中村心" charset:utf-8)
#(228 184 173 230 157 145 229 191 131)
[9]> (ext:convert-string-from-bytes #(228 184 173 230 157 145 229 191 131) charset:utf-8)
"中村心"
[10]> *terminal-encoding*
#<ENCODING CHARSET:UTF-8 :UNIX>
[11]> (setf *terminal-encoding* charset:utf-8)
#<ENCODING CHARSET:UTF-8 :UNIX>
[12]> *default-file-encoding*
#<ENCODING CHARSET:UTF-8 :UNIX>
[13]> (setf *default-file-encoding* charset:utf-8)
#<ENCODING CHARSET:UTF-8 :UNIX>
参考:
Common Lisp と日本語 - LISPUSER
http://lispuser.net/commonlisp/japanese.html
Land of Lisp
#CommonLisp #Lisp #CLISP #encode #char-code #code-char #ext:convert-string-to-bytes #ext:convert-string-from-bytes
SN 2013/07/22 13:36:35
Archives > CommonLisp_study_02.html
© 2008-2013 Basic Werk