僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
alist で遊んでみた。
今度は部分一致を消す。
(defun rm_part (anum dnum alist)
(cond
((null alist) nil)
((eq anum (car (car alist)))
(rm_part anum dnum (cdr alist)))
((eq dnum (cdr (car alist)))
(rm_part anum dnum (cdr alist)))
(t
(cons (car alist)
(rm_part anum dnum
(cdr alist))))))
(setq alist '((1 . 5) (2 . 3) (5 . 1) (1 . 7) (3 . 5) (7 . 8))) ((1 . 5) (2 . 3) (5 . 1) (1 . 7) (3 . 5) (7 . 8)) (rm_part 1 5 alist) ((2 . 3) (5 . 1) (7 . 8))
t を else に変えるとうまくできなかった。
引き続き Emacs Lisp で。
(defun add_list (add list) (cond ((null list) (cons add list)) (t (cons (car list) (add_list add (cdr list))))))
(add_list 7 '(4 5 6)) (4 5 6 7)
今度は位置指定で。
範囲外なら最初か最後で。
(defun add_num_list (add num list) (cond ((or (< num 1) (null list)) (cons add list)) (t (cons (car list) (add_num_list add (- num 1) (cdr list))))))
(setq list '(foo bar baz qux quux)) (foo bar baz qux quux) (add_num_list 'hoge -3 list) (hoge foo bar baz qux quux) (add_num_list 'hoge 0 list) (hoge foo bar baz qux quux) (add_num_list 'hoge 3 list) (foo bar baz hoge qux quux) (add_num_list 'hoge 10 list) (foo bar baz qux quux hoge)
19年前の scheme の本を借りた(まだ
売ってるらしい)。
()内では左が上、どれかより右にあると移れず、
どれか、より大きいものの左にしか移れない。
とすると、こんな感じ...かもしれない。
(() () (Small Medium Large)) ((Small) () (Medium Large)) ((Small) (Medium) (Large)) (() (Small Medium) (Large)) ((Large) (Small Medium) ()) ((Large) (Medium) (Small)) ((Medium Large) () (Small)) ((Small Medium Large) () ())
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。