牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Scheme と cons と Python と

早くもSICPの2章でわけわからんと思ってたら、なんかSequenceの扱いを勘違いしてただけだったかも(||゚Д゚)
scheme の cons や append と python の appendとか
なので確認してみる。


scheme

gosh> (cons (list 1 2 3 4 5)  (list 1 2 3 4 5))
((1 2 3 4 5) 1 2 3 4 5)
gosh> (append (list 1 2 3 4 5)  (list 1 2 3 4 5))
(1 2 3 4 5 1 2 3 4 5)

python

>>> [[1, 2, 3, 4, 5]] + [1, 2, 3, 4, 5]
[[1, 2, 3, 4, 5], 1, 2, 3, 4, 5]
>>> [1, 2, 3, 4, 5] + [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>>
>>> a = [1, 2, 3, 4, 5]
>>> b = [1, 2, 3, 4, 5]
>>> c = [1, 2, 3, 4, 5]
>>> a.append([1, 2, 3, 4, 5])
>>> a
[1, 2, 3, 4, 5, [1, 2, 3, 4, 5]]
>>> b.extend([1, 2, 3, 4, 5])
>>> b
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> c.insert(0, [1, 2, 3, 4, 5])
>>> c
>>> [[1, 2, 3, 4, 5], 1, 2, 3, 4, 5]
>>> 
>>> [[1, 2, 3, 4, 5]].__add__([1, 2, 3, 4, 5])
[[1, 2, 3, 4, 5], 1, 2, 3, 4, 5]
>>> [1, 2, 3, 4, 5].__add__([1, 2, 3, 4, 5])
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>>
#ちなみにこれはできない
>>> [1, 2, 3, 4, 5].append([1, 2, 3, 4, 5])
>>> print [1, 2, 3, 4, 5].append([1, 2, 3, 4, 5])
None


とりあえず scheme の(cons x y) を python では [x] + y で代用していいのかな?。
Lisp プログラマのための Python 人門では「これはやらないように」とあるけど。うまい方法が思いつかないからこれで行こう(暫定)