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





Scheme_nth_of




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





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