トップ «前の日記(2016-04-05(Tue)) 最新 次の日記(2016-04-07(Thu))» 編集

屑俺日記

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


2016-04-06(Wed) なんとなく肌寒く

逆向き

てけとうにEmacsLispで。

(defun rcar(lat)
  (cond
   ((null (cdr lat)) (car lat))
   (t
    (rcar (cdr lat)))))
 
(rcar '(foo bar buzz))
buzz
(defun rcdr(lat)
  (cond
   ((null (cdr lat)) '())
   (t
    (cons (car lat) (rcdr (cdr lat))))))
 
(rcdr '(foo bar buzz fizz))
(foo bar buzz)
(defun rcons(lat a)
  (cond
   ((null lat) (cons a '()))
   (t
    (cons (car lat) (rcons (cdr lat) a)))))
 
(rcons '(foo bar buzz) 'hoge)
(foo bar buzz hoge)

で、リストを逆順に。

(defun reverse (lat)
  (cond
   ((null lat) '())
   (t
    (rcons (reverse (cdr lat) ) (car lat)))))
 
(reverse '(foo bar buzz fizz))
(fizz buzz bar foo)

前に後に

後ろは少し難しく感じたが、 rcons なんて 要らなかったようだ。

(defun insertF (a b lat)
  (cond
   ((null lat) '())
   ((eq a (car lat)) (cons b lat))
   (t
    (cons (car lat) (insertF a b (cdr lat))))))
 
(insertF 'foo 'bar '(hoge fizz foo buzz))
(hoge fizz bar foo buzz)
(defun insertR (a b lat)
  (cond
   ((null lat) '())
   ((eq a (car lat)) (cons a (cons b (cdr lat))))
   (t
    (cons (car lat) (insertR a b (cdr lat))))))
 
(insertR 'foo 'bar '(fizz buzz hoge foo fizzbuzz)
(fizz buzz hoge foo fizzbuzz)

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。