トップ «前の日記(2013-04-23(Tue)) 最新 次の日記(2013-04-25(Thu))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2013-04-24(Wed)

emacs lisp でも

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

telse に変えるとうまくできなかった。

末尾に追加

引き続き 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や内容が変った場合はあしからず。

index.htmlは ここから。