Basic Werk | Blog | Contact


MEMOMEM

CommonLisp_defmacro_test_01



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





CommonLisp_string=




(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





CommonLisp_substitute-if



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





CommonLisp_simple_iota



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





CommonLisp_study_02




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