2009/03/31

[The Little Schemer]cons

The Little Schemer」P.7 ~

 

  • The Law of Cons
    • The primitive cons takes two arguments.The second argument to cons must be a list.the result is a list.
    • 組み込み手続きconsは2つの引数を取る。第二引数は必ずlistでなければならない。結果もlistとなる。

 

(cons 'peanut '(butter and jelly))
;; => (peanut butter and jelly)
  • cons手続きはlistの先頭にatomを追加する
  • 読み
    • cons the atom peanut onto the list (butter and jelly)

 

(cons '(banana and) '(peanut butter and jelly))
;; => ((banana and) peanut butter and jelly)
  • cons手続きはlistの先頭にS式を追加する

 

(cons '((help) this) '(is very ((hard) to learn)))
;; => (((help) this) is very ((hard) to learn))
  • cons手続きは2つの手続きを取る
    • 第一引数にはなんらかのS式
    • 第二引数にはなんらかのlist

 

(cons '(a b (c)) '())
;; => ((a b (c)))
  • ()はlistであるから

 

(cons a '())
;; => (a)

 

(cons '((a b c)) 'b)
;; => (((a b c)) . b)
  • The Little Schemerでは・・・
    • No Answer, since the second argument l must be a list.
    • 回答なし、第二引数は必ずlistでなければならない
      • Gaucheでは(つい)が返る
        • (((a b c)) . b)

 

  • In practice
    • (cons a b) works for all values a and b
    • (car (cons a b)) = a
    • (cdr (cons a b)) = b

では、No Answerとはどういうこと?

 

(cons 'a 'b)
  • No Answer, Why?
    • 取り合えず回答
      • Because the second argument must be a list.
      • 第二引数はlistでなければならないため
        • でも・・・対は?

 

(cons 'a (car'((b) c d)))
;; => (a b)
  • Why?
    • (car '((b) c d))
      • (b)
    • (cons 'a '(b))
      • (a b)

 

(cons 'a '((b) c d))
;; => (a c d)
    • Why?
      • (cdr '((b) c d))
        • (c d)
      • (cons 'a '(c d))
        • (a c d)

0 件のコメント:

コメントを投稿