トップ «前の日記(2013-04-22(Mon)) 最新 次の日記(2013-04-24(Wed))» 編集

屑俺日記

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


2013-04-23(Tue) よく晴れて、摂氏9度

alistで少し遊ぶ。

特定のalistを消す。

(define rm_car
  (lambda (num alist)
      (cond
       ((null? alist) '())
       ((eq? num (car (car alist)))
        (rm_car num (cdr alist)))
       (else
        (cons (car alist)
              (rm_car num (cdr alist)))))))
(rm_car 3 '((1 . 3) (3 . 7) (2 . 5) (3 . 1)))
((1 . 3) (2 . 5))

alist の cdr を消すなら、 5行目 を ((eq? num (cdr (car alist))) にして s/_car/_cdr/g といったところか。

alistで、も少し遊ぶ。

部分一致でなく完全一致。
コピペのためか、括弧の位置を間違えて なかなか動かず、ひとしきり迷う。

(define rm_alist
  (lambda (anum dnum alist)
      (cond
       ((null? alist) '())
       ((and (eq? anum (car (car alist)))
             (eq? dnum (cdr (car alist)))
             (rm_alist anum dnum (cdr alist))))
       (else
        (cons (car alist)
              (rm_alist anum dnum (cdr alist)))))))
(rm_alist 3 5
          '((3 . 5) (3 . 2) (5 . 5)
            (3 . 7) (5 . 3) (3 . 5) (3 . 3)))
 
((3 . 2) (5 . 5) (3 . 7) (5 . 3) (3 . 3))

and を or に変えると、 alist が根こそぎになって #t だけが返る。はてさてどうしたものか。
7行め9,10行めを すげかえると、一致したものだけが返るようになった。


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

index.htmlは ここから。