2021年6月8日火曜日

PythonとLispのリストのことなど

 Windows版のEmacsを見ていたらPythonが同梱されていた。
 オライリーのPython本がでたとき、手をつけてみようと思ったのだけど、なんだかんだとやらなかったので、ちょっと心理的な敷居は高いのだけれど、LispハッカーのPeter Norvigも最近はPythonを使っているようだし。

 たとえば、PythonにもListがあるのだけれど。

>>>  wrk =[1,2,3,4]
 wrk =[1,2,3,4]
>>> wrk
wrk
[1, 2, 3, 4]
>>> 

 Listの途中の値を変更するにはこうするらしい。

>>>  wrk[2]=99
 wrk[2]=99
>>> wrk
wrk
[1, 2, 99, 4]
>>> 

 そういえば、lispには直接、Listを変更する構文はないなぁ。そのかわりにsetfというものがある。

( setq wrk '(1 2 3 4))
(1 2 3 4)

wrk
(1 2 3 4)

( setf (elt wrk 2) 99)
99

wrk
(1 2 99 4)

 どちらが読み易いか、というと、Pythonの方だろうなぁ。setfは変態すぎる。

(setq wrk  "ABCDEF")
 "ABCDEF"

wrk
 "ABCDEF"

(setf (substring wrk 2 3)  "Z")
 "ABZDEF"

wrk
 "ABZDEF"

 こんなことまでできるし。
 まぁ、この程度ならPythonでも文字列のあつかいがimmutableでなければ、できるんだろうけど。
 Pythonそのものがサポートしないといけない。
 ところが、setfってたしか、マクロだからLispが構文的にサポートしているわけじゃないんだよなぁ。