(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
(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_!"
参考:
#CommonLisp #Lisp #CLISP #substitute-if #alphanumericp #digit-char-p #complement
SN 2013/07/22 22:34:38
Archives > CommonLisp_substitute-if.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
#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
;; 関数ブロック内でローカルな変数を使いたい。 ;; 変数同士が独立しているなら let [1]> (let ((a 1) (b 2)) (+ a b)) 3
;; 変数同士がお互いを参照し合うなら let* [2]> (let* ((a 1) (b (+ a 1))) (+ a b)) 3
;; 関数ブロック内でローカルな関数を使いたい。 ;; 関数同士が独立しているなら flet [3]> (flet ((f (n) (+ n 10)) (g (n) (+ n 5))) (f (g 6))) 21
;; 関数同士がお互いを参照しているなら labels [4]> (labels ((f (n) (+ n 10)) (g (n) (+ 5 (f n)))) (g 6)) 21
;; 再帰関数をブロック内で定義するときも labels [5]> (labels ((iota-iter (n) (if (<= n 0) '() (cons n (iota-iter (1- n)))))) ;; 自分自身を呼び出している(再帰) (reverse (iota-iter 10))) (1 2 3 4 5 6 7 8 9 10)
参考:
#CommonLisp #Lisp #let #let* #flet #labels #CLISP #iota
SN 2013/07/21 22:37:41
Archives > CommonLisp_study_01.html
CLISP は ffcall とセットでインストールしておけというメモ。
$ sudo port install ffcall $ sudo port install clisp +dynffi
;; CLISP > (ql:quickload :cffi)
参考:
macでclispでcffi - tmp
http://d.hatena.ne.jp/TAKUMA_N/20110429/1304058909
Is there a way to get the CLISP compiled with dynamic FFI support on Mac OS?
上記のステップを踏んで CLISP をインストールすれば Mac OS X で CL-DBI を使ってもエラーなく動作します。
(ql:quickload :dbi) (defvar *db* (dbi-connect :sqlite3 :database-name "sample.db")) (defvar query (dbi:prepare *db* "SELECT code, name FROM members")) (defvar result (dbi:execute query))
;; dbi の fetch は plist の形で返される (dbi:fetch result) ;; -> (:|code| 1 :|name| john)
;; なので特定のカラムのデータを抜き出すには getf を使う (getf (dbi:fetch result) :|code|) ;; -> 2 ;; 実行する度に1レコード進む
中途半端ですが一旦メモ。
参考:
cl-dbi
http://quickdocs.org/cl-dbi/api
Common Lisp用のデータベースライブラリ「CL-DBI」を作りました - 八発白中
http://d.hatena.ne.jp/nitro_idiot/20120130/1327926575
Common LispのProperty Listユーティリティ「Multival-Plist」を公開しました - 八発白中
#CommonLisp #Lisp #cl-dbi #ffcall #CLISP #MacOSX #MacPorts #QuickLisp #SQL #SQLite
SN 2013/07/21 00:29:10
Archives > CommonLisp_dbi_memo_1.html
© 2008-2013 Basic Werk