Basic Werk | Blog | Contact


MEMOMEM

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





CommonLisp_study_01




;; 関数ブロック内でローカルな変数を使いたい。 ;; 変数同士が独立しているなら 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)


参考:

Land of Lisp


#CommonLisp #Lisp #let #let* #flet #labels #CLISP #iota



SN 2013/07/21 22:37:41

Archives > CommonLisp_study_01.html





CommonLisp_dbi_memo_1



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?

http://stackoverflow.com/questions/3901698/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」を公開しました - 八発白中

http://d.hatena.ne.jp/nitro_idiot/20120228/1330425112


#CommonLisp #Lisp #cl-dbi #ffcall #CLISP #MacOSX #MacPorts #QuickLisp #SQL #SQLite



SN 2013/07/21 00:29:10

Archives > CommonLisp_dbi_memo_1.html