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
;; key が lst の何番目 (nth) の要素かを返す関数
;; 先頭が 0 番目
(define (nth-of key lst)
(let f ((nth 0)
(l lst))
(cond ((null? l) #f)
((equal? key (car l)) nth)
(else (f (+ nth 1) (cdr l))))))
(nth-of 'code '(code name sort))
;; -> 0
(nth-of 'name '(code name sort))
;; -> 1
(nth-of 'price '(code name sort))
;; -> #f
#Scheme #Lisp #nth #named-let #Gauche
SN 2013/07/22 19:33:20
Archives > Scheme_nth_of.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
© 2008-2013 Basic Werk