トップ «前の日記(2013-03-22(Fri)) 最新 次の日記(2013-03-25(Mon))» 編集

屑俺日記

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


2013-03-24(Sun) なんとなく晴れていた。風はまだ少し冷たい

clisp

LISPの本を買った。
4ページの性格判定によると、Common Lisp 向きとのことであった。

> (eq (not t) (cdr '(foo)))
T
gosh> (eq? #f '())
#f

まあ、このあたりの違いに騒ぐつもりはあまりない。

if には progn

if の下で複数の処理をするには progn だそうだ。
そういえば、手続き型言語の多くに当然のごとく 用意されてる区切り符号とかインデントとか、 がなかった。

> (if (eq nil t)                                                                                                    
          (progn (princ "foo") (princ "bar"))                                                                           
        (progn (princ "bar" ) (princ "foo")))
barfoo
"foo"

書きやすそうだけど、どうも if は

car と cdr だけじゃないらしい。

とりあえず、car cdr で同じになったものを 付け足しておく。

> (cadr '((1 2 3) (4 5 6) (7 8 9)))
(4 5 6)
> (car (cdr '((1 2 3) (4 5 6) (7 8 9))))
(4 5 6)

cadr は、 carと cdrか。

> (caddr '((1 2 3) (4 5 6) (7 8 9)))
(7 8 9)
> (car (cdr (cdr '((1 2 3) (4 5 6) (7 8 9)))))
(7 8 9)

caddr は、 carと cdrと cdrらしい。

> (cddar '((1 2 3) (4 5 6) (7 8 9)))
(3)
> (cdr (cdr (car '((1 2 3) (4 5 6) (7 8 9)))))
(3)

cddar は、 cdrと cdrと carでいいのかしら。

> (cadadr '((1 2 3) (4 5 6) (7 8 9)))
5
> (car (cdr (car (cdr '((1 2 3) (4 5 6) (7 8 9))))))
5

cadadr は、 carと cdrと carと cdr らしいが、もーわからん。

同じみたいでも同じでない

スクリプト言語によっては、かなり移入されてる気が。

> (setf foo '(1 2 3))
(1 2 3)
> (setf bar '(1 2 3))
(1 2 3)
> (eq foo bar)
NIL
> (equal foo bar)
T
 
> (setf foo2 foo)
(1 2 3)
> (setf foo3 foo)
(1 2 3)
> (eq foo2 foo3)
T

scheme で書けば

リストの要素を数えるCommon Lisp が例題に載っていた。
手習い風に書いてみた。

(define my-length
  (lambda (list)
    (cond
     ((null? list) 0)
     (else
      (+ 1
         (my-length
          (cdr list)))))))
 
gosh> (my-length '(1 2 3 4 5 6))
6

member

シンボルがリストにあれば、それとその後ろすべての リストを返す。
なければ偽を返す。

どっちも似たようなものなんだろうな。

> (member 'foo '(1 2 foo nil t))
(FOO NIL T)
> (member nil '(1 2 foo nil t))
(NIL T)
> (member 3 '(1 2 foo nil t))
NIL
gosh> (member 'foo '(1 2 foo #f #t))
(foo #f #t)
gosh> (member #f '(1 2 foo #f #t))
(#f #t)
gosh> (member 3 '(1 2 foo #f #t))
#f

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

index.htmlは ここから。