[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:575]create-fontset-from-request



;; ちゃちゃ

>>>>> [meadow-develop : No.572] にて“himi”= Miyashita Hisashi(宮下 尚
>>>>> :HIMI) <himi@xxxxxxxxxxxxxxxxxxxxxxxxx> さま曰く:

himi> > mw32misc.elの552行目に、
himi> > (setcdr curle fontname)
himi> > というものがあるのですが、これは何をしているのでしょうか。
himi> > ここでcurleの内容を変更しても、その後の行では使われていないようですし、
himi> > whileループの最初で、(setq curle (car curll))によって、
himi> > バインドされ直してしまうので、意味がないように思われます。
himi> > Typoでしょうか。

himi> Lispは関数型言語のくせに副作用を持つ言語です。
himi> (この性質のため嫌いな人もいらっしゃる)
himi> (って、副作用を持たない言語なんてそうはないですが)

  pure Lisp は関数型言語だけど Lisp はそうじゃないという話も。

;; Haskel とか Gofer は関数型言語だろうけど、Lisp はちょっと辛いかな?
;; ML はどうかな?

  ちなみに Scheme は actor model からみで作ったんだからオブジェクト指向
言語かエイジェント指向言語なんだろうか?(^_^)

  まあ、閉包のない Emacs Lisp には関係のない話ですが。


himi> この場合はlogfont-listへの副作用を用いています。

himi> とくにsetcar, setcdrはとてつもなく腐った命令で、Listを強制的に置き
himi> 換える、非常にやな命令です。(って、多用している人はどこのどいつ?)

himi> ## むかし、LISPのList反転(reverse、実体はnreverse)にreplaca, replacdを
himi> ## 使って書いたら...

himi> だけど、こういうスピードが要求されるところでは、贅沢は言っていられ
himi> ません。consとか、appendとか、list関数を使って新しいリストを作るな
himi> んてことはせず、すでにあるものを置き換えていきます。

(略)

himi> って、書くのでしょう。
himi> だけど、これやると、logfont-listのCONSセルがlet* formから出ると
himi> 全部無駄になって(unboundになって)、GCが発生します。:-P

himi> logfont-listのメモリセルは割り当てたまま、使ってしまえ、という
himi> 汚い構造が、(setcdr curle fontname)に現れているのです。

himi> まあ、どうせletの中だけの話だし、それほど汚い構造は外に出て行きま
himi> せんしね。(とはいえど、ここから関数を呼び出すと
himi> Emacs LispのDynamic Extentのために外に漏れないわけではありません。
himi> とはいえど、ほとんど問題ないと思いますが)

  S 式の風呂敷に収まっているなら何でもありです。(^_^;;;

;; ELIS という某 Lisp machine では C の malloc & free みたいに一度記憶を
;; 割り当てて終ったら開放するとか、GC-less の関数に組織的に置き換える特
;; 殊形式みたいな怪しげなものがあった。(^_^; まあ、real time system だと
;; いるのかな?

  まあ、Lisp は List Processor の略なので、cell を意識しながら program 
するのは至極真っ当なのかな?(もっとも、あんまりやりすぎると末期症状だけ
ど)。


  そういえば、関数型言語のくせに副作用を認めていて、それを『世界から世界
への関数』とかぬかしているのがあったっけ?(ML だったっけ?)

  関数型言語の道を貫くなら、等式論理命で、項書換え系かな?(^_^; ついでに、
仕様を形式的に書いて Cafe Obj とかの仕様記述言語を使うとか。(^_^;;;

;; いつもこんな記事ばっかりですみません。(^_^;;;
-- 
===『思春期 term, 書き換え OK! 恋する TRS』===========================
                                         守岡 知彦 (MORIOKA Tomohiko)
======================================== Email: <morioka@xxxxxxxxxxx>=