CommonLisp初心者スレ
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNGと、 , ´ ・("▼)・ ヽノ
.> ,,, _フil=li=、_<
( /彡 ┃ ┃{i|
ゝ(|il(_, ''' ヮ''丿|
〆(⌒)-ーー-(⌒)>2ゲッシ!
( i⌒ヽ, i⌒ヽ,
ヽゝ、__ノー-ーゝ、__ノ
0003デフォルトの名無しさん
NGNG本家スレは高度過ぎて質問しずらい。
LISPやりけど、何していいかわからん。
他いろいろ。
な、初級LISPスレにしていきたいなぁ。
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006最凶VB厨房
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGSICP読書スレを立てるとか
0010デフォルトの名無しさん
NGNGWiLiKi に逝くとか何事も無かったのようにここで語るとか。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNGドキュメントが激しく読みにくいんだが・・・。
0013デフォルトの名無しさん
NGNGっつーかその程度しか環境しらん。
0014デフォルトの名無しさん
NGNGM-x run-lispでインタラクテチブだぜ!
0015デフォルトの名無しさん
NGNGttp://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGHello World
"Hello World"
何で二回出力されるんだ!わからん!もういい寝る!
0018デフォルトの名無しさん
NGNGwrite-lineと式の評価の二つ実行されるからじゃないか?
0019デフォルトの名無しさん
NGNGこういうのも見つけたぜ。読みやすそうだぜ!
0020デフォルトの名無しさん
NGNGprint $a=sub{$_[0]*2}->(3);
CommonLisp
((lambda (x) (* x 2) 3)
Lispの方が(・∀・)イイ!!
0021デフォルトの名無しさん
NGNGhttp://www.franz.com/support/documentation/5.0.1/ansicl/ansicl.htm
Common Lisp the Language, 2nd Edition
っていう本がWebに公開されてたんだけど、いつのまにかネット上から消えてた。
まあ上のfranzのサイトにあるので十分っぽいけど。
0022デフォルトの名無しさん
NGNGcomon lispって処理系をいれられないっす
んっと、gclは「成功です」ってメッセージだけで
トップレベルにならない。
schemeは、インストールの失敗しないけど解説も
CommonLispより更に少ないんですよね
0023デフォルトの名無しさん
NGNGどうせ住人はかぶるんだし、このスレはcommon lisp中心でいきませんか。
0024デフォルトの名無しさん
NGNGdefunとdefineしか分らん。。。
0025デフォルトの名無しさん
NGNGちょっとや〜ねえ、というところ。〉scheme
0026デフォルトの名無しさん
NGNGインタプリタに打ち込みまくり。Emacsを最近覚えたから
少しは楽になったけど。
0027デフォルトの名無しさん
NGNG嘘だといって欲しいよ。
xyzzy使えばいいのかなぁ
win98からfedoraに移行したんだけどなんか
戻りたくないんですが。
0028デフォルトの名無しさん
NGNGCommonLispはclisp,cmucl,gcl,aclの四つが有名なんじゃないかな。
aclはお試しばんがインターネッツ上に公開されてまつ。
$telnet prompt.franz.com
これだけでOK。WindowsだろうとMacだろうと問題なし。
Linuxだったらどれでも普通に使える予感.
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG>>28はwindows系なんでしょ。UNIX系だったら
cmucl,sbcl,clisp...みたいになるかもしれないけどさ
0031デフォルトの名無しさん
NGNG有料
Allegro Common Lisp 日本語 http://jp.franz.com/ 英語 http://www.franz.com/
お試し版あり。 Windowsに限りVisual Basicみたいなフォームエディタ付き。
ネイティブコンパイラ付き。値段は交渉によって決まる。
LispWorks http://www.lispworks.com/
お試し版あり。
GUIは、Common Lispベンダで一応標準のCLIMか、独自のCAPI。
ネイティブコンパイラ付き。Professional edition $999 (academic $599)
Corman Lisp http://www.cormanlisp.com/
お試し版あり。ネイティブコンパイラ付き。$249.00. 学生 $125.00
無料
GNU CLISP http://clisp.cons.org/
バイトコードインタプリタ。
GNU Common Lisp (GCL) http://www.gnu.org/software/gcl/gcl.html
Kyoto Common Lisp family。
Cへ翻訳してからCコンパイラでネイティブコードにコンパイル。
ANSI Common Lispへの準拠の度合が他の処理系よりも遅れている。
Freeなら手軽さでGNU CLISPがおすすめ。
0032デフォルトの名無しさん
NGNG採用しているものにxyzzyがある。
同じくWindowsを含め幅広いOSで使えるエディタで、Common Lispに良く似たEmacs Lispという
言語をマクロ言語として採用しているEmacsもある。EmacsのWindowsへの移植で有名なのは
Meadow2がある。
Common Lispにこだわる必要が無くて、なんとなくLisp的なものの感触を掴みたい人はこれらの
エディタで、自分の欲しい機能を書いてみるというのが実践的な身に付け方としておすすめ。
0033デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
人気の言語を作るには ---Being Popular---
http://www.shiro.dreamhost.com/scheme/trans/being-popular-j.html
技術野郎の復讐---Revenge of the Nerds---
http://www.shiro.dreamhost.com/scheme/trans/icad-j.html
がんがっていきましょう
0034デフォルトの名無しさん
NGNG--CommonLispの実装--
[UNIX/Linux]
選択肢が豊富なので良く使われている(ような気がする)ものを
CMUCL
http://www.cons.org/cmucl/
ネイティブコードへのコンパイラが優秀で機能性も申し分無し。多くのプログラムはCMUCLには対応している。
SBCL
http://sbcl.sourceforge.net/
CMUCLの派生でかなりたくさんのパッケージがついてくるのでこちらもお薦め。
GCL
http://www.gnu.org/software/gcl/gcl.html
日本発のKyoto CommonLispの流れをくむ実装。
GCLで動かないプログラムが結構あって、何故か無視され気味な気がする。
ECL
http://ecls.sourceforge.net/
GCLと同じく日本発のKyoto CommonLispの流れをくむ実装。
自分があまり使っていないのでコメントできず。
CLISP
http://clisp.cons.org/
ポータブルな実装だが、バイトコードコンパイラであることが他の実装と比べて見劣りするのか、
UNIX上では意外に話題が出ないような気がする。Unicode対応という点は特筆すべきかと。
個人的にはcmuclかsbclがお薦め。
0035デフォルトの名無しさん
NGNGおっ、重なっちまった。
じゃ、Windowsは省く。
[Mac]
finkパッケージマネージャで、UNIX系の実装の幾つかが使えるので、そちらはUNIX/Linuxの方を参照。
SBCL
http://sbcl.sourceforge.net/
速いし、機能性も十分だし、多くのパッケージ付き。もっともお薦め。
OpenMCL
http://openmcl.clozure.com/
SBCLと比べたときの利点が分からないが、使われている。
MCL
http://www.digitool.com/
商用。トライアルバージョンが微妙だし、勉強用としては上の二つを薦める。
0036デフォルトの名無しさん
NGNGMeadow2 + ilisp + CLISP + HyperSpec + Common Lisp the Language 2ed(CLtL2)
という環境がおすすめ。調べたい関数や変数を説明した、HyperSpecやCLtL2の該当
ページを、補完機能つきで指定して、表示させるコマンドがilispにはあります。
CLISPが異常に重いと感じたら、Cygwin版のものを使うと軽くなるかも。
Cygwinのネットインストーラーのメニューに探せばCLISPがあるので簡単です。
0037デフォルトの名無しさん
NGNGSBCL の売りは Linux + SBCL だとネイティブスレッドが使える事〜.
GCL が無視され気味なのは単純に ANSI CL に準拠してないからだろう.
# Mac 用の CMUCL はもうスクリーンショットが出回ってるね.もうすぐかなー?
0038デフォルトの名無しさん
NGNGMac 界隈では SBCL より OpenMCL の方が人気あるっぽいよ。
スレッドも使えるし、Cocoa へのインターフェイスもあるし。
0039デフォルトの名無しさん
NGNG現在の米国規格協会(American National Standards Institute 略称ANSI)
が規定している、ANSI Common Lispが制定される途中の段階で、規格制定
委員会に参加しているGuy L. Steele Jr.という人が
"Common Lisp the Language"(CLtL1)という中間報告的な本を出版しました。
Kyoto Common LispはこのCLtL1に準拠するべく湯浅 太一、萩谷 昌己さんたち
によって書かれた処理系です。したがって、現在の規格とは微妙に動作が違っ
たり、必要な機能が欠けていたりします。
Kyoto Common Lispの目立った特徴は、独自のコンパイラは持たず、システムに
備わった既存のCコンパイラを使う点です。もちろん開発中、動的にある一つの
関数だけをコンパイルすることもできます。
Kyoto Common Lispはその後いろいろあって、GNU Common Lisp(GCL)や
Embedable Common Lisp (ECL)へと受け継がれ、今にいたります。
私が昔触った感じでは、ECLの方がより規格に準拠しているように感じました。
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGCommon Lisp と Scheme の違い
* T, NIL と #t, #f ←これの所為で互換性大幅ダウン
* 規格にパッケージシステムやオブジェクトシステムがあるかどうか
少々気にいらなくてもどこでも使えるタフなのが欲しいか,
処理系依存の気配がしても自分のお気に入りのがいいか
* 関数と変数の名前空間が分かれてるかいないか
Scheme は分かれてないから ((if pred? x y) 100) とか書ける
CL は分かれてるから (funcall (if pred? x y) 100) となる
そんかわり Scheme で大規模なものつくるときは名前にちょっと注意い
* 末尾再帰の最適化が
Scheme は規格で決まってる
CL は処理系のマニュアルを読まなきゃ(実装でどうするか決まってる)
↑(これをやる最適化オプションとか決めたいよね〜とかいう話もあった)
* (規格レベルで)コンパイラを意識しているか
CL : かなり
Scheme : あんまり
0042デフォルトの名無しさん
NGNGむこうのスレの奴が話をまとめに来てるだけだったりして。
#俺もそのうちの一人だけど
0043デフォルトの名無しさん
NGNG#'(lambda (x) (+ x n))) ・・・(a)
;(defun make-add (n)
; (lambda (x) (+ x n))) ・・・(b)
(setq add2 (make-add 2)) ;add2にはラムダ関数のリファレンス?
(funcall add2 3)
aとbどちらでも同じ結果が得られます。#'というのは関数への
リファレンスを取得するようなイメージを持っているのですが、
これは勘違いでしょうか。cmucl-18を使っています。
またfuncallとはPerlでいうろとこのデリファレンス(して関数呼び出し)
のように思っていたのですが、これもやっぱり見当違いかな。
#'の有無に関わらず(add2 3)の形式では呼び出せません。
0044デフォルトの名無しさん
NGNGmy $n
return sub{$_[0]+$n};
}
$add2 = make-add(2);
print $add2->(3);
Perlだとこんな風になるのかな。当然関数本体を
変数に格納することはできないので$add2には関数の
リファレンスしか入りません。
0045デフォルトの名無しさん
NGNGhttp://www.lispworks.com/reference/HyperSpec/Body/m_lambda.htm
> (lambda lambda-list [[declaration* | documentation]] form*)
> == (function (lambda lambda-list [[declaration* | documentation]] form*))
> == #'(lambda lambda-list [[declaration* | documentation]] form*)
つまり、#'(lambda () (foo))と(lambda () (foo))では同じ結果となります。
まず、Common Lispでは、シンボルのValue cellとFunction cellが分かれています。
> funcallとはPerlでいうろとこのデリファレンス(して関数呼び出し)
Value cellをデリファレンスして関数オブジェクトを取得したのちに
関数呼出しということでいいと思います。
(add2 3)の形式で呼び出せないのは、(add2 3)などのfunction formをeval
するときは、先頭(この場合add2)がシンボルのときは、そのfunction cell
をデリファレンスすると決められているからです。
(setf (symbol-function add2) (make-add 2))としてやれば、(add2 3)が
うまくいくでしょう。
0046デフォルトの名無しさん
NGNGCommon Lisp では一つのシンボルは変数としての値と関数名としての値
の二つを持つ.(それぞれ symbol-value と symbol-function でアクセス可能)
(setq add2 (make-add 2))
だとシンボル add2 の値(symbol-value で取り出すほう)に (lambda ...) が
入るわけ.で,
(add2 3)
ってやると add2 は関数だからシンボル add2 の symbol-function を
取り出そうとするわけだが,当然空なのでエラー.どうすりゃいいかっつーと
(funcall add2 3) ←こいつは add2 の symbol-value を使うので平気なわけ.
で,たとえば (funcall car '(1 2)) とかしたとき,シンボル car の
symbol-value は(普通)空っぽなんでダメポ.そこで function のほう,
と指定するために #' をつけるわけだ.
(funcall (symbol-function car) '(1 2))
なども可能ではあるがカコワル.
(funcall (funcion car) '(1 2))
の省略系として
(funcall #'car '(1 2))
なわけ.
CLHS によれば function (つまり #' ね)は "function name => function" で
名前が symbol だったら symbol と対応した関数を,lambda 式だったら
レキシカルクロージャを返すわけだ.
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG今なら、親切な講師陣が懇切丁寧にCommon Lispを説明します。>all
0049デフォルトの名無しさん
NGNGネタ初心者として自作自演に走らないと盛りあがらないかも。
0050デフォルトの名無しさん
NGNG>Common Lispでは、シンボルのValue cellとFunction cellが分かれています
>>41さんも書いていてくれましたね。よく読まないとだめですね。
add2という自由"変数"だからfuncallが必要のですね。関数はdefunで作られた
名前だけということになるのかな。
>(add2 3)などのfunction formをevalするときは、>先頭(この場合add2)がシンボルのときは、
>そのfunction cellをデリファレンスすると決められているからです。
その位置によってLISPが探すシンボルテーブルが異なるわけですね。
先頭だけがFunction Cellをみて、残りはすべてValue Cellになるのかな。
>>45-46さん
symbol-value,symble-functionについてはよく読んで勉強させてもらいます。
あと44に書いたPerlはめちゃくちゃでした。これが正しいかもしれません。
print sub{my $n=$_[0]; sub{$_[0]+$n}}->(2)->(3);
0051デフォルトの名無しさん
NGNG変数用に分かれてるんじゃなくて,シンボルが関数用と変数用の値を持ってるわけ.
シンボルに value cell と function cell があると理解して,アクセス方法もわかれば
defun 相当を作るのは簡単だ.
(setf (symbol-function 'hoge) (lambda (x y z) (+ x y z)))
でいいわけだからな.で hoge が名前(name)引数リスト(args) が (x y z) で
定義本体(body) が (+ x y z) だと見て,マクロを使えば
(defmacro my-defun (name args &body body)
`(setf (symbol-function ',name)
(lambda ,args ,@body)))
(my-defun hoge (x y)
(+ x y))
(hoge 1 2)
=> 3
で俺 defun の完成ってわけ.
# 本当の defun はもーちょいいろいろやるけど学習向けね
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNGうわー、分ってる人の説明は分り易いです。
目から鱗です。OnLispをまだろくに読んでないのに
こんなに親切丁寧に、、申し訳ないです。。。
0054デフォルトの名無しさん
NGNGLispのsymbolを普通の言語における"変数"として理解しようとすると、ハマるかも。
むしろ、Perlでいうなら、名前がついたハッシュ値として解釈したほうが良いかも。
$my-symbol = \{ 'value' => nil, 'function' => sub{$_[0]+$n}, 'plist' => (),}
みたいにね。(Perlはもう忘れかけれるからmock perlね)
あと、Lispでは値はすべてリファレンス値として考えていいと思います。
だから明示的に演算子でデリファレンスすることはありません。
0055デフォルトの名無しさん
NGNG同じです。っていうか、スコープの何が知りたいの?
0056デフォルトの名無しさん
NGNGOnLisp は入門者が読む本ではないが….最初は
ANSI Common Lisp, Paradigms of Artificial Intelligence Programming (PAIP)
ウィンストンさんの Lisp 3 版(日本語版は訳が…)
あたりがオススメ.PAIP は AI の本としては古いけど Lisp の勉強用なら全然問題ない.
後半は高度な話題もあって楽しいよ.
>>52
質問の意味がよーわからんなぁ.修行が足りないのか?
Common Lisp ではダイナミックスコープとレキシカルスコープがサポートされてます.
本当はスコープとエクステント(変数の寿命)は別なんですが
ダイナミックスコープ : いわゆるグローバル変数
レキシカルスコープ : いわゆるローカル変数
という理解で最初はいいんじゃないでしょうか.
0057デフォルトの名無しさん
NGNGレキシカルスコープはどうやってやるの?
0058デフォルトの名無しさん
NGNGるものがたくさんあります。これらをまとめたウェブページがあればリンクを
張りたいところだけど、分からないや。気がむいたらまとめます。
>>57
レキシカルスコープをやるやりかたは、普通の言語と同じです。
Lispがレキシカルスコープを実装する方法が知りたいのかな?
それとも使い方かな? あなたが現状で堪能なプログラミング言語が
あればそれを書いてくれると、説明しやすいです。
0059デフォルトの名無しさん
NGNG(defun lexical2 ()
(labels ((f () (print "I'm f")))
;; (print f) ←変数 f は未定義
(f)
(labels ((f () (print "I'm f..:-)")))
;; (print f) ←変数 f は未定義
(print (symbol-value 'f)) ;; unbound ←この辺が疑問?
(print (symbol-function 'f)) ;; function は入ってる
(f))
(let ((f 10))
(print f) ;; それともこの辺?
(f))))
# というかこーゆうのは初心者の質問なのだろうか?
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGレキシカルスコープの実装はC, C++などの変数と同じです。
たしかに初心者スレから逸脱しそうな雰囲気なので、
これ以上の議論をするときは本スレへ移動しましょう。
0063デフォルトの名無しさん
NGNGC/C++の経験者には新しい概念だと思います。
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGvi なら % キーで GNU Emacs なら show-paren-mode とか.
あんま気にしないでインデントがそろうまで括弧入れるとか.
最初のうちはだれでもうまく行かないもんです.
(a (b c) ((d e) (f g) (h i)))
↑のツリーが理解できるくらいまで cons を理解できるように
なれば自然と見え方がかわるんじゃないかな.漏れは師匠に最初に
cons セルを手書きさせられたもんです.これも学習法としては
オススメ.
0069デフォルトの名無しさん
NGNG初心者向け cons セルドリル(こんなの→http://perez.cs.vt.edu/usna.navy.mil/HW3P1.gif)
1. (a b c)
2. (a (b c))
3. (a ((b c)))
4. ((a b) (c d))
5. (+ a b)
6. (* (+ a b c) (+ (/ d e) f g))
7. (defun foo () (bar))
8. (let ((x 10) (y 20)) (+ x y))
全部できたら Lisp の構文木を脳内イメージできるようにしましょう.
マクロが構文木へのパターンマッチであるという事が理解できるれば
面白くなってくる筈です.きっと.
# どうしても駄目なら Python でもどーぞ.
0070デフォルトの名無しさん
NGNGGCL は今は ANSI CL 準拠へ向けてがんがってるところだから
初心者にはお勧めできない。環境がわからんのでとりあえず
CLISP のバイナリパッケージをお勧めする。
0071デフォルトの名無しさん
NGNG上から順に短め・初心者向け、て感じで並べてあります。
ちなみに全部英語。日本語でも大学の講義資料とかでいいなら結構転がってたりします。
Common LISP Hints
ttp://www.n-a-n-o.com/lisp/cmucl-tutorials/LISP-tutorial.html
Lisp and elements of style.
ttp://www.fast-index.com/declarative/lectures/
Chapter 2 of ANSI Common Lisp
ttp://lib1.store.vip.sc5.yahoo.com/lib/paulgraham/acl2.txt
Loving Lisp
ttp://www.markwatson.com/opencontent/lisp_lic.htm
Common Lisp:A Gentle Introduction to Symbolic Computation
ttp://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/LispBook/index.html
Successful Lisp
ttp://www.psg.com/~dlamkins/sl/cover.html
上記の中では A Gentle Introduction... が一番丁寧でお勧めかなあ、という感じがします。
図版が多いので英語が苦手でも安心かもしれません。
text というより tips な感じなのがこの辺。
Lisp style guide
ttp://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/txt/style/ht_guide.txt
Common Lisp Pitfalls
ttp://www.aiai.ed.ac.uk/~jeff/lisp/cl-pitfalls
The Common Lisp Cookbook
ttp://cl-cookbook.sourceforge.net/
0072デフォルトの名無しさん
NGNG'((1 3 4) (3 4 5) (1 1 1) (1 0 1)
(4 5 5) (4 1 0) (3 2 3) (4 5 4)
(4 2 1) (4 9 0) (0 0 1) (0 9 1)
(0 8 1) (3 4 5)))
(my-sort *data*)
=> ((0 0 1) (0 8 1) (0 9 1) (1 0 1) (1 1 1) (1 3 4) (3 2 3) (3 4 5) (3 4 5) (4 1 0) (4 2 1) (4 5 5) (4 5 4) (4 9 0))
こんな感じで1番目の要素と2番目の要素でソートしたいんですが、
どうすればいいの?
0073デフォルトの名無しさん
NGNG渡せばいいかと。
0074デフォルトの名無しさん
NGNGあのLisp版て無いの?
0075デフォルトの名無しさん
NGNG環境依存な質問です。
xyyzzyで、任意のディレクトリ名を指定して、そのディレクトリ内に
存在するファイル名を取得する方法って何がありますかね?
0077デフォルトの名無しさん
NGNGxyzzyスレで聞けば?
0078デフォルトの名無しさん
NGNG(if (= (car x) (car y))
(< (cadr x) (cadr y))
(< (car x) (car y)))))
0079デフォルトの名無しさん
NGNG確かに初心者向けと銘打ってはいるが、質問の初心者は…。Windows 板に
xyzzy スレってなかったか?でも親切がモットーのスレなので答えておこう。
(directory "ディレクトリ名")
だ。c:\ の一覧が欲しいなら (directory "c:\\") ね。
>>76
cmucl も入れたのか?ならそっちのほうが性能いいけどな。
でも clisp は起動も速いから性能に不満がでるまで clisp でもいいかもな。
開発環境のセットアップは大丈夫か?Emacs + ilisp がないとマンドクサだぞ。
慣れてきたら Emacs + SLIME がお勧め。
SLIME はドキュメントがないので素人にはおすすめできない。
0080デフォルトの名無しさん
NGNG今のところありません。Lisp 人気が急上昇でもしない限り今後もでないでしょう。
開発時に参照するなら Emacs から HyperSpec を引くのがコマンド一発
なわけですが。ハンディリファレンスの Lisp 版があったらどう嬉しい
ですか?
0081デフォルトの名無しさん
NGNGあと sort は破壊的な関数なので引数で渡されたリストが壊れるって事
に注意。
(setf *data2* (sort *data* (lambda (x y) ....)))
*data2*
=> ウマー
*data*
=> アレ?ナニコレ?マズー
となっちゃう。*data* が壊れるのが嫌な場合は
(setf *data2* (sort (copy-list *data*) (lambda (x y) ....)))
とかしてやれば ok。まぁ、
(setf *data* (sort *data* (lambda (x y) ...)))
みたいに *data* を更新に使う用途ならいいんだけど。
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG>ハンディリファレンスの Lisp 版があったらどう嬉しいですか?
寝る前に布団の中で暗記したりとか・・・。
全体像を掴むのに要点だけかいつまんである紙があるといいじゃん?
あとコマンド名が思い出せない時とか。
0084デフォルトの名無しさん
NGNGなるほど布団の中で暗記ね。我々小市民がオライリーに頼んでも
無駄でしょうから自作しますか。 PDF でよければ。
どっかの Lisper に頼めば Web スペースを借りるくらいできるでしょう。
では欲しい要点と忘れやすいコマンド名(関数の事?)をどーぞ。
0085デフォルトの名無しさん
NGNGCLtL2 とか CLHS, CMUCL User's Manual がそれに当たるのかなぁ。
0086デフォルトの名無しさん
NGNGだからそれらは全部却下だろう。要点ねぇ。まぁ、>>835 の欲しい要点を
聞こうじゃないか。
漏れはハンディリファレンスとやらの類は読んだ事無いが、
構文とかエラーチェックとかリスト処理とかカテゴリ別に重要なやつだけ
ちょこちょこ解説があればいいのかな?
0087デフォルトの名無しさん
NGNG>開発環境のセットアップは大丈夫か?Emacs + ilisp がないとマンドクサだぞ。
ilisp拾って来て解凍した後が訳分りません
/usr/share/emacs/21.3/site-lisp
あたりに突っ込むのやら、.emacsに何か書くのか、
他になにか設定ファイルか必要なのか全くダメです。
レベルが低くて申し訳ないのですが教えて頂けないでしょうか?
0088デフォルトの名無しさん
NGNG.emacsに自分の使っているインタプリタのフルパスを
(setq lisp-program-name "/usr/bin/lisp")
と一行入れるだけで、あとは
M-x run-lisp
として、Emacsバッファ内でインタラクティブにLispが使えるようになるよ。
CommonLispの日本語リファレンスマニュアル本としてこんなのはどうでしょうか?
http://www.amazon.co.jp/exec/obidos/ASIN/4320025881/
英語のは持っていますが、翻訳がいいなら買おうかと思います。
Lispは数学のように用語がしっかり統一されているイメージがあるので
なるべくちゃんとしたリファレンスを用意しておくべきかなと思ってます。
0089デフォルトの名無しさん
NGNG置けたってことは Emacs は少しは使えるってことなのかな。とりあえず
1. ilisp ディレクトリで make してバイトコンパイル
2. ↓のを .emacs に追加。
(require 'completer)
(require 'ilisp)
(load "completion")
(initialize-completions)
(setq clisp-hs-program "clisp -I") ;; clisp のパスね。-I は ilisp 用で起動ってこと。
(set-default 'auto-mode-alist
(append '(("\\.lisp$" . lisp-mode)
("\\.lsp$" . lisp-mode)
("\\.cl$" . lisp-mode))
auto-mode-alist))
(add-hook 'lisp-mode-hook (lambda () (require 'ilisp)))
(load-library "cl-indent")
(add-hook 'ilisp-load-hook
(lambda ()
(setq lisp-indent-function 'common-lisp-indent-function)
(setf ilisp-*prefix* "\C-c"
lisp-no-popper t
ilisp-*arglist-message-lisp-space-p* t)))
くらいでどーだ?後は M-x ilisp-mode とかやると ilisp が起動すると思うのだが。
これが出来たら次は HyperSpec と CLtL2 が ilisp からコマンド一発で参照できるように
するわけだが、まずは(スペースの都合でね)これくらいから。どう?
0090デフォルトの名無しさん
NGNG翻訳もいいんじゃねーの。意味は通じるし、英語版と比較すりゃ勉強にもなる。
だが、やっぱり足りない部分もあるので、
http://www.lispworks.com/reference/HyperSpec/Front/Contents.htm
が本物だという事は忘れるな。調べるときは日本語→HyperSpec でも
当分イイが、段々と HyperSpec を当たる癖をつけるように。
0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNGhttp://www.lispworks.com/reference/HyperSpec/Body/14_.htm
Consesときたよ。
Consesて、なんて読むの?
つーかこれ造語?
0093デフォルトの名無しさん
NGNG... conses are the fundamental building blocks of lists. ;-)
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGそのうち本は見なくなりますよ。
0096デフォルトの名無しさん
NGNG本当ですか?
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG(setq lisp-program-name "/usr/bin/clisp")
で、
M-x run-lisp
だとcmuclが起動しました。こっちでもいいんですけど、
(/usr/local/bin/lispでcmucl起動します)
(exit)も(quit)も効きませんね。
>>89
.emacsに入れてみました。一度は打ち込んだんですが括弧の対応を
間違えましたのでコピペして、clispのpathの所だけ変えました。
(write-line "hello world")とだけ書いたhello.clというファイルを
開いた状態で
M-x ilisp-mode
とするとミニバッファに
Dialect:
と表示されて入力待ちのなるようです。Dialectは方言って意味みたいなので
clispと入れると、画面が二分割されて下半分にILISPモードの*clisp-hs*バッファが
開きました。
0099デフォルトの名無しさん
NGNG> Lispは人工知能の研究専用の言語だと言っている人がいました。
人工知能の研究くらい難しいことにも柔軟に対応できる能力がある言語と
いうことで、汎用の言語として使う事もできます。
他の言語では、複雑すぎて実現できそうもないことが出来たりするので
大きくて複雑なアプリケーションを書く事にも向いているし、
また例えばGNU CLISPなどの比較的軽い処理系を使えば、Perl, Python,
Rubyなどのスクリプト言語と同じような使い方もできるのではないか
という議論もあります。
0100デフォルトの名無しさん
NGNG残念ながら汎用目的の言語です。歴史的に Lisp (または Lisp を採用)
したプロジェクトで有名なものは一般向けでは
- エディタ(Emacs 系列とか)
- CAD(AutoCAD とかね)
- コンパイラ(パーサーの後の構文木から先の辺とか)
- 数式処理ソフト(Maxima)
と人工知能に関連しそうなものはありません。最近のプロジェクトとしては
NASA の宇宙開発関連(http://ic.arc.nasa.gov/projects/remote-agent/)
とかが比較的人工知能っぽいかもしれません。まぁ、Lisp の開発者が
人工知能の偉い人だったので当然そっち方面で使われたという歴史も
ありますが。
0101デフォルトの名無しさん
NGNGあとMaximaと被ってるけど、代数システムとしてAXIOMとか。
どっちにしても「計算」っていう言葉を連想させる分野が
多いですね。
0102デフォルトの名無しさん
NGNGダウソして引けるようにしなきゃならんが、その前に覚えるコマンドがある。
http://www.geocities.co.jp/SiliconValley-SanJose/7474/LispDevelopEnvironment.html
↑(昔は HyperSpec の設定とか載ってたと思ったんだが消えてるな…)にあるコマンド一覧
からの転載だが、この3つは必須。
C-c s status-lisp ilisp の状態を表示
C-c g abort-commands-lisp lisp に送ったコマンドを中断
C-c z reset-ilisp lisp の状態をリセット
ilisp と lisp の通信がおかしくなる(特にエラー時)ときとか、この3つが
使えないと話にならない。ilisp が固まった〜とかでうろたえないように。
0103102 の続き
NGNGftp://ftp.xanalys.com/pub/software_tools/reference/HyperSpec-6-0.tar.gz
2. .emacs で
(setq common-lisp-hyperspec-root "file:///home/someone/doc/HyperSpec/"
common-lisp-hyperspec-symbol-table "/home/someone/doc/HyperSpec/Data/Map_Sym.txt")
と HyperSpec のディレクトリを指定してやればいい。後は M-x hyperspec-lookup でカーソル
位置のシンボルを HyperSpec から引いてくれる(ブラウザが起動する)。キーは自分ですきなところに割り当ててくれ。
漏れはブラウザに w3m を指定してるな。これは ilisp とは関係なくて browse-url 関連の設定なわけだが。
0104デフォルトの名無しさん
NGNGスクリプティング向けのパッケージでも用意すれば話は別だけど現状
CommonLisp でスクリプティングは無理だろう。それ向けの処理系
がない、識別子が長い、等々色々あるが、スクリプティング目的の人に
CommonLisp を勧めるのはどうだろう。Gauche とかが良いのでは。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGはい
そちらのサイトはよく検索でhitするんですが、開発環境自体を
の意味を良く理解してないので見てもいまひとつ分りませんでした。
呑み込みが良くないかもしれませんが堪忍してください。
とりあえず必須の3つは了解です。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG> スクリプティング向けのパッケージでも用意すれば話は別だけど現状
> CommonLisp でスクリプティングは無理だろう。
最初にスクリプティングという目的があって、Perlなんかと同レベルの
サポートを求められると、現状では無理があるだろうけど、Common Lispを
習得するという目的が最初にあるのなら、スクリプティング環境が整って
いないのを逆手にとって、自分でXMLパーサを書いてみたりとか、やるべき
ことがたくさんあってかえって面白いんじゃない?
まぁ、ライブラリを書かなくても、CSVファイルの処理をちょっとCLで書いて
みるとか。日々の雑用をちょっと書いてみるという感覚ね。
現在の状況ではGuacheがLisp系でスクリプティングに向いているというのは
賛成だけど。Common Lispがスクリプティングに向いていないということは
ないと思う。
0109デフォルトの名無しさん
NGNGGame Oriented Object LispというLisp系の言語が使われていたんだって。
あと、Graphics分野でLispが強いんだって、意外な感じ。
http://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview21.html
> Square に行きましたら、その時初めて知ったんですけど、グラフィックス関係って
> もともと Lisp が使われてたんですね。グラフィックスのプログラムってのは、
> オブジェクト同士がリンクを張りまくって、参照しまくって。Lisp だとその
> ネットワークが簡単に実現できるんです。
0110デフォルトの名無しさん
NGNG意外だったのか!? Lisp といえばグラフィックスでは先駆者な
はずだが…。そもそも Lisp マシンとかってグラフィックス装備
のシステムとしては最先端だったのだが。
0111デフォルトの名無しさん
NGNGでも昔だとLispって遅そうなんだもん。そんでグラフィックスというと速さが命みたいな
イメージが俺にはあんだよね。アセンブラでレイトレーサを書くとか、古いかな。
とはいうものの、LispマシンってハードレベルでLispに最適化してあるから、
汎用マシンに比べてなかなか速いって話は聞いた事あります。
P.S. ilispインストールした人、元気にLispしてますか?
ここらへんは無駄口ですから、気にせず質問があったらしてくださいね。
0112デフォルトの名無しさん
NGNG/usr/portage/dev-lisp/*にないから、Gentooは
対応してないのかと思ってました。
0113デフォルトの名無しさん
NGNGこんな感じのを書きたいのですが。
(concatenate 'string "hell" #\o)
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG(concatenate 'string "hell" (string #\o))
はちょっと冗長な気がするのですが、こういうときは、
積極的に(str-cat "hell" #\o) => "hello"みたいな関数をみなさん
定義しているのですか?
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNG名前だと思うし、よく使うのなら定義してもいいと思うよ。string-concatenate
じゃあほぼ同じ長さだし。ただ、Common Lispでは表記レベルでプログラムを
短くするという努力はしていないので、multiple-value-bindとか長い名前が
よくあるね。
0118デフォルトの名無しさん
NGNG出力時は format で結構いけるし、文字列構築とかも with-output-to-string があるしなぁ。
0119デフォルトの名無しさん
NGNGbrowser.elの設定に時間が掛かりました。
(setq browse-url-browser-function 'browse-url-netscape)
(setq browse-url-netscape-program "mozillafirebird")
(global-set-key [S-mouse-2] 'browse-url-at-mouse)
(global-set-key "\C-c\C-z" 'browse-url-at-point)
fedoraの設定をいじってない状態のw3m(KDE, Konsoleの中で)だと、
Opening socket...
という表示で待たされる間が6秒程あってなかなかきびきびした
動作ができません、なのでmozillaで起動するようにしました。
お蔭でilisp-modeの中の、 M-x hyperspec-lookupでヘルプが
立ち上がりました。そもそもこんなものがあるのも知らなかったです。
ありがとうございました。
0120デフォルトの名無しさん
NGNGなんでローカルのファイル開くのに Socket 開くんだろう?
まぁ、とりあえず使えるならいいか。Happy Hacking!!
0122デフォルトの名無しさん
NGNGとりあえず、ilisp解凍後meadow2/site-lispに中身をいれて、
Makefileの
Emacs = /path-to-meadow/Meadow.exe
とかして、コンパイルはできたのですが、
>>89を.emacs.elに書き込み、ilisp-mode起動、clispを選択後に、
Copyright (c) Bruno Haible, Sam Steingold 1999-2003
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[1]>
[2]> ;;; Loading f:/Meadow2/site-lisp/ilisp-pkg.lisp
*** - LOAD: A file with name /f/Meadow2/site-lisp/ilisp-pkg.lisp does not exist
Break 1 [6]> ;;; Loading f:/Meadow2/site-lisp/cl-ilisp.lisp
*** - LOAD: A file with name /f/Meadow2/site-lisp/cl-ilisp.lisp does not exist
Break 1 [8]> ;;; Loading f:/Meadow2/site-lisp/cl-chs-init.lisp
*** - LOAD: A file with name /f/Meadow2/site-lisp/cl-chs-init.lisp does not exist
Break 1 [10]>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ってのと、新しいウィンドウに
*** - LOAD: A file with name /f/Meadow2/site-lisp/cl-chs-init.lisp does not exist
とでてきます。
INSTALLATIONファイルに
You should add the directory where all of the ILISP Emacs Lisp files reside
to your load-path. There is an example of this in `ilisp.emacs'.
とありますが、全部のファイルの頭でload-pathを設定する必要があるのでしょうか?
0123デフォルトの名無しさん
NGNG動いてます。詳しい事はまた書くね。
0124デフォルトの名無しさん
NGNGここで、問題となっているのは、Windows形式とCygwin形式のファイルネーム
の変換問題です。私は以下のようなことをしてとりあえずうまく動いています。
ムリヤリな感じがするので、もっといい解決方法があればどなたか教えてください。
(add-hook 'clisp-hs-hook
'(lambda ()
(defun file-name-hack (file-name)
"change Windows filename to cygwin filename, needed on Meadow2 + cygwin clisp."
(concat "/cygdrive/" (subseq file-name 0 1) (subseq file-name 2)))))
0125124
NGNG0126122
NGNGうまくいったようです。ありがとうございます。
環境はWin2k+Meadow2+ilisp+clisp(cygwin)です。
とりあえず、ESC C-xでS式の実行を確認できました。
他はまだ調べてないですが、次にヘルプが出せるようにしようと思います。
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGemacs-lisp は lisp としては古いという事を頭の片隅に置いといて
いただければ結構ですよ。いや、たまに
「Lisp は駄目だ。私は Lisp の経験があるがあれはまったく時代遅れの酷い代物だ。」
と言ってる人に詳しく聞いてみると経験は emacs-lisp のみだったりする事があるので…。
0129デフォルトの名無しさん
NGNGやっぱ PDF とかじゃ要らないのかね。
0130デフォルトの名無しさん
NGNGGentooLinuxにおいてclisp,ilisp-cvs(ilispではtetexを入れる必要があったので
変わりにCVS版をひとまず入れました)を入れて、>>89さんのilisp用の設定を
.emacsに書き込み、EmacsからM-x ilisp-modeとしてclispを起動しました。
そのときに表示されたエラーが以下のものです。
[1]>
[2]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp
*** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp does not exist
Break 1 [6]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/cl-ilisp.lisp
*** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/cl-ilisp.lisp does not exist
Break 1 [8]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/cl-chs-init.lisp
*** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/cl-chs-init.lisp does not exist
Break 1 [10]>
ilisp-pkg.lispというファイルがないと表示されていますが、
このファイルは /usr/share/common-lisp/source/ilisp/ の下にあります。
上記のエラーメッセージが0)Emacs,1)clisp,2)ilispのどれが表示させて
いるのかすら分りません(Emacsの可能性は低いかな)。どなたかよろしくお願いします。
0131デフォルトの名無しさん
NGNG;; Loading file /usr/share/common-lisp/source/ilisp/ilisp-pkg.lisp ...
;; Loaded file /usr/share/common-lisp/source/ilisp/ilisp-pkg.lisp
;; Loaded file /home/tomato/.clisprc.lisp
[1]>
[2]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp
*** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp does not exist
Break 1 [6]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/cl-ilisp.lisp
*** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/cl-ilisp.lisp does not exist
Break 1 [8]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/cl-chs-init.lisp
*** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/cl-chs-init.lisp does not exist
Break 1 [10]>
${HOME}/.clisprc.lisp に(load "/usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp")
なんて書いてもダメぽでした。今日はもうねまつ。。
0132デフォルトの名無しさん
NGNGおやつみ
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGapp-emacs/ilispを入れてみてから、もう一回試してみるぽ。
っていうか、仕組みが分っていれば解決できそうなもんだけど
Emacsにも慣れてないとかなり難しいぽ。
0135デフォルトの名無しさん
NGNGCommonLispでもできればいいなあ。そうしたらもう最強だろうな。
0136デフォルトの名無しさん
NGNGemacs-guile というパッケージ使うと *scratch* で C-j で Scheme が評価で
きるようになる(scheme-interaction-mode)。これを参考にして同じ方法で CL
用に実装すればできるよ。昔 Gauche 用のをちょっと書いたことがある。でも、
シンボルの補完みたいなことをしようとするとちょっと大変。
emacs-guile はここ(guile-emacs ではない)。
http://sourceforge.net/project/showfiles.php?group_id=3545
0137デフォルトの名無しさん
NGNGILISP/SLIMEと本質的には同じだと思うってかLisperなら普通に暮らしてる環境なんだが。
135が何をしたいのか誰か解説してくれ。
0138デフォルトの名無しさん
NGNG> スレ違いではありますが、ご存知の方が入ればよろしくお願いします。
このスレでもいいと思いますよ。
> ilisp-pkg.lispというファイルがないと表示されていますが、
> このファイルは /usr/share/common-lisp/source/ilisp/ の下にあります。
> 上記のエラーメッセージが0)Emacs,1)clisp,2)ilispのどれが表示させて
> いるのかすら分りません(Emacsの可能性は低いかな)。どなたかよろしくお願いします。
このエラーメッセージを出しているのはclispだと思います。ilispに含まれるファイル群で
ファイル名に.lispが付いているのは、Common Lisp処理系が解釈するはずのファイルです。
> [2]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp
> *** - LOAD: A file with name /usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp does not exist
> Break 1 [6]> ;;; Loading /usr/share/emacs/site-lisp/ilisp-cvs/cl-ilisp.lisp
...
> ilisp-pkg.lispというファイルがないと表示されていますが、
> このファイルは /usr/share/common-lisp/source/ilisp/ の下にあります。
clispがilisp-pkg.lispを探しているディレクトリは、
/usr/share/emacs/site-lisp/ilisp-cvs/ilisp-pkg.lisp
なので、
/usr/share/common-lisp/source/ilisp/
を探すように、clispを諭すのが正道でしょう。
しかし、とりあえず、動けばいいやと言うレベルの解決策は...
/usr/share/common-lisp/source/ilisp/以下の各ファイルへ
/usr/share/emacs/site-lisp/ilisp-cvs/からシンボリックリンクを張るなんて
どうでしょうか。
0139デフォルトの名無しさん
NGNG> 「Lisp は駄目だ。私は Lisp の経験があるがあれはまったく時代遅れの酷い代物だ。」
> と言ってる人に詳しく聞いてみると経験は emacs-lisp のみだったりする事があるので…。
最初にemacs-lispを触ったのはc, c++, perl5を経験したあとでしたが、それでも言語の柔軟性に感銘を受けました。
実際問題、フリーのLispで開発環境が一番ととのっているのは、emacs-lispだったりして。
0140130
NGNG朝のお忙しい中、ありがとうございます。
not existのエラーが出ていた三つのファイルに対して、
/usr/share/emacs/site-lisp/ilisp-cvs/の下にシンボリックリンクを貼り
M-x ilisp-compile-inits としてコンパイルしたら以下のファイルが
リンクを作成したディレクトリに新たに出来ました。
-rw-r--r-- 1 root root 1171 Feb 2 08:24 ilisp-pkg.fas
-rw-r--r-- 1 root root 669 Feb 2 08:24 ilisp-pkg.lib
-rw-r--r-- 1 root root 37767 Feb 2 08:24 cl-ilisp.fas
-rw-r--r-- 1 root root 12939 Feb 2 08:24 cl-ilisp.lib
-rw-r--r-- 1 root root 2916 Feb 2 08:24 cl-chs-init.fas
-rw-r--r-- 1 root root 281 Feb 2 08:24 cl-chs-init.lib
これで全てうまく逝きました。どうもありがとうございました。
インストール時に解決する方法は、もう少しelispとCommonlispに慣れてから
調べたいと思います。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG実はそうでもない。Scheme や Common Lisp の環境も実は結構良い。
Scheme/CommonLisp が Emacs Lisp よりで優れている点として開発環境で思いつくのは
Scheme - PLT Scheme のエディタは変数や関数の関連を線で表示してくれたりする。
関数定義んとこで関数名を書き換えると,他のところで使われる部分も修正されたりとか。
Common Lisp - SLIME はエラーやワーニング等をソース上で下線を引いて教えてくれる
デバッガもバックトレースやスタック内のインスペクト等は充実。
あたりかね。ただ SLIME はドキュメント類が未整備なので Emacs や Lisp にある程度
慣れてないとエラーやトラブル時に困るのでオススメしにくいんだよね。セットアップは
簡単なんだが。
0146デフォルトの名無しさん
NGNG有料、無料を問わずCommon Lispの開発環境でソースレベルデバッガが付いているものはありますか?
0147デフォルトの名無しさん
NGNGリスカーです
0148デフォルトの名無しさん
NGNGLispを使うのは、
リスキーです。
0149デフォルトの名無しさん
NGNGリスパーです。
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGWindows ユーザーの言うソースレベルデバッガってのは VisualStudio みたいに一行一行
実行していくスタイルのデバッガって事だよね?フリーでは見た事ないな.貧乏 Lisper
なので商用は知らないけど.
で,それだけだとダメポって感じなんだけど,実は Lisp ではあんまり一行一行実行って必要ないよ.
漏れは元々 C 使い(今もだけど)で VisualStudio とかから入ったクチだけど lisp でのデバッグは
スタイルが違う(最初は戸惑ったけど).デバッグビルドして〜デバッガ起動して〜とかそーゆうのじゃねぇわけ.
1. エラーで止まる(ここでいきなりデバッガが起動してる)
2. バックトレース(いきなり取れる)
3. スタック上の変数を調べる(大抵これでウマー)
4. もし原因がみつからないならスタックを一つ辿る
5. 3-4 の繰返し
ってのがほとんど.バックトレース時の表示でソースのどの辺かもわかるし,CMUCL なら
:vsource ってコマンドでその場所周辺のソースが表示できるしね.あとは関数をトレース
するとか.フォーム一個実行する step とかあるけど,ほとんど使った事ない.
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG誰か、例題出してくれませんか?
はじめて3日ですけど、自分で何とかできそうな奴。
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGはじめて3日という情報だけでは、他の言語でプログラミング経験があるのか
どうかとか、使える関数とかその辺が伝わってこないので難しいな。cons って
なに?とかいうレベルなら >>69 の手書きとかいいと思うが。マクロの理解には
リストの理解が必須だからね。
でも、とりあえず例題を出しておくか。
[問2] '(1 2 3 4 5 6 7 8 9 10) のような数字のリストを引数として取り、
1. ぜーんぶ足した総和を求める関数 : (f1 '(1 2 3)) => 6
2. それぞれの数を二乗したものの和を求める関数 (f2 '(1 2 3)) => 14
を作成せよ。簡単だ〜って場合はできるかぎりいろんな方法で実装してみてください。
0158デフォルトの名無しさん
NGNG難しい質問ですね。マスターするにはそれなりの期間が必要ですが
個人差が大きいですから。経験的には普通の言語よりは短くて数ヶ月で
そこそこのレベルに到達できます。ただし病的に括弧を恐れる人は別ですが。
もちろん人によっては Lisp を短期間で極める事は可能でしょうが、大抵
本当に学ぶにはどんな言語も 10 年くらいはかかるものです。↓とか参照の事。
http://www1.neweb.ne.jp/wa/yamdas/column/technique/21-daysj.html
0159デフォルトの名無しさん
NGNG#-(and) 付ければビルドは通るんだけど、端末上の文字が化けるようになってしまった。
http://article.gmane.org/gmane.lisp.clisp.general/7834
上手くいった人いませんか?
0160デフォルトの名無しさん
NGNG155じゃないけど、mapcar以外は出来た。
mapcarができない。
リストを作り直してそれぞれにapplyでやれば出来そうだけど、
リストを作り直すのが上手くいかない。
ヒントください。
0161デフォルトの名無しさん
NGNGおそらく複数のリストを引数としてとるちゃんとした mapcar を作ろうとして
ますね?リストを作り直すだけでは、どうやろうとしたのかイメージがつかめないけど。
関数を二つつくって、一個は N 引数を、一個はリスト一つだけ、と分割して考えれば
どうでしょう。かなり推測に頼ってるので的外れなヒントになる可能性も高いですが…。
0162デフォルトの名無しさん
NGNG(define (identity obj) obj)
(define (for-each-list f g n lst) ; not末尾再帰版
(if (null? lst) n
(g (f (car lst)) (for-each-list f g n (cdr lst)))))
(define (my-copy-list lst)
(for-each-list identity cons '() lst))
(define (my-map-1 f lst)
(for-each-list f cons '() lst))
(define (my-map-n lsts)
...)
(define (my-map f lst1 . lsts)
(if (null? lsts) (my-map-1 f lst1)
(my-map-n f (cons lst1 lsts)))
この for-each-list を使って、reverse, append, length も書ける。
0163デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/ACLTutorial.html#sec2
0164160
NGNGもう眠いよ。あひゃひゃ。
全部で5個も関数作ってるから、多分「なんじゃこりゃ」と言われそう。
>>161-162
もう頭回らないので、明日じっくり読もうと思います。サンクス。
0165デフォルトの名無しさん
NGNGつーかここでヒント出すならCommonLISPで書こうや
0166デフォルトの名無しさん
NGNGそれより激しく Schemey なヒントだな.CL 初心者を Scheme に引き込も
うとしてるんじゃねーの?
まぁ,とりあえず >>160 は自分書いたやつを晒せと.
「できました」じゃ良いのか悪いのか採点しようがないじゃん.
0167デフォルトの名無しさん
NGNG(defun $reverse (lst)
(reduce #'(lambda (a b) (cons b a)) lst :initial-value nil))
(defun $length (lst)
(if (null lst)
0
(+ ($length (cdr lst)) 1)))
0168デフォルトの名無しさん
NGNG末尾再帰でもなんでもない再帰だし。末尾再帰を使わないのに reduce とか使いこなすって,
どーゆう段階でそんなんなるんだろ。ちょっと興味あるね。↓みたいのならわかるんだが。
(defun $reverse (lst)
(if (null lst)
nil
(append ($reverse (cdr lst)) (list (car lst)))))
(defun $length (lst)
(if (null lst)
0
(+ 1 ($length (cdr lst)))))
0169デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGなるほど納得。
>>163
MacOS って逝ってんだから勧めるなら OpenMCL とか MCL じゃないの?
でも初心者の数は予想通り少ないねぇ。開発環境整えるだけでも結構敷居が
高いのからなぁ。でも開発環境無しだとシンボル補完もキー一発のマニュアルも
無いわけで厳しいだろうしな。Emacs + ilisp + CLISP パッケージとか作ったら
需要はあるだろうか?
0172160
NGNG解答うpしますね。
ちなみに環境はxyzzyです。
(defun _reverse (x &optional (y nil))
(if (null x)
y
(_reverse (rest x) (cons (first x) y))))
(defun _append (x y)
(if (null x)
y
(cons (first x) (_append (rest x) y))))
(defun _length (x &optional (y 0))
(if (null x)
y
(_length (rest x) (+ y 1))))
0173160
NGNG(if (null x)
nil
(cons (list (first x)) (mc1 (rest x)))))
(defun mc2 (x y)
(if (null x)
nil
(cons (cons (first x) (first y)) (mc2 (rest x) (rest y)))))
(defun mc3 (x)
(if (null (rest x))
(b (first x))
(mc2 (first x) (mc3 (rest x)) )))
(defun mc4 (x y)
(if (null y)
nil
(cons (apply x (first y)) (mc4 x (rest y)))))
(defun _mapcar (x &rest y)
(mc4 x (mc3 y)))
こんな感じ。
0174160
NGNG0175160
NGNGもう寝ます。
(defun mc1 (x)
(if (null x)
nil
(cons (list (first x)) (mc1 (rest x)))))
(defun mc2 (x y)
(if (null x)
nil
(cons (cons (first x) (first y)) (mc2 (rest x) (rest y)))))
(defun mc3 (x)
(if (null (rest x))
(mc1 (first x))
(mc2 (first x) (mc3 (rest x)) )))
(defun mc4 (x y)
(if (null y)
nil
(cons (apply x (first y)) (mc4 x (rest y)))))
(defun _mapcar (x &rest y)
(mc4 x (mc3 y)))
0176デフォルトの名無しさん
NGNGシェルに向かってコマンドを打てない奴がLispのプロンプトに向かってS式を打てるわけがない。
0177デフォルトの名無しさん
NGNGWindows ユーザーの事が頭にあったんだが…。いや漏れは ~/site-lisp 以下は
Windows なマシンと同期するために定期的に tar 玉にまとめてるんだが、これに
Emacs と CLISP つっこんで clisp のパスを決め打ちにするとかして
Emacs + site-lisp (ilisp込み) + CLISP
としたら Windows ユーザーに良いかな〜と。インスコが展開 + .emacs のコピー
だけで済むのは楽じゃん。と思ったがこれでは MS-IME が使えない罠。
0178デフォルトの名無しさん
NGNGWindowsユーザーのことを本気で考えるなら.emacsにいきなり
elispで書かせる風習を*いいかげんに*なんとかしてほしいもんだ。
.emacsの修正スキル取得は最初の鬼門であるからして。
より具体的にはセットアップウィザードみたいなめにゅー形式で
機能の追加削除をロギングマクロみたいに*自動更新*とか
までやっちゃってほしいもんだ。
あと現状のWindows版て、Windows標準UIのことを*完全無視*
してくれちゃってる辺りも本当になんとかしてほしいもんだ。
ほんとはあの変態キーバインドもなんとかしてほしいんだけど、
そこまで言っちゃうと、変態に慣れきったお兄様方がら
*じゃあ、使うなよ!*とか文句言われておしまいなので
これ以上言いません。
0179デフォルトの名無しさん
NGNGそれはMeadowの人たちに対してだよね?
Emacsもう、なくなるまで変わらんよ。。。
0180デフォルトの名無しさん
NGNG香ばしいねぇ。これが 2ch 名物アレか。しっかし空気読めてない香具師だな…。
0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG黙ってxyzzy使ってろ
0183デフォルトの名無しさん
NGNG(テキスト)画面に進めませんでしたっけ?
あれが和訳されるといいのかなぁ.
まあelisp好きじゃないからemacsいじったことないけど.
Elispだって柔軟さについては大抵の言語にひけを取らないわけで,
elispマクロによるUIの向上はいくらでも余地がありますよね.
あと,何かGatesの名を冠したelispを読ませるとC-sでセーブとかできるんじゃなかったっけ.
Emacsの良さはC-c C-sにあるんじゃないよね.(キー違うかも)
0184デフォルトの名無しさん
NGNGところで問1とか解答とか解説しちまっていいんかね?
他にやってる香具師いるの?
0185デフォルトの名無しさん
NGNGすいません。平日は言語の勉強もなかなか厳しいです;;
0186デフォルトの名無しさん
NGNGそういやそうだな。酒のんだ勢いでネタバレしちまうところだった。
んじゃ週末まで待つよ。
0187デフォルトの名無しさん
NGNGで、ここでその仕様について語ってみようよ。
JAVAが標準な世の中だぜ?
LISPだって標準なフレームワークや仕様があれば現場で採用されるかも・・・。
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGMeadow2 + .emacs + ilisp + .ilisp + GNU CLISP + HyperSpec
のインストーラか、圧縮ファイルを配れば便利かも。
ACL体験版のほうが楽か。
0191デフォルトの名無しさん
NGNG確かに Meadow2 の方が良いだろうとは思うのだが。漏れは UNIX : Win 比率が 9:1
くらいなんで Windows 専用機能はあんま要らないというかよくわかないんだよね。
Meadow だとインストールとか設定は NetInstaller とかでなんとかなったりする?
0192デフォルトの名無しさん
NGNG本スレから出て来た奴らがLisp人口を増やすための方策を論ずるスレになっちまったな。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGScheme 初心者です。append と mapcar(map?) は難しすぎて無理でした...
(define (my-reverse list)
(if (list? list)
(let loop ((list list)
(result '()))
(if (null? list)
result
(loop (cdr list) (cons (car list) result))))
list))
(my-reverse) ; => err
(my-reverse '1) ;; => 1
(my-reverse '1 '2) ;; => err
(my-reverse '(1 2 3))
(my-reverse '(1 2 (3 4)))
(define (my-length list)
(let loop ((list list)
(result 0))
(if (null? list)
result
(loop (cdr list) (+ result 1)))))
(my-length) ;; => err
(my-length '(1 2 3 4))
0195デフォルトの名無しさん
NGNGCLISPを単体で使ってみたLISP初心者です。
LISPはいい言語だと思うのですが(煩わしい作業が乏しい)
なんではやらないんでしょうね?
速度もjavaとそれほど変わらないぐらいらしいのに。
インタラクティブに開発ができるのだから、javaよりは開発効率
は宵と思うけどなぁ。
0196デフォルトの名無しさん
NGNG評価:
非常にノーマルな Scheme です。ちゃんと末尾再帰してるし。
半分解けてるので 10 点。なんで append ができないのかが謎。
>>168 に出ている最悪の reverse 実装をみてもうちょっと
マシな reverse を実装してみましょう。何で 168 のが悪いのか
理由も含めて 1 レス以内にまとめる事。できれば Common Lisp で!
0197196
NGNG0198デフォルトの名無しさん
NGNG0199160
NGNG_| ̄|○
漏れのカキコミは皆スルーか…
0200デフォルトの名無しさん
NGNG落ち込むなYO。別にスルーしたわけじゃなくて、マダやってる香具師が
いるから解答しないだけだ。全部末尾再帰だし特にツッコミどころが無い
からな… mapcar 以外は。
0201デフォルトの名無しさん
NGNGlistを使わないならマズくないだろ
0202デフォルトの名無しさん
NGNGScheme だと変数名に list を使っちゃうと関数の list が使えなくなるんだYO!!
…と Common Lisp スレで言うのもなんとなく意味無いような気もする。
0203デフォルトの名無しさん
NGNGて書くことのほうが多いです。
参考: http://www.lisp.org/table/style.htm#efficiency
copy-list の 7 種類の実装が載っているあたり。
[問3] 繰返し(dolist, dotimes, do, do*, loop 等) を使って問1を解け。
0204デフォルトの名無しさん
NGNGCommon Lisp では反復的な操作は反復で。再帰的な操作は再帰でが基本です。
0205デフォルトの名無しさん
NGNGまず、関数名/変数名に気をつかおう。変数 x がリストなのか関数なのかコー
ドを読まないとわからないのはつらい。それと mc1, mc2, ... という名前で
は何をしている関数なのかさっぱりわかりません。
Common Lisp では長い関数名/変数名が好まれます(というか長くなっても許される?)。
0206デフォルトの名無しさん
NGNGこれはないとあかんもんなんですか? なくても期待通りの動作をする
ので違いがいまいち掴めてません。
あるときとないときで挙動が違う身近な例を教えていただけると
理解が早くて嬉しいです。処理系は CLISP を使っています。
下は HyperSpec にあった例であってもなくても同じ挙動をします。
(defun adder (x) (lambda (y) (+ x y)))
(setq add3 (adder 3))
(funcall add3 4) => 7
(defun adder (x) #'(lambda (y) (+ x y)))
;; (defun adder (x) (function (lambda (y) (+ x y))))
(setq add3 (adder 3))
(funcall add3 4) => 7
0207デフォルトの名無しさん
NGNG>>45
0208デフォルトの名無しさん
NGNGhttp://www.lispworks.com/reference/HyperSpec/Body/m_lambda.htm
> (lambda lambda-list [[declaration* | documentation]] form*)
> == (function (lambda lambda-list [[declaration* | documentation]] form*))
> == #'(lambda lambda-list [[declaration* | documentation]] form*)
つまり無名関数に#'をつけてもつけなくても挙動は常に同じになるように規定されています。
違う挙動になる例は存在しません。
じゃあ、いつ#'を使うかといえば、(reduce #'- '(1 2 3 4)) => -8 なんていうシンボルに
対してでしょうか。(reduce - '(1 2 3 4)) とやると、-のvalue cellが参照されてしまい
ます。じゃあ'をつけて(reduce '- '(1 2 3 4))なら同じかというと、違います。
(結果として同じになることもありますが、動作原理は違います。)
(progn
(defun foo (x y) (+ x y))
(flet ((foo (x y) (* x y)))
(values (reduce 'foo '(1 2 3 4))
(reduce #'foo '(1 2 3 4)))))
=> 10
24
一般に関数名が求められている場所で、#'fooをつかうとその場所でのレキシカルな環境
でfooという関数をさがします。'fooをつかうとグローバルな環境でfooという関数を
さがします。glossaryでfunction designatorを調べるといいかもしれません。
ちなみに#'というのはリーダーマクロといって、
#'(lambda () (foo))と(function (lambda () (foo)))はreadによって文字列から
Lispオブジェクト(この場合はリスト)に変換されたあとは、区別できません。
(tree-equal (read-from-string "#'(lambda () (foo))")
(read-from-string "(function (lambda () (foo)))"))
0209デフォルトの名無しさん
NGNGおお。さっそくありがとうございます。分かりました。
ときに、なくても同じなのに #' を付ける慣習があるのは、
気分の問題(あるいは、シンボル時との見た目の整合性をはかるため)
でしょうか?
ついでにシンボルの持つふたつのセルについても学べました。
つまり、こんなこともできちゃうのですね。
(setf (symbol-value 'test) 0)
;; (setq 'test 0)
(setf (symbol-function 'test) (lambda () (incf test)))
test => 0
(test)
test => 1
0210デフォルトの名無しさん
NGNGEmacs Lispだと理由があったような気もするな。
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG効率に影響するってことは意味があるのでは・・・?
0213デフォルトの名無しさん
NGNGまぁ付けない方が良い理由は↓を参照汁。
http://www.mew.org/~kazu/doc/elisp/function.html
まぁ elisp の話はスレ違いだと思うので sage
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNG#'(lambda (x y) (+ x y))の"lambda"は初期のLispで関数とリストが
同じ表現で扱われていて区別出来なかったため、最初に"lambda"が来るか否かによって
区別したそうな。で、common lispではその心配はなくなってlambdaに意味はなくなり
#'((x y) (+ x y))で無名関数を表すようにしても問題はないのだが、
lambdaをつけるのが習慣であったため残したのだと。
lambdaってのは"無名関数ですよ"と宣言するのが目的なわけだから、
漏れは普通の関数と整合性を保つために#'を付ける方がいいような気がする。
0216デフォルトの名無しさん
NGNG#'(lambda (x y) (+ x y))
#'((x y) (+ x y))
つまりこの3種類が可能ということですか。
初心者はこれらを構文糖と考えてしまっていいんですね。
0217デフォルトの名無しさん
NGNG> lambdaをつけるのが習慣であったため残したのだと。
この >>215 の記述が原因だな.初心者さんよ,これは #'((x y) (+ x y)) が可能と言ってる
んじゃないんだよ.というわけで #'((x y) (+ x y)) は不可能.ダメっす.
0218デフォルトの名無しさん
NGNGアメリカじゃChurchは論理学の分野で神的存在なんですかね。
0219デフォルトの名無しさん
NGNG「ああこれはλ関数に使うのね」などと覚えることになるのではないか.
それと >>218 よ,Churchが神なのではない.神が誰かは知らない.
しかし少なくともLispは真理を説いた経典だ.
0221デフォルトの名無しさん
NGNG習慣の問題でしょ。
0222デフォルトの名無しさん
NGNG期待しちまったじゃないか…
ホントにそう書けたらいいのに.
0223デフォルトの名無しさん
NGNGLisp ではその手のカスタマイズは可能だからガッカリすることはない。
やりたいようにやってよし。例えば
(mapcar {|x| (* x x)} '(1 2 3 4 5))
=> (mapcar (lambda (x) (* x x)) '(1 2 3 4 5))
とするリーダーマクロが↓で紹介されている。(引数んとこで | を使うのはマズーだと思うが)
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0013
0224デフォルトの名無しさん
NGNGLispってそこまでカスタマイズできたのか!
てっきり、括弧しか使えないものかと思っていた・・・
0225デフォルトの名無しさん
NGNGでもそーゆう激しいカスタマイズは基本をおさえて一人前になってからだぞ。
精進汁。ちなみに前置記法がダメポの人のための #${ 1 + 2 * f(x) + g(x, y) }
みたいなものすらある。要するに S 式に変換できりゃいいわけだからな。
…でも reader macro の話は初心者スレ向きの話題なのか? >>223
まぁ、モチベーションの維持のためには良かったのかもしれないが。
0226newbie
NGNG>> 89さんの設定を利用し ilisp で clisp を起動しています。
引数を調べたいと思って (dotimes のところで arglist-lisp
を実行すると、
dotimes (Macro): (???)
のような表示になってしまい、引数リストうまく表示されません。
なにか注意すべき点はありますか。
~/.emacs に書いたことは、 >>89 と同一です。
hyperspec-lookup, cltl2-lookup はうまく引けています。
(環境は Debian sid で emacs, ilisp, ilisp-doc, clisp 等
すべて最新版)
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG私もclispでは同じようになってうまく表示されません。cmuclでは、うまくいきました。
clispではマクロは全滅みたいですね。
でもclispの引数の命名方法がいいかげんだから、表示されてもあまり手助けに
はならないんだよね。
REDUCE: (arg0 arg1 &key from-end start end key initial-value) ;; clisp
REDUCE: (function sequence &key key from-end (start 0) end (initial-value nil ivp)) ;;cmucl
調べたらclispの(arglist symbol)が返す情報が使われているみたい。
0230デフォルトの名無しさん
NGNG> >>224
> でもそーゆう激しいカスタマイズは基本をおさえて一人前になってからだぞ。
一人前になった頃には、前置記法マンセイな人に変貌していましたとさ、というオチに
なりそうな気がする。
Emacsでプログラミングしている初心者の人へ、長いシンボル名を入力するときに、
自分ですべて入力していたら、スペルミスとか、面倒だとかいやなことがイパーイある
ので、M-/ {dabbrev-expand} や ESC TAB {complete-lisp} を積極的に利用して楽を
しましょう。
(mul<ESC TAB> -> (multiple-value-p<ESC TAB> -> (multiple-value-prog1
0231デフォルトの名無しさん
NGNG(multiple-value-p<ESC TAB> -> (multiple-value-prog1
0232猿以下でごめんなさい
NGNGしかし丁寧に教えられても理解できないので
こんなもーんって程度でいいです
0233デフォルトの名無しさん
NGNGコピペですまんが Emacs の機能がこんなもーん
;; Emacs
C-SPC : S 式を一個選択
ESC C-k : kill-sexp : カーソル位置から始まる S 式を kill する
ESC C-a : beginning-of-defun : defun の先頭へ移動
ESC C-t : transpose-sexps : ポイント位置前後の S 式を入れ換える
ESC C-e : end-of-defun : defun の末尾へ移動
ESC C-f : forward-sexp : カーソル位置から始まる S 式の末尾に移動
ESC C-b : backward-sexp : カーソル位置より一つ後の S 式の先頭に移動
ESC C-d : down-list : 1 レベル内側の S 式へ移動
ESC C-u : backward-up-list : 1 レベル外側の S 式へ移動
ESC C-n: forward-list : 括弧のグループを超えて前方へ移動
ESC C-p: backward-list : 括弧のグループを超えて後方移動
ESC C-h : mark-defun : defun 全体をマークする
C-x n d : narrow-to-defun : defun の範囲に narrow する
C-x n w: widen : narrow-to-defun を解除
こんな機能があって ILISP を使うとさらに
;; ILISP
C-c L cltl2-lookup CLtL2 を引く
C-c H hyperspec-lookup HyperSpec を引く
C-c k compile-file-lisp ファイルをコンパイル
C-c l load-file-lisp ファイルをロード
C-c t trace-defun-lisp 関数のトレース ON/OFF
C-c ) find-unbalanced-lisp 括弧の不一致を見つける
C-c ; comment-region-lisp リージョンをコメントアウト
こんなもーん、が追加されまつ。
0234デフォルトの名無しさん
NGNGhttp://www.nongnu.org/grt/
GRT is a Common Lisp raytracing system
0235猿以下でごめんなさい
NGNGありがとーん、ございます。
0236デフォルトの名無しさん
NGNGいやいや昆虫以下だと思うよ。
0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNGdelay と force に感動した。
0243デフォルトの名無しさん
NGNG初心者への説明:
delay と force ってのは遅延評価(呼ばれたときにすぐ実行され
ずに計算をサボる事だとでも思ってください)を行うためのオペ
レータです。↓みたいなもんだと思ってください。
(defmacro delay (&rest form) `(lambda () ,@form))
(defmacro force (form) `(funcall ,form))
で、コレを使うと評価するタイミングを遅らせることができます。
> (setf x (delay (expt 2 1000)))
#<CLOSURE :LAMBDA NIL (EXPT 2 1000)>
↑この段階ではまだ (expt 2 1000) は実行されない。
> (force x)
10715086071862... (ry
↑force してやっと評価されます。
これでなにが嬉しいかは、興味のある人がいたらまた後日。
0244デフォルトの名無しさん
NGNG0245160
NGNG>>205 ご指摘ありがとうございます。
んで、明日は休みなので、>>162さんのfor-each-listで
reverse,append,lengthをやってみた。
とりあえずlambdaというのもつかってみた。
イマイチよく分かってない。
(defun _reverse (lst)
(for-each-list #'list #'(lambda (x y) (append y x)) nil lst))
(defun _append (lst1 lst2)
(for-each-list #'identity #'cons lst2 lst1))
(defun _length (lst)
(for-each-list #'(lambda (x) 1) #'+ 0 lst))
0246デフォルトの名無しさん
NGNGlambdaでなくて、letの中で定義してletの中でしか名前が有効でないものです。
ないすかね??
0247デフォルトの名無しさん
NGNG>>172 をよーく見てると、同じパターンが何度も出てくるので抽象化できそう
な気がしてこない? その辺をうまく高階関数やマクロで抽象化できるように
なると Lisp 中級者かな。
n 個の引数をとる append はこうなる。
(defun _append-n (&rest lsts)
(cond ((null lsts) lsts)
((null (cdr lsts)) (car lsts))
(t (_append (car lsts) (apply #'_append-n (cdr lsts))))))
0248デフォルトの名無しさん
NGNG(defun func()(print temp))
)
と、書いたのですが、このfuncが使用しているtempはletに属しているのに
なんで外部から使用可能なfuncでも0と表示されるのか分かりません。
どなたかおわかりになられますか??
0249デフォルトの名無しさん
NGNG局所関数は flet と labels を使う。flet では再帰が使えないが、labels は
再帰できる。
(defun test ()
(flet ((square (x)
(* x x)))
(print (square 5)))
(labels ((fact (n)
(if (<= n 1) 1
(* n (fact (1- n))))))
(print (fact 5))))
それと、macrolet というのもある。
0250デフォルトの名無しさん
NGNGクロージャの説明クル━━━━━━(・∀・)━━━━━━ !!!!!
0251newbie
NGNG>>229さん、調べてくださってありがとう!
そうですか。clisp ではダメなのか〜。
今度、cmucl の方で試してみます。
Emacs の describe-function と同じような
インターフェースで、Common Lisp の関数が
引けると便利かも。
0252デフォルトの名無しさん
NGNGCommon Lisp の標準関数なら HyperSpec とか CLtL2 引くほうが例も載ってて
ウマーだぞ。describe したいだけならコレ(ILISP info)。89 氏の設定だと C-c i だな。
`<C-z> i (describe-lisp)'
Describe the previous sexp (it is evaluated). If there is no
previous sexp and if called from inside an ILISP buffer, the
previous result will be described.
0253デフォルトの名無しさん
NGNGQ1. スコープ外なのに見えるのはなんで? という疑問な場合
A1. それは func 自体は let の内側にあるからです.外部からはどうやっても temp の値を
操作する事はでませんが,func を通じて見る事だけはできます.
というレベルなのか
Q2. let が終った瞬間に temp って消えちゃうんじゃないの?(← C 的思考)
A2. Lisp では変数のスコープ(見える範囲)とエクステント(生存期間)はそれぞれ独立した概念です.
let の範囲内(lexical)でしか temp は参照できませんが temp そのものは生存期間は func と同じ
です.この例だと func の定義が上書きされてこの func の定義が不要になったときに temp は GC に
回収されるでしょう.
もちろん C のようにスタック上に変数領域を確保してスコープの終了と同時に自動的に消えるという変数も
コンパイラに指定する事はできます.ただしフリーの実装でこの機能(dynamic-extent)を安定して使える
コンパイラは少ないですので初心者にはお勧めできません.(CMUCL にはおそらく次のリリースで載ります
がまだ危険です! デフォルトで off になってます)
なのか解説者の力量不足でわかりません.どっちでしょう?
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNGおお、なるほどそういうことですか。
すっかりCで考えてました。寿命とスコープが違うんですね。
今はlambdaだけで再帰が出来るかどうか考え中です。
0259デフォルトの名無しさん
NGNG>>258
お役に立って幸いです。C でも malloc しちゃうとスコープとエクステント
がズレたりちゃうのでこの際スコープとエクステントについて意識する
ようにしちゃっても悪くないでしょう。lambda だけで再帰というのは、
直接関数名を使わずに再帰という事なら可能です。↓に一緒に載せてお
きました。考え疲れたらどーぞ。
>>257
では再帰無しの mapcar の例です。もっと効率がいい方法もあるかもしれません。
(といっても出題者じゃないのでひょとして再帰が正解なのかな?)
http://cgi.at.infoseek.co.jp/lambda_list/cgi-bin/lambda.cgi?name=Examples
0260デフォルトの名無しさん
NGNGそのまんま入門者用のFAQができあがりそうだ。
0261156
NGNG初心者にとってはちょっと難しいかな?
出題者としては、「CommonLisp初心者」向けの問題なので、dolist あたりで
素直に解答してくれることを想定していました(Lisp ハッカにとってはつまら
ないでしょうけど)。http://www.lisp.org/table/style.htm#efficiency の
copy-list の 2 番目みたいなやつ。
0262デフォルトの名無しさん
NGNG寿命が尽きないならば、
(let ((temp 0))
(defun func()
(print temp)
(setq temp(+ temp 1)))
みたいな関数を定義したときこのFUNCは呼ばれるたびにtempの
値が変わると・・・lengthみたいなものを作ってるんですが、
二回目に関数を呼ぶと前の値に足されてしまう・・・。
やっぱり、関数の最後で局所変数を初期化するんですかね。
それとも、変数を解放(deleteみたいなもの?)する命令が
あるんでしょうか?
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGこうだと思います。
(defun func(lst)
(let ((temp 0))
(labels
((foo(x)
(if(null x)temp
(progn
(setq temp(+ temp 1))
(foo (cdr x))))))
(foo lst))))
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG馬鹿は出てこなくていいです。
0267デフォルトの名無しさん
NGNG一日中格闘するくらいの気慨がある初心者なら十分理解できるよ。
ちょっとがんばればlispの実装のソースを読むくらいできたりする(俺の場合はclやり始めて一ヶ月くらいでcmuclのコードが少しは読めるようになったし)
0268デフォルトの名無しさん
NGNGfoo(x)の代わりにfoo(x temp)ってして
(foo lst 0)ってすると思う。
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG引数に関数とリストを一つ取る、という風に制限した mapcar のほうが良かったかもね。
そうすりゃ dolist でリストの各要素に関数を適用して結果を push してく、とか素直な
解答が出たのかも。
0271デフォルトの名無しさん
NGNG(defun my-mapcar (fn list)
(if (not list)
nil
(cons (funcall fn (car list)) (my-mapcar fn (cdr list)))))
(my-mapcar #'1+ '(1)) => (2)
(my-mapcar #'1+ '(1 2 3)) => (2 3 4)
&rest を使った引数リスト数が任意のときでも、この考え方の延長線上でできますか?
ちょっと試してみたのですが、こんがらがってきたのでギブアップしてしまいました。
具体的には、&rest で得られたリストの cdr のリストを第2引数の list の cdr とともに
再帰の my-mapcar に引き渡す方法を見つけられませんでした。
0272デフォルトの名無しさん
NGNGよーするに car と cdr に分離したいわけだよね?
せっかく作った my-mapcar を利用してみてはどうでしょう。
↓こんなんでヒントになるかな?
(my-mapcar #'car '((1 2 3) (a b c) (x y z)))
=> (1 a x)
(my-mapcar #'cdr '((1 2 3) (a b c) (x y z)))
=> ((2 3) (b c) (y z))
# 皆さん再帰好きですね〜。do や loop は全然出てこないなぁ。
0273デフォルトの名無しさん
NGNGloopは直接的には単純だけど、かなり複雑な仕様があるし、doを使うよりは再帰の方が考えやすいような。
0274デフォルトの名無しさん
NGNGは知らない使えないって人が居るのはなんとなくわかるんだけどね。漏れなんかむし
ろ do のほうが複雑な気がするんだけどなー。
CL が再帰やりやすい仕様になってるというのは、末尾再帰の最適化が仕様に入って
ないあたりとかですか?インタプリタだと大抵末尾再帰の最適化が行なわれないので
デバッグ時に再帰が見えてウマー。
0275デフォルトの名無しさん
NGNGありがとうございます。ただ、問題はそこではなくて、そうして得られた
((2 3) (b c) (y z)) をどうやって再帰呼び出しの my-mapcar の引数に
与えてやるか、というところで行き詰まっています。
>>272-273
動作機序を考える必要さえなければ、記述としては再帰のほうがシンプルだし
数学的にもそちらのほうが自然ですよね。
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG別に関数を準備するか apply とか使うか、かな。
(defun foo (lst &rest lsts) ...)
という関数なら↓のようにすれば
(apply #'foo '(b c) '((x y) (2 3)))
== (foo '(b c) '(x y) '(2 3))
で lst = (b c), lsts = ((x y) (2 3)) となります。
> 動作機序を考える必要さえなければ、記述としては再帰のほうがシンプルだし
> 数学的にもそちらのほうが自然ですよね。
再帰で書いてシンプルになるならもちろんそれで何の問題もありませんが。
反復は特殊な再帰なわけですから反復で書こうと再帰で書こうと違いなどないのです。
だから短くて簡潔なほうを選ぶべきかと…。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG2. 複数のリストなら一番短いやつの要素数
じゃないのか?
0280デフォルトの名無しさん
NGNGおお。できました。ありがとうございます。
(defun my-mapcar (fn list &rest lists)
(if (not list)
nil
(cons (apply fn (car list) (my-mapcar #'car lists))
(apply #'my-mapcar fn (cdr list) (my-mapcar #'cdr lists)))))
(my-mapcar #'1+ '(1 2 3)) => (2 3 4)
(my-mapcar #'+ '(1 2 3) '(4 5 6)) => (5 7 9)
(my-mapcar #'+ '(1 2 3) '(4 5 6) '(7 8 9)) => (12 15 18)
(mapcar #'+ '(1 2 3) '(4 5 6) '(7 8 9)) => (12 15 18)
0281デフォルトの名無しさん
NGNG((1 4 7) (2 5 8) (3 NIL 9))
* (mapcar #'list '(1 2 3) '(4 5) '(7 8 9))
((1 4 7) (2 5 8))
0282デフォルトの名無しさん
NGNG正直、ぬるま湯につかりっぱなしなので、とても勉強になる。
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNG。。 ・・ 。。 ・。。。
o0o゚゚ ∧⊇∧ ゚゚Oアッタマルネ
。oO ,,ヘヘヘヘ,, ((( ・ω・ )∩ O0o
(~~)ヽミ,, ・ω・ ミ ::.:::.: (´^ヽO,
(⌒ヽ ::.:::.: (⌒)(゙゙゙)~
/~゙゙ヾ⌒`ゝ-(~´`(⌒(⌒~ヽ~ ~~
ゝー ′ '" ``"
ソウダナモー
0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNG(not list) ==> (some #'null (cons list lists))
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG(if (null lst1) lst2
(cons (car lst1) (my-append-1 (cdr lst1) lst2))))
(defun my-append (&rest lsts)
(cond ((null lsts) lsts)
((null (cdr lsts)) (car lsts))
(t (my-append-1 (car lsts) (apply #'my-append (cdr lsts))))))
my-append-1 を末尾再帰にして reverse を使うという手もある。
0292デフォルトの名無しさん
NGNG(if (null lists)
knil
(funcall kons (car lists)
(foldr kons knil (cdr lists)))))
(defun my-append (&rest lists)
(foldr #'my-append-1 nil lists))
0293デフォルトの名無しさん
NGNG(reduce #'my-append-1 lists))
0294デフォルトの名無しさん
NGNG(append) => nil
(append 1) => 1
なので
>>292
(292-my-append 1) => Error: Attempt to take the car of 1 which is not listp.
>>293
(293-my-append) => Error: MY-APPEND-1 got 0 args, wanted 2 args.
0295デフォルトの名無しさん
NGNG動きをするハズです.速度と効率しか見てません.
>>294 さんの指摘でさらに長くなりました….
(defun my-append (&rest lsts)
;; 頭の nil をとばす
(do ((l lsts (cdr l)))
((or (null lsts) (not (null (car l)))) (setq lsts l)))
;; 先頭が atom のみだったらそれを返す
(when (atom (car lsts))
(if (null (cdr lsts))
(return-from my-append (car lsts))
(error "~S is not a list." (car lsts))))
;; 先頭となる result と cons したセルを指す ptr を準備
(let* ((result (cons (caar lsts) nil))
(ptr result))
;; 先頭のリストを cons する.このとき ptr はリストの末尾のセルを指す
(do ((p (cdar lsts) (cdr p)))
((null p))
(setq ptr (setf (cdr ptr) (cons (car p) nil))))
;; 末尾のリスト以外をコピー(末尾のリストは ptr で指すだけ)
(do ((l (cdr lsts) (cdr l)))
((null (cdr l))
(setq ptr (setf (cdr ptr) (car l)))
result)
;; 個々の lst の複製リスト
(do ((p (car l) (cdr p)))
((null p))
(setq ptr (setf (cdr ptr) (cons (car p) nil)))))))
0296デフォルトの名無しさん
NGNG;;; dolist 版
(defun my-append-1 (lst1 lst2)
(let ((result lst2))
(dolist (item (reverse lst1) result)
(push item result))))
(defun my-append (&rest lsts)
(cond ((null lsts) lsts)
((null (cdr lsts)) (car lsts))
(t (let ((result nil))
(dolist (item lsts result)
(setq result (my-append-1 result item)))))))
0297デフォルトの名無しさん
NGNG0298295
NGNGタを書換えていくあたりがナカナカ.まぁほとんどの人には気に入らないでしょうけど.
皆さん再帰ばっかりなのでちょっとひねくれてみました.
;; でも CLISP だと reverse が組み込みでしょうから do でループするこっちのより
;; >>296 さんのやつのほうがはやいかもしれませんね…
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG(if (null x) y
(let ((temp (cdr x)))
(setf (cdr x) y)
(do-nreverse temp x))))
(defun do-reverse (x y)
(if (null x) y
(do-reverse (cdr x) (cons (car x) y))))
(defun my-append (&rest lsts)
(if (null lsts) lsts
(do ((lsts lsts (cdr lsts))
(r '() (do-reverse (car lsts) r)))
((null (cdr lsts)) (do-nreverse r (car lsts))))))
0301159
NGNG端末上の文字が化ける件は変わらずですが。
一応ご報告。
0302デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG初心者が書くようなコードじゃないもんな。まぁハカーが寄ってくるのは良いスレの証。
[初心者向けじゃないかも] くらい書いといてもらえば良いのではなかろうかと。いっちょ
解説してやるかと思ったが俺が勉強になっちまったZe。
0305デフォルトの名無しさん
NGNG(defun my-nconc-1 (lst1 lst2)
(cond ((null lst1) lst2)
(t (setf (cdr (last lst1)) lst2)
lst1)))
(defun my-append (&rest lsts)
(cond ((null lsts) lsts)
((null (cdr lsts)) (car lsts))
(t (let ((result nil))
(dolist (item lsts result)
(setq result (my-nconc-1 result (copy-list item))))))))
0306デフォルトの名無しさん
NGNG>>305
おまえらよくやりますね…手元の cmucl で測ったら cons は 295 == 300 でほ
んのちょっと 305 のほうが cons が多いね。なんだろう?どこだろう?誤差かなぁ?
0307デフォルトの名無しさん
NGNG305 は lsts の一番最後のリストまでコピーしてるから、その分多いはず。
295 は末尾リストはコピーから除外してる。
0308デフォルトの名無しさん
NGNGこれだ・・・
(defun func(lst)
(dotimes(x (length lst) y)
(setq y(+ y (car lst)))
(setq lst (cdr lst))))
0309デフォルトの名無しさん
NGNGError in KERNEL::UNBOUND-SYMBOL-ERROR-HANDLER: the variable Y is unbound.
5時間目のエラーですか。
0310デフォルトの名無しさん
NGNG同じ事言われてた。ナゼ?
0311デフォルトの名無しさん
NGNG(defun func(lst)
(let ((temp 0))
(dotimes(x (length lst)temp)
(setq temp(+ temp (car lst)))
(setq lst (cdr lst)))))
0312(define (´∀`) 'マターリ)
NGNG(let ((y 0))
(dolist (x lst y)
(setq y (+ y x)))))
(defun func (lst)
(apply #'+ lst))
0313デフォルトの名無しさん
NGNG(defun func (lst &aux (tmp 0))
(dolist (x lst tmp)
(incf tmp x)))
0314デフォルトの名無しさん
NGNG(if (null lst) tmp (func (cdr lst) (+ tmp (car lst)))))
0315デフォルトの名無しさん
NGNG(loop for e in lst sum e))
0316デフォルトの名無しさん
NGNG一つ忠告してやろう…… >>314 っ お主 &aux と &optional を間違えておるぞっ
&aux は 312 の上のやつと 313 のときのように let の代りになるだけで引数としては渡せんのじゃ
0317デフォルトの名無しさん
NGNG(defun q2-1 (lst)
(if (null lst)
0
(+ (car lst) (q2-1 (cdr lst)))))
(defun q2-2 (lst)
(if (null lst)
0
(+ (* (car lst) (car lst)) (q2-2 (cdr lst)))))
0318デフォルトの名無しさん
NGNG(apply #'+ (mapcar #'* lst lst)))
0319デフォルトの名無しさん
NGNG(reduce #'+ lst))
(defun list-square (lst)
(reduce #'(lambda (a b) (+ a (* b b))) lst
:initial-value 0))
0320デフォルトの名無しさん
NGNG(apply #'+ lst))
(defun square (n)
(* n n))
(defun sum-square (lst)
(sum (mapcar #'square lst)))
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG>>312,313 dolist
>>312,318,320 apply, mapcar
>>314 末尾再帰
>>315 loop
>>317 再帰
>>319 reduce
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNGとりあえず再帰と答えた香具師、>>323 貴様だ、貴様。
貴様はとりあえずリストの要素に関数を適用する部分を抽象化して
($sum (lambda (x) (* x x)) '(1 2 3)) == 14
みたいな $sum を作ってこい!もちろん >>320 で apply つかった実装は
既出なのでそれ以外の方法でな。
つまり問 2 を
(defun A-1 (lst) ($sum #'identity lst))
(defun A-2 (lst) ($sum #'(lambda (x) (* x x)) lst))
みたいに書けるようにするわけだ。どうウマーなのか説明できるとなお良し。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGdotimes
dolist
末尾再帰
loop
再帰
reduce
do
fold
どれがお好みだ?
0328デフォルトの名無しさん
NGNG| (| r‐‐、
_,;ト - イ、 ∧l☆│∧ >>327 って初心者だと思う?
(⌒` ⌒ヽ /,、,,ト.-イ/,、 l
|ヽ ~~⌒γ⌒) r'⌒ `!´ `⌒) そうは思えんな。CL は初心者とか言うんじゃネーノ?
│ ヽー―'^ー-' ( ⌒γ⌒~~ /|
│ 〉 |│ |`ー^ー― r' |
│ /───| | |/ | l ト、 |
| irー-、 ー ,} | / i
| / `X´ ヽ / 入 |
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGとだな。そうすると、reduce か loop が一番簡潔な気がする。リストを2回舐
めてもいいなら >>320 でよいと思う。
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG(reduce #'(lambda (x y) (+ x (funcall fn y))) lst
:initial-value 0))
0333デフォルトの名無しさん
NGNGディレクトリ内のファイルのサイズの平均を求める関数を作れ。
0334デフォルトの名無しさん
NGNGつーかそれおまいの宿題じゃないのか?別にいいが。
0335333
NGNG0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNGに定義も不十分だし。>>333 はとりあえずどっか逝け。ファイルシス
テムみてーに機種毎にバラバラな仕様のブツをこの段階で出すか。普通。
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNG【問3】consセルのcarに数値が入ったリスト木の
合計と平均を求める関数を作れ。
(average-tree '((123 (764) 234) 345 456 3 2)) => 275.286
(sum-tree '((123 (764) 234) 345 456 3 2)) => 1927
簡単杉?
0341デフォルトの名無しさん
NGNGあと、簡単な様だったらリストの探索でflattenみたいな
リストの再構成は禁止しとく?
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG(defun tree (lst &optional (sum 0) (count 0))
(if (null lst)
(values sum count)
(if (listp (first lst))
(progn
(multiple-value-setq (sum count) (tree (first lst) sum count))
(multiple-value-setq (sum count) (tree (rest lst) sum count))
(values sum count))
(progn
(multiple-value-setq (sum count) (tree (rest lst) (+ sum (first lst)) (+ count 1)))
(values sum count)))))
(multiple-value-bind (sum count) (tree lst 0 0)
(values sum (float (/ sum count)))))
0344デフォルトの名無しさん
NGNG(labels ((walk (x f &optional (y 0))
(cond ((numberp x) (+ (funcall f x) y))
((endp x) y)
(t (walk (rest x) f (walk (first x) f y))))))
(defun sum-tree (x)
(walk x #'identity))
(defun average-tree (x)
(float (/ (sum-tree x) (walk x #'(lambda (x) 1))) .0)))
0345デフォルトの名無しさん
NGNG(if (listp tree)
(apply g (mapcar #'(lambda (item) (traverse-tree f g item)) tree))
(funcall f tree)))
(defun sum-tree (tree)
(traverse-tree #'identity #'+ tree))
(defun count-tree (tree)
(traverse-tree #'(lambda (dummy) 1) #'+ tree))
(defun average-tree (tree)
;; これだと tree を 2 回トラバースしてしまう
(float (/ (sum-tree tree) (count-tree tree))))
(defun average-tree (tree)
;; 副作用があってちょっと汚いけどこれならトラバースは 1 回
(let* ((count 0)
(sum (traverse-tree #'(lambda (item) (incf count) item)
#'+
tree)))
(float (/ sum count))))
0346デフォルトの名無しさん
NGNG(defun sum-average-tree (lst sum count)
(if (null lst) (list sum count)
(apply #'tree (rest lst) (if (listp (first lst)) (tree (first lst) sum count) (list (+ sum (first lst)) (+ count 1))))))
(apply (lambda (sum count) (values sum (float (/ sum count)))) (tree lst 0 0)))
0347(define (´∀`) 'マターリ)
NGNG(float (apply #'/ (traverse-tree (lambda (item) (list item 1))
(lambda (&rest x) (apply #'mapcar #'+ x))
lst))))
0348デフォルトの名無しさん
NGNG(cond ((null tree) knil)
((atom tree) (funcall fn tree knil))
(t (tree-fold (car tree) fn
(tree-fold (cdr tree) fn knil)))))
(defun tree-sum (tree)
(let* ((sum+cnt
(tree-fold tree
#'(lambda (tr knil) (cons (+ (car knil) tr) (1+ (cdr knil))))
'(0 . 0))))
(float (/ (car sum+cnt) (cdr sum+cnt)))))
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNGhttp://www.tomabechi.com/
0352デフォルトの名無しさん
NGNG50年使える技術でスレッド云々はちょっと夢のない
話ではないですかね^^;
0353デフォルトの名無しさん
NGNGおー、すると今後 50 年にはどんな技術が夢があるんでしょう?
Lisp はじめたばかりなんですが、スレッドすげーというレベルなんで
上級者の将来の技術も是非聞いてみたいっす。
0354デフォルトの名無しさん
NGNG何の話だ?
0355デフォルトの名無しさん
NGNGhttp://sdc.sun.co.jp/news/200201/danwa01.html
>僕の中ではSolarisも含めてUnixの時代は終わっているんですよ。
>単純に言うと立ち上げられるスレッドの数が少なすぎ。
>僕の希望としては10万スレッドくらいが立ち上がるようなOSの出現を望みますね。
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGスケジューリング自体が重くなるし他のプロセスもCPUを奪われて悪影響が出るだろう。
実質Web server1プロセスだけ走ればいいとかいうならできるだろうが。
0360デフォルトの名無しさん
NGNG有機的プログラミングとかw
0361デフォルトの名無しさん
NGNG(traverse-tree #'list #'nconc tree))
(defun average-tree (tree)
;; トラバースは 3 回
(let ((lst (flatten-tree tree)))
(float (/ (apply #'+ lst) (length lst)))))
0362デフォルトの名無しさん
NGNGJAVAよりLISPを選択した理由には説得力があるな。
俺はJAVAのPGだが、ここでLISPを知って思ったのだが、
JAVAってめんどくさいんだわ。C++よりはマシって同僚
はいうのだが、私的には似たようなもんではないかと。
(っーよりは、LISPが優れすぎている所為かもしれんな・・・)
マクロもいいし、型がないのがいいし、対話的にプログラミングが
できる(これだな、これが最高に優れている)のもいい。
速度も遅いといわれているが、ピュアJAVAに比べればどっこいどっこい
のような気がするし・・・何故LISPは流行らんのだ??
とぶつぶつ呟いていたらLISPの案件が来た。
・・・マヂかよ・・・。
0363デフォルトの名無しさん
NGNGなんだか型にはまりすぎていて釣りの予感もするがけど、あえて突撃しよう。
1. 遅くない。どこでガセネタつかまされたか知らんが、まともなコンパイラはネイティブ
コンパイルするので Java とどっこいどっこいって事ぁないはず。コンパイラが良くてか
つ計算用途なら C と競っちゃうくらい。
2. あと型も一応ある。性能や型チェックが必要な時だけ指定するオプショナルな型システムが。
流行らない理由はいろいろ考えられるが、まぁ括弧だろうな。でも名無しさんたちが
2ch で初心者スレなんぞをたてて地道に普及をはかっているのだ。日本 Lisp ユーザー
会みたいなのはなんだか敷居が高い上にあんま活動してなさそうだし、2ch が日本最
大の Lisp コミュニティかもしれないなぁ。
0364デフォルトの名無しさん
NGNGLISP/CS板でもいいかな。
0365デフォルトの名無しさん
NGNGのリンクの人、話しはいい、どんどん言ってくれ、おもしろい。
おもしろいのだが。
あの髪型。あの髪型なのにスーツ。男のポニーテール。これが生理的にイヤーン。
0366デフォルトの名無しさん
NGNGBeOS
0367デフォルトの名無しさん
NGNG男優もやってるのかと思ってびびった。
0368デフォルトの名無しさん
NGNGこの際、LISPはライブラリとか仕様とかいった問題ではJAVAを目指すべきだ。
DB接続の定型化、ネットワーク処理の定型化・・・
これらを実現するためのネイティブなライブラリ、
その上にのっかるフレームワーク(ここをCLOSで書く)
実現したらいいなぁ。
言うだけでは意味ないんですこしずつ書いてくよ。
0369(define (´∀`) 'マターリ)
NGNG(let ((f (lambda (x y) (if (listp x) (cons (cons x (car y)) (cdr y))
(cons (car y) (mapcar #'+ (list x 1) (cdr y)))))))
(do ((x (fold f tree '(() 0 0)) (fold f (apply #'append (car x)) (cons '() (cdr x)))))
((null (car x)) (float (apply #'/ (cdr x)))))))
(defun do-average-tree (tree lst sum count)
(cond ((and (null tree) (null lst)) (float (/ sum count)))
((null tree) (do-average-tree (apply #'append lst) '() sum count))
((listp (car tree)) (do-average-tree (cdr tree) (cons (car tree) lst) sum count))
(t (do-average-tree (cdr tree) lst (+ sum (car tree)) (+ count 1)))))
(defun average-tree (tree)
(do-average-tree tree '() 0 0))
0370デフォルトの名無しさん
NGNGどないでしょ?
0371デフォルトの名無しさん
NGNGよろしく
0372デフォルトの名無しさん
NGNG選択肢は HTML か TeX か PDF くらいしかできんが。その辺でよければ
暇を見つけてちょこちょこやるぞ。Texinfo とかは知らん。コードは
コテハン名かレス番乗せてアリガトンくらいでいいのかな?
0373デフォルトの名無しさん
NGNGLISPからJAVAのライブラリを使うのじゃ駄目なのか?
0374デフォルトの名無しさん
NGNG>>372 HTML でよろしくおねがいします。
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGWikiにしてちょ。
0377デフォルトの名無しさん
NGNGバグがあるシステムが自分自身を更新って論理学的にどうなんでしょうか。
それ言ったら極論バイナリしか扱えなくなる気もしますが。
OSからlispで書いたらマシン止めなくてもよくなるのかなあ。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG分かりやすく言い換えると、ドメインに該当する
古いS式のコードを、新しいS式で上書きする
ってことじゃないの?
稼動中でもシンボルの参照先変わるだけだから、
普段インタプリタ上で行う作業と同じ。
古いコードは単にGCされる。
0380デフォルトの名無しさん
NGNGパッチというか関数単位でコンパイルするので正しい定義をロードしてコンパイルす
るだけです.論理学云々は通常はあまり関係無いような気がします.そのへんはコン
パイラをいじるとか自分の足場をいじるという特殊なケースでは注意が必要というく
らいに思っとけばいいんじゃないでしょうか.
0381デフォルトの名無しさん
NGNGそれは evalある言語ならできますよねえ。tomcatもできたような。
でも common lisp自身にバグがあったら困りますよね。そういう話ではない?
0382デフォルトの名無しさん
NGNGhttp://www.idg.co.jp/lw/news/back/index20020724_01_solaris.html
0383デフォルトの名無しさん
NGNG処理系のバグがあったら困るのはどんな言語でもそうじゃないの?それを気にしたら
言語とか関係ないような.
ただの eval ってのは評価だけでしょ.Lisp ではコンパイルできるから.Perl とか
Python とかスクリプト系言語で eval するってのと Lisp でインクリメンタルにコ
ンパイルするってのは随分違うと思うのだが.
0384デフォルトの名無しさん
NGNG>>383
評価とかコンパイルとかよくわからないんですけど349に書いてある、
JAVAだと止めないといけなくて ANSI CommonLispだと止めなくてもいい状況
っていうのがよく分からないんです。
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNG0388384
NGNGできませんですた。すみません。
0389デフォルトの名無しさん
NGNGスキーマが嫌いなの?
排他主義?
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG>>383
Java って動かしてるシステム上で一部分コンパイルし直しとかできるの?できるな
ら Java でも止めなくてもいいなんじゃないかな。漏れが昔さわった時は実行時にコ
ンパイルなんて機能はなくて javac でコンパイル→実行→修正してコンパイル→実行
という流れだったんだけど。
0392デフォルトの名無しさん
NGNG差別化って言われてもなー。
SchemeとCommonLISPについて言えば、コーティングスタイルが
かなり違ってくるから、スレを分ける意味はあったと思うけど、
実際立ったのは「初心者」スレだからねえ。
どのレベルで住み分けすりゃ落ち着くかね。
とりあえず誘導してかないと分けた意味ないよね。
今までの流れ的には
LISP初心者が練習コードを書き散らす&質問スレ
で良い気がするけど。
0393デフォルトの名無しさん
NGNGJavaもC#もコンパイラ前提なんで、実行時差し替えは無理。
インタラクティブな環境作るとしたら
開発環境まるごと持ちまわる必要があるんじゃないかと。
0394デフォルトの名無しさん
NGNGJavaも.NETもクラスライブラリにコンパイラ含まれてなかったっけ?
で、クラスファイルの動的ロードも可能と。
これをファイルに一度も落とさずに済ませることはできるのかな。
0395デフォルトの名無しさん
NGNG最近のレスを見てると、レスが二分されてるだけのような。
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG勝手にアプリケーションをリロードしてくれる == Tomcat は止めなくていい
くらいの認識だったりしません?たとえば起動処理に非常に時間のかかる
アプリケーションを想像してください。で、データ構造はいじらないけど
ちょっと見た目を変更したいと。表示部分だけちょこっと更新できたらウマー
じゃありませんか?
# 最近 java は触ってないので外しているかもしれませんが。
0398デフォルトの名無しさん
NGNGあんま java 知らないので外してるかもしれないけど。
0399バッタ以下でごめんなさい
NGNGlispをシェル代わりに使用されてる方はいますでしょうか?
いらっしゃられたらどの辺が便利か教えて下さい。
elispもシェルスクリプトもここに書き込まれてる問題なども
読んでも見るだけで終わってしまうので、formatとかreadとか
使ったお子様大喜びな、でもってファイル管理とかの実用性が
ちょっぴりあったり、ウケ狙いな面白さのある【問n】や解答が
見たいです。その余地があればですけど。
我がままいいスマソです…。
スレに付いて行けるようにかんばりまふ。
0400デフォルトの名無しさん
NGNGおれは Lisper だが、シェルスクリプトの類いは sh か Perl で書いてる。
0401バッタ以下でごめんなさい
NGNG馬鹿なことを聞きました。
0402デフォルトの名無しさん
NGNG0403デフォルトの名無しさん
NGNGメソッドのないクラスなんて、ただの構造体じゃね?
なんでそんなのがオブジェクト指向とかいえる訳?
0404デフォルトの名無しさん
NGNGきっと誰かがこう答えてくれたよ。「Scheme をshell scriptがわりに使って
いる人は結構いる。scsh (Scheme Shell) はそれが目的の実装。他には guile、
Gauche、stklos がそういう目的で使える。日本語でMLに質問できて、日本語
のinfoがあるのはGauche。」
0405デフォルトの名無しさん
NGNGその"結構"のレベルがperlなどとは比較にならない程度な訳で。
0406デフォルトの名無しさん
NGNGまああってもperl -e ''とやる手間を省略できるぐらいしか
意味がないけど。
0407デフォルトの名無しさん
NGNGとか言い出しかねないね。
とりあえず、もうちょっとまともなオブジェクト指向入門書を探して読んでから出直してこい。
0409デフォルトの名無しさん
NGNGちゃんとクラスに対応したメソッドがあるのでただの構造体とは違います。というあ
たりで納得していただけます?
それとも
(declass foo () ()) ;; クラス foo
(defmethod bar ((self foo)) ...) ;; クラス foo のメソッド
はオブジュクト指向じゃなくて
(defclass* foo () () ;; この例は実際には動作しません!! マクロで作ることは可能ですが…
(:method bar (self)
...))
のようにクラスの中にメソッドが入ってればオブジェクト指向という表記上の
話ですか?
0410デフォルトの名無しさん
NGNG>CLOSって、メソッドがクラスに含まれないらしいじゃん。
あるメソッドがある単一のクラスに「含まれる」とはいわないかもね。
いや、言ってもいいんだよ。例えばあるクラスのオブジェクトを1つだけ
引数としてとるメソッドなんかは、そのクラスに含まれると考えても問題
ないかもね。
あるメソッド呼び出しにおいて、
(foo-method object-of-bar-class object-of-baz-class)
なんてのは、fooメソッドがbarクラスに属すのかbazクラスに属すのかCLOSでは決めてないってだけ。
>メソッドのないクラスなんて、ただの構造体じゃね?
メソッドはあるよ。
乱暴にいってみれば、構造体みたいなの + その構造体みたいなのを引数として取るメソッド群かな。
ちなみにCLの構造体は単一継承をサポートしています。
「含む」「含まない」という区別が、単にソースコード上での話なのか、
それとももっと深い考えがあるのかな?
>なんでそんなのがオブジェクト指向とかいえる訳?
オブジェクト指向という概念が現在は拡散してしまっているという点がある。
・データ隠蔽の機能はCLOSでは提供されていないから、メンバフィールドはおっぴろげで触りたいほうだい。
・メソッドはある。
・多重継承はある。
あとは、...何が欲しい?
0412409
NGNG……昔漏れが言われた台詞だが。
0413デフォルトの名無しさん
NGNG+ 型チェックがあればOOはできるというだけかと。。。
0414デフォルトの名無しさん
NGNGけど、最近はパターンがどうのと、だんだん遠いところへ逝ってしまった気がする。>>OO
0415403
NGNGWでサンクス子。
そうか、データ隠蔽が潜在意識にあったから、メソッドが外、というのが変に見えたのか。
たしかにこれは必須じゃないね。でも、
> クラスに対応したメソッドがある
といってもこれじゃ、「クラス」というより「ユーザ定義型」と変わりなく、
「メソッド」じゃなくて「関数」のような。。。
0416403
NGNG継承によるオブジェクトの多態ができるのがミソか。
しかし、オブジェクトの組み合わせで1態(?)ってのは大変そうだなぁ。。
なんか拡散するオブジェクト指向の境界レベルみたいね。
0417デフォルトの名無しさん
NGNGほっとけ。ほっとけ。
基本を欠いている自分を棚にあげてのっけから挑発的な書き方をする時点でまともな
コミュニケーションやインフォームドコンセントを求めるには期待薄だし、そもそも
ものを教わろうとする態度じゃない。
0418デフォルトの名無しさん
NGNGシステムがやってくれるんですよ?そのクラスに対応したメソッドが定義されていな
ければ継承をたどって親クラスのほうへ探してくれるわけで。普通の関数だと
(defclass foo () ())
(defmethod bar ((self foo)) ...)
(defclass baz () ())
(defmethod bar ((self baz)) ...)
というのができないでしょう。
見た目の問題ならひょっとして
(call object method arg0 ...)
みたいな形式でメソッドを起動するラッパーマクロでも準備したら納得していただけますか?
;; 良く考えたら CLOS 以外でも C++ でもインライン定義以外は
;; class { int bar(); }; /* クラス定義 */
;; int foo::bar(int x, int y) { .... } /* メソッド定義 */
;; みたいに表記上はメソッド定義とクラス定義は生き別れですわな……。
0419デフォルトの名無しさん
NGNGメソッドは仮想関数の別名。
0420デフォルトの名無しさん
NGNG> > クラスに対応したメソッドがある
> といってもこれじゃ、「クラス」というより「ユーザ定義型」と変わりなく、
> 「メソッド」じゃなくて「関数」のような。。。
色々なクラスのオブジェクトを引数として取る同一名のメソッドがたくさんあつまって、
Generic Function (GF)と呼ばれる、その名前の関数1つを構成するんだよね。
つまり、あるメソッドを呼び出すときは、本当はGFにオブジェクトを
引数として与えて呼び出すんだよね。GFは内部で、オブジェクトのクラス
を調べて、それに対応したメソッドを捜し出して、そのメソッドを呼び出すと。
いかにも遅そうでしょ? かぶってもしーらないっ!
0421デフォルトの名無しさん
NGNGあれは「純粋オブジェクト指向」でいいぞ。無理に馴染まないもんに手をつける事
はないよ。
0422デフォルトの名無しさん
NGNG0423403
NGNGどもです。>>416って感じでよいみたいですね。
> いかにも遅そうでしょ?
動的検索呼び出しは商用界でシェアの高いJavaでもやってるんで大丈夫なのかな?
ただ、それをやるのが専用の解釈器かその上で動くプログラムかという問題はありますが。。。
0424デフォルトの名無しさん
NGNG# いきなり喧嘩腰で煽りはじめる香具師が居るとスレの雰囲気が悪くなるので
# 嫌なんだが。特に OO 話は不毛な議論になる確率が高いし。
0425デフォルトの名無しさん
NGNG>大丈夫メソッドコンビネーションなら、次期 Ruby に装備される予定だ。
ほぅ。情報ありがとう。
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGもういいだろ。
本スレと議論を分散してるだけなんだよ、このスレは。
0428デフォルトの名無しさん
NGNGCommon Lispの初心者といっても、プログラミング歴がゼロなのか、他の言語を
知っているのか、Cだけ知っているより、Rubyも知っているほうがクロージャとか
バインディングとかLisp的な概念をすでに把握しているだろうし。
今回の話題も明らかにCLOS初心者向きだよね?
初心者が質問しやすい雰囲気を作るというのも大切だろうけど、実際に質問が
来たときに、どれだけ有益なレスをつけられるかというのが勝負所だと
個人的には思う。本家スレとの区別はあんまり気にしなくてもいいんじゃない?
0429デフォルトの名無しさん
NGNGC++/Javaのオブジェクト指向、
メンバ関数がないオブジェクト指向(CLOSとか)、
クラスとインスタンスの区別がないオブジェクト指向(インスタンスベースと言うらしい)とか
いろいろあるけど、これらは全てオブジェクト指向の方法論。
オブジェクト指向そのものの要件はwikipediaによると
* カプセル化
* 継承
* ポリモルフィズム
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
あと、"構造体とクラスが変わらない"という発言はただ単に勉強不足なだけかな。
0430デフォルトの名無しさん
NGNGCommon Lispの構造体って
× * カプセル化
○ * 継承
○ * ポリモルフィズム
だよね?
0431デフォルトの名無しさん
NGNG継承、ポリモルフィズムもないぞ。
クラスには全部あるけど。
0432403
NGNGMethodCombinarionおもしろそうですね。Rubyには興味があるのでそのうちやってみたいです。
初心者スレということで、漏れの後の初心者のために貼っときます。
http://dolphin.c.u-tokyo.ac.jp/〜nisimu6/comp/clos/2.3.html
http://www.radonc.washington.edu/medinfo/meded531/ f2002/method-combination.pdf
0433デフォルトの名無しさん
NGNGそもそもこの三つの項目もオブジェクト指向一般論としてふさわしいかについても
疑問を呈する余地はあるんじゃない? だいたい、これを言い出したのは C++ の
ストラウストラップだから、429 は自身の矛盾に気づいてない。
0434デフォルトの名無しさん
NGNGまぁ勘弁してくれよ。なるべく質問に答えるとか親切丁寧を目指してがんがってるんだって。
>>428
そうだよな〜初心者だけじゃなぁ。Scheme やった後 CL に来ても本人がそう思えば
CL 初心者だしな。
0435デフォルトの名無しさん
NGNG>そもそもこの三つの項目もオブジェクト指向一般論としてふさわしいかについても
schemer's way から辿れるやつね。
http://www.paulgraham.com/reesoo.html
俺的 OO の要件はメッセージパッシングが出来るかどうかのみだなぁ。CLOS よりも
SICP に出てくる様なのが好き。
0436デフォルトの名無しさん
NGNG> 継承、ポリモルフィズムもないぞ。
継承は、defstructの:includeオプションで指定できるのでは?
ポリモーフィズムもジェネリック関数でできませんか?
> クラスには全部あるけど。
カプセル化って言語仕様で直接サポートされていますか?
0437デフォルトの名無しさん
NGNG>疑問を呈する余地はあるんじゃない?
もちろん余地はあるし、ないなんて言った覚えはない。疑問があるなら余地云々を言うんじゃなくてここに書けば?
>だいたい、これを言い出したのは C++ のストラウストラップだから、429 は自身の矛盾に気づいてない。
誰がこの文面を書いたかはこの議論にまったく関係ない。文面の内容だけが関係ある。
よって矛盾はない。
0438デフォルトの名無しさん
NGNG一応
http://e-words.jp/w/E382ABE38397E382BBE383ABE58C96.html
の定義に従って話すなら、サポートされてるんじゃないの?
0439デフォルトの名無しさん
NGNG何がカプセル化,継承,ポリモルフィズムなのかも人によって理解が違うし、考え出すと分からなくなってくるな。
0440デフォルトの名無しさん
NGNG>人によって理解が違うし、考え出すと分からなくなってくるな。
人によって違うが正解なんじゃないかな(だから言葉の定義に関する議論は不毛な
議論になりがち)。
多態ってオブジェクト指向だけじゃなく抽象データ型でも使われているし。
0441デフォルトの名無しさん
NGNGCLOSオブジェクトでカプセル化がサポートされているとした場合、
Structでもサポートされていると言えるような気がします。
俺の理解ではクラスのメンバフィールドに誰もが読み書きできる状態は、
カプセル化がサポートされているとは言えないと思っていました。
ジェネリックファンクションの名前を工夫して、実際には存在しない
メンバがあたかも存在するように演出することはできますよね。
(defmethod person-age ((person person))
(- (this-year) (person-year-of-birth person)))
みたいに。
OOを勉強しなおそうかな…
0442デフォルトの名無しさん
NGNG>継承は、defstructの:includeオプションで指定できるのでは?
:includeで継承に近いことはできると思うけど、親構造体のタイプと子構造体のタイプを
(defstruct a (z nil) (x nil))
(defstruct (b (:include a)) (c nil))
とした時にbは、aを引き数にとる総称関数に呼ばれないような。
あ、でも、これが「継承」の必須条件かどうかってのも議論になるかな。
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG抽象データ型の発展としてのオブジェクト指向(Cook あるいは、クラス指向)か、
メッセージパッシングメタファのオブジェクト指向(Kay、Ingalls、Goldberg のメッセージ指向)かは
同じ「オブジェクト指向」でも(排他ではなく)分けて考える習慣をつけておくほうがよいよ。
ttp://www.cs.utexas.edu/users/wcook/papers/OOPvsADT/CookOOPvsADT90.pdf
ttp://www.metaobject.com/papers/Smallhistory.pdf の p20 あたり
0445デフォルトの名無しさん
NGNG;public
(a b
;private
c d))
でもいいようなw
これだとCの構造体とかもカプセル化になっちまうな
0446デフォルトの名無しさん
NGNG> とした時にbは、aを引き数にとる総称関数に呼ばれないような。
呼ばれている気がするけど外してる?
(progn
(defstruct parent
(foo))
(defstruct (child (:include parent))
(bar))
(defmethod my-method ((object parent)) (parent-foo object))
(setq child (make-child :foo 'foo :bar 'bar))
(my-method child))
=> FOO
0447デフォルトの名無しさん
NGNGあくまでも俺的 OO の定義ですよん。外部表現では使い分けてます。
0448デフォルトの名無しさん
NGNGDQNですた、スマソ....
0449デフォルトの名無しさん
NGNGどんなやつ? SICP にそんな魅力的な OO システム出てきたっけ?
漏れも Scheme 勉強したてのころはいちいち感動してたけど、正直
CLOS はイイと思う。
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG>SICP にそんな魅力的な OO システム出てきたっけ?
魅力的って書かれると言い辛いですが、3 章に出てきたみたいなプリミティブなのを
実装出来る自由があれば私には十分です。
0452デフォルトの名無しさん
NGNGそれで満足する香具師ってどっちかというと Schemer の中でも少数派じゃないか?
大抵の Scheme 処理系はオブジェクト指向向けに拡張しちゃってるし……。まぁいろ
いろあるのは良いところだ。たしかにシンプルで良いとは思う。昔 CL でもインスタ
ンスベースに走った連中が居たしなぁ。
0453デフォルトの名無しさん
NGNG16 進文字列を倍精度浮動小数点数にしたりするような2通りの関数を作りたいと思ってるのですが、
Lisp でどのように作っていいのかがわかりません。
ヒントだけでも教えていただけないでしょうか?
(convert-hex-double #x40091eb851eb851f)
=> 3.14d0 (little endian で)
(convert-double-hex 3.14d0)
=> #x40091eb851eb851f (little endian で)
------------
同じことを C では出来ているのですが、どうしても Lisp で実装したいのです。
ちなみに、C で little endian での convert-hex-double は以下のように実装できます。
1.8バイト分の unsigned char 配列を用意。
2.16 文字ある 16 進表記文字列を後ろから 2 文字づつとっていって、
その2文字を 16 進数と見立てて unsigned int に変換。
そのまま1.での unsigned char 配列に、前から詰めていく。
3.その配列を (double) にてキャスト
0454デフォルトの名無しさん
NGNG「unsigned char」に変換でした。
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG漏れは試してないんで動くかどうか知らんけど。
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0024
0457453
NGNG>>455 確かにそうですね。別に全部 Lisp で実装する必要もないですし。
自作の C の関数についてリンクの仕方を勉強しないと。。
>>456 ちょっと難しそうです。。
いろいろ調べてはいるのですが、
倍精度実数の変数の中身について、
直接にビットパターンをイジれる方法が見つからないっす。。
8 バイトの配列を 8 バイトの double に変換するとか、
そういった C に洗脳された頭を変更する必要があるのでしょうけど。。
0458デフォルトの名無しさん
NGNGかならんの?
0459デフォルトの名無しさん
NGNGとりあえず片方だけ。
(defun convert-hex-double (integer)
(let ((sign (logand (ash integer -63) 1))
(exponent (- (logand (ash integer -52) #xffff) 1023))
(mantissa (logior #x10000000000000 (logand integer #xfffffffffffff))))
(* (if (zerop sign) mantissa (- mantissa)) (float (expt 2 (- exponent 52)) 0d0))))
0460デフォルトの名無しさん
NGNG忘れてた。仮数部が0のときは特別扱いしてくれ。
それから、逆方向はinteger-decode-floatで整数にバラしてから
くっ付ければできるはず。
0461デフォルトの名無しさん
NGNG自分で言ってること判ってる?
doubleの中身の作りは環境によって違うから、Cの様に
無理矢理キャストする方法は他の環境では使えないし、
何に使うのか見えないのでここでは答え様がないよ。
↓みたいな環境依存なのしかないんじゃないかな。
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/download/pack.lisp.txt
0462デフォルトの名無しさん
NGNGいかがでしょう?
http://cgi.at.infoseek.co.jp/lambda_list/cgi-bin/lambda.cgi?name=Examples
0463デフォルトの名無しさん
NGNGそれじゃ 453 の望みとは違うと思われ。たしかにそれでも
(format nil "#x~X" (double->bits 3.14d0)) => #x40091eb851eb851f
とかできるけど、そもそも C ではそれは出来てるわけだし。
0464453
NGNG>>458 いろいろやってみたのですが、format を騙すような感じで
なんとかするっていうのは、無理っぽいです。
>>459 正攻法ですね。有り難うございます。上手くいきました。
>>460 今、integer-decode-float を使って逆変換してるのですが、簡単でないです。
どうも仮数部,、指数部、符号をそれぞれ 53, 10, 1 ビットづつにしているようなのですが。。
(integer-decode-float 3.14d0) は、
2567051787601183, 1, 1 となって欲しいところなのですが、
7070651414971679, -51, 1 となってしまいます。。なんか勘違いしてるのかな。。
>>461 そうですね C での話は完全に忘れる事にしました。
正攻法で攻めるのが正しいみたいです。
そのサイトは逆変換が出来てから落ち着いて勉強してみます。
>>462 できました。C ライブラリのリンクの仕方がおおまかに分かりました。
とっても助かりました。。
0465453
NGNGlisp のプログラムの中で変換作業をできれば、一応は仕事上それでいいんです。
でも、ついでにいろいろ勉強できるともっと嬉しいです。
0466453
NGNGあるプログラムについてプロセッサーシミュレーターにかけて計算させた後、
メモリ上に残った生のデータを吸い上げてそのプログラムの期待値と実際の計算値とが
一致しているか?の比較をしています。
その時にメモリ上のデータは設計者の都合により 16 進表記のみの取得が可能で、
上のプログラムの出番になります。
決まった番地のデーターをただ吸い上げてデータを見るのは C のプログラムでいいのですが、
何回も何回もインタラクティブに行う必要があり、時間も少し余ってるし、
勉強中の lisp でやっちゃえ〜。って思ったわけです。。
0467デフォルトの名無しさん
NGNGビット補正しなきゃいけないからだよ。HyperSpec の scale-float んとこ
に載ってる例を参照の事。
0468デフォルトの名無しさん
NGNGリストや lambda, if, cond, begin 辺りでネストが多くなるとコードが追い辛くなる
ので、[] で括るのはありかなと思うのですが。
0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG>> 470
S 式単位で移動できないエディタでは書くのがつらいです.
それでも書かなければならないこともあるんですね.
0472デフォルトの名無しさん
NGNG↓とかだとちょっとなぁ…
(defun foo (let ((a 1) (b 1) (c 1)) (+ a b c)))
(defun foo (let [(a 1) (b 1) (c 1)] (+ a b c)))
(defun foo [let ((a 1) (b 1) (c 1)) (+ a b c)])
[defun foo (let ((a 1) (b 1) (c 1)) (+ a b c))]
コードが追い辛くなる例と [] で括ってウマーな例を
示してくれれば改宗するかもしれないけど。
;; それとも ] は [ に対応するまで閉じちゃうという
;; スーパー括弧の話?あれは不評だったような
0473デフォルトの名無しさん
NGNGにおいて、((a 1) (b 1) (c 1))の部分の背景色が微妙に薄かったら見やすいかも。
あ〜、Emacsで実験してみたくなった。
0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGこれは、宿命だな?
0477デフォルトの名無しさん
NGNGよさそう。
0478デフォルトの名無しさん
NGNGいらない。
0479デフォルトの名無しさん
NGNG括弧が嫌いな内に拡張 loop を覚えちゃうのも一つの手だな。昔なら拡張 loop は
無理に覚えなくてもいいと言い切れたが Edi Weitz 氏とかがバリバリ使ってるからなぁ……。
0480デフォルトの名無しさん
NGNGloopは括弧が少なすぎる。
0481デフォルトの名無しさん
NGNG((´∀` :accessor (´∀` )
:initform >>1
:initarg ´∀` )))
0482デフォルトの名無しさん
NGNGloop大っ嫌い。氏ね。
--以上終了--
0483デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNGcl-ppcre に喧嘩を売ってますか?まぁ使わないのは勝手ですがね
0485デフォルトの名無しさん
NGNGそう叫びたいのは漏れだけですか・・・
0486デフォルトの名無しさん
NGNGん? cl-ppcre使うときにloopを使う必要あるの?
>>485
誰に言ってるんだ?
0487デフォルトの名無しさん
NGNGLOOPの存在はLISPを冒涜しています
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG結果は同じでも、意味が違うんじゃない?
notとnullみたいな。
漏れは
再帰処理するときはcar,cdrで
純粋に1,2,3...番目の要素を取り出す時はfirst,second...かな
だから、restの出番はあまりない。
0490デフォルトの名無しさん
NGNG意味も存在価値も全くありません
余計なシンボル増やしてメモリ圧迫するだけです
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNGシンボルって全部メモリ上にロードされているんですか?
0494デフォルトの名無しさん
NGNGcar,first、cdr,restは全く同じもの。
car,cdrはやや時代遅れ。理由の無い限りfirst,restを使ったほうが良い。
と書いてあります。
0495デフォルトの名無しさん
NGNG>>494
> car,cdrはやや時代遅れ。理由の無い限りfirst,restを使ったほうが良い。
職場で、car, cdrを使ってコーディングしたら同僚から失笑をかったと言っている人が
いました。深い意味はわからんけど。
俺は慣れでcar, cdrを使うな。firstは second, third,..と一緒の場所でなら使うかも。
cdrより多分、restのほうが分かりやすいとは思う。
0496デフォルトの名無しさん
NGNG> 仮想記憶のアドレスは割り当てられるかもしれないけど、実際に参照しなければ実メモリは喰わない気がする。
GCでさわられちゃわないのかな?
0497デフォルトの名無しさん
NGNG対話による〜ってやつでしょ。
car,cdrを使ってる本の方が多いし、異質なんじゃないの。
0498デフォルトの名無しさん
NGNGおいおい、
じゃあfirst,rest使う理由はなんだよ?
それこそ失笑モノだな
first以下はLISP史の汚点の一つだよ
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNGcaadrとかcdaarといった類のものも、確かに便利だけど、頭悪そうにも見えるし。
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNGWinstone の Lisp なんかは first, rest 派じゃなかったかな。
最近だと Paul Graham の本が car, cdr を押しているけどね。
first, second, third, ....
car, cadr, caddr, ....
nth 0, nth 1, nth 2, ....
あたりは全部覚えて置いたほうが良いんじゃないの。
car 派でも first 派でもあんまり狂信的だと、どっちも有害。
心は広くもちましょう。
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG意味はプログラマの中にあるのでは?
0505デフォルトの名無しさん
NGNGHyperSpec の記述、
(first list) == (car list)
Notes:
first is functionally equivalent to car,
second is functionally equivalent to cadr,
third is functionally equivalent to caddr,
and fourth is functionally equivalent to cadddr.
は car, cdr と first, rest の意味的一致を示すものではなかったんだ!
その他> な、なんだってー(以下略
どーゆうことなんだ? >>503
0506デフォルトの名無しさん
NGNGコンスの左側 => car, 右側 => cdr
リストの 1 番目 => first, 2 番目 => second, ..., リストの 1 番目以外 => rest
と使い分けている。統一せよと言っている人は教条的だな。
あと first, rest はインデントがそろわないのが気にいらない。
(defun copy-list (lst)
(if (null lst) lst
(cons (car lst)
(cdr lst))))
(defun copy-list (lst)
(if (null lst) lst
(cons (first lst)
(rest lst)))) ; 気持ち悪い
0507494
NGNGそうです。
最近古本で買ったんですけど、それなりに分かりやすいので、
ちょっと(ほんとにちょっと)はLispが使えるようになったと思う。
でももうすぐ読み終わりそう。
なんかオススメのLispの本ってありますか?
英語読めないので、日本語の本で。
0508デフォルトの名無しさん
NGNG1. Paul Graham の ANSI Common Lisp
2. ウィンストンの LISP (I), (II)
あたりかなぁ。ただ、2. は内容は良いんだが、翻訳と誤植がひどい
のでちょっと覚悟がいるかも。CONS が COSN とかなっててもキニシナイ
0509494
NGNGどうもです。
明日あたり本屋回ってみます。
でもちょっと前に軽く探したんですけど、地方だからかLispの本って
全然置いてないんですよね〜
中身見てから買いたいけど、無かったらアマゾンで買うか。
0510デフォルトの名無しさん
NGNG他のおすすめ。アマゾンで手に入ります。本屋さんには無いかも。
1.下地貞夫(著)、 「数式処理」基礎情報工学シリーズ、森北出版
2.湯浅太一、荻谷昌己(著)、「Common Lisp 入門」、 岩波書店
1の用に、言語それ自身の本じゃなくて、
主目的が別にある本に分かりすくて有益な Lisp コードが書かれている本って
実は結構ありそう。人工知能分野とか。
0511デフォルトの名無しさん
NGNG* alist の key.car か,first か.
* では alist から key を取った残りは?
残りだから rest でしょうか?
しかし dotted pair では残りとは言えません.
0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNGあれって(plus 4 5)とか書いてあったりして隔世の感があるよな。
0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGまずはその過去ログ嫁。
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNGなんで?(key . value) で value は「残り」じゃそんなにまずいの?
まぁ、そう思う 511 は間違いなく car/cdr 派だから car/cdr を使ったほうが
いいんじゃないかな。
>>513
そんなのあったっけ?今手元にないんだが、クロージャ、ジェネレータ、
マーク&スウィープ GC、CLOS、遷移木のコンパイルと一通りそろった
入門書だった記憶があるが。とにかく訳と誤植がひどかった思い出がある。
0519デフォルトの名無しさん
NGNGalist の場合は普通「keyとvalueのペア」として扱うだろうから、「残り」じゃ変でしょ
0520デフォルトの名無しさん
NGNG俺は残り云々よりどうしても cons セルの car cdr が浮かぶので cdr
使うけどな。別に rest 使う奴にオマエは変だ! cdr にしろ!と言うほど
強いこだわりは無い。
0521デフォルトの名無しさん
NGNGfirst は一つで、 rest は不特定多数っぽいもん。
他人がどれ使っててもいいっていうのは同意だけど。
0522デフォルトの名無しさん
NGNG就職に有利になるとか?
0523デフォルトの名無しさん
NGNGところで質問です.CLHS の position 関数のところにこんな記述が.
Notes:
The :test-not argument is deprecated.
The function position-if-not is deprecated.
これは,not で使うなら述語に含めて下さいという意味ですか?
CLHS は関数の説明に Application note があったらいいなぁ.
:start に nil が来たらいけないくせに,見つからないときは
nil しか返せない.(or (position ...) (length str)) じゃあなぁ...
do ループはいまいち使いずらいし,labels をループに使うのは
気の利かない処理系で慘めになりますYO!
0524デフォルトの名無しさん
NGNG> これは,not で使うなら述語に含めて下さいという意味ですか?
うん。
たとえば、:test-not #'foo ではなく :test (complement #'foo) にしろってことです。
0525デフォルトの名無しさん
NGNGはっきり言って就職の役に立つ事はほとんどありません.
面接官が Lisp == 時代送れ と思い込んでる可能性もありますし.
就職のためになる言語を学びたいなら C++/Java あたりをオススメしまつ.
0526デフォルトの名無しさん
NGNGLisp というより関数型言語の知識があると役に立つ場面がある。
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNGいい会社だな。漏れなんて
「学生時代は何で開発を?」
「主に Common Lisp 使ってました」
「ウチはオブジェクト指向を重視してるんですよ?」←いきなり表情が険しくなる
「え、いや、その……申し訳ありません」
というのを経験して以来、Lisp の名を出さないように気をつけていた。
>>527 みたいなイメージもありそうだしな。実名じゃ Lisp 好きなんて言えねー
0529デフォルトの名無しさん
NGNG逆に、そういう会社に間違って入らないための指針にもなるなw
0530デフォルトの名無しさん
NGNG[問題]
階乗 x^n を普通に計算すると
(defun my-expt (x n) (if (= n 0) 1 (* x (my-expt x (1- n)))))
となりこの計算回数は n に比例する。これを工夫して log(n) の
オーダーの計算回数で計算するように修正せよ。
また n が 10000 程度のときどれくらい計算回数に差がでるだろうか?
0531デフォルトの名無しさん
NGNGなhogeを作った方が使いまわしできるな。
0532デフォルトの名無しさん
NGNG(labels ((square (x) (* x x)))
(cond ((zerop n) 1)
((evenp n) (square (my-expt b (/ n 2))))
(t (* b (my-expt b (- n 1)))))))
0533デフォルトの名無しさん
NGNG>「ウチはオブジェクト指向を重視してるんですよ?」←いきなり表情が険しくなる
ってところで、CLOS を持ち出したりすると、
どうせその面接官は知らんだろうから自尊心が傷つけられちゃって、
さらに心証を悪くすることになるんだろうな。
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG> また n が 10000 程度のときどれくらい計算回数に差がでるだろうか?
532の場合。
10000回 vs (log 10000 2) * m = 13.29 * m回
0536デフォルトの名無しさん
NGNG>「ウチはオブジェクト指向を重視してるんですよ?」←いきなり表情が険しくなる
笑った。わけわかんない言語で変なクセがついているのを警戒しているのかな?
>>527
>Lispできると言語ヲタのイメージがある
ほめことばだよね。
0537デフォルトの名無しさん
NGNGここでキレて
諸君 私はLispが好きだ。
括弧が好きだ。リストが好きだ。
再帰が好きだ。lambdaが好きだ。高階関数が好きだ。
パッケージが好きだ。クロージャが好きだ。マクロが好きだ。
...
と演説カマしてみたらどうなるだろう。
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG無職という点を生かしてlispにはまってみるのも面白いかも。
0541デフォルトの名無しさん
NGNGそれは、オブジェクト指向といいたいだけなので
素直に「うちは、C++とJavaしか使いません」と面接官いえないんでしょ
0542デフォルトの名無しさん
NGNG寝る前に出題したんで間違えたスマソ…
0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNG(defun my-expt (x n)
(do* ((n n (ash n -1))
(r 1 (if (= (logand n 1) 1) (* r x) r))
(x (* x x) (* x x)))
((= n 0) r)))
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNGこういう計算はコンピュータに向いてるなあと感じるんですけど、
CommonLisp とか Scheme とかだとそれがあまり感じられないのですが
当り前の様に最適化されているのでしょうか。
0547デフォルトの名無しさん
NGNG* fixnum, bignumの型チェックがある。
* fixnumと確定したあとも、タグビットの操作がある。
したがって、型宣言、インライン宣言するなどコンパイラの手助けをしなければ、
Cに処理速度で負けることはある。
逆にCと同じだけの型宣言などをすれば、理論上は同じ処理速度を得られる
可能性はある。あとはコンパイラの出来しだい。
別の観点から考えると、普通に書いた関数でも、
(my-expt 2 100)
=> 1267650600228229401496703205376
と正しい結果が得られて、コーディング中にオーバーフローの心配は消滅する。
0548デフォルトの名無しさん
NGNGCは機械寄り、Lisp系は抽象概念寄り。
0549デフォルトの名無しさん
NGNG(defun hoge (f x n z)
(cond ((zerop n) z)
((evenp n)
(let ((y (hoge f x (/ n 2) z)))
(funcall f y y)))
(t (funcall f x (hoge f x (1- n) z)))))
(defun my-expt (x n)
(hoge #'* x n 1))
(defun my-mult (x y)
(if (< x y) (hoge #'+ y x 0)
(hoge #'+ x y 0)))
他の使いまわし方が思いつかん。
0550デフォルトの名無しさん
NGNG面接官に Lisp って言うより、CLOS と言っておいて、
「CLOS とはどういったモノですか?」
「動的オブジェクト指向言語です」
と言えば何かすごそうに聞こえるよ。(Franz の手法)
0551デフォルトの名無しさん
NGNGload とか require だけじゃ高度なライブラリは作れないのでしょうか.
目下,google で「AA マンドクサ」を検索すると本スレ part9 が...
0552デフォルトの名無しさん
NGNG(defun hoge (f x n z)
(cond ((zerop n) z)
((evenp n) (hoge f (funcall f x x) (/ n 2) z))
(t (hoge f x (1- n) (funcall f x z)))))
0553デフォルトの名無しさん
NGNGマニュアルが素早く斜め読み出来る英語圏の人にとっては何でもないのかな。
それとも、やっぱり苦戦するのかな。
とりあえず、sbclには最初からasdfがインストールされてるので漏れは最近(cmuclから)
こっちに浮気中。
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNGそっちの方が速いとは限らない。
0556551
NGNG素早く斜め読みしてみました.
* Using GNU Make ... と
* Lisp-only が目に着きました.
おお! Lisp コードだけでもインストールできるじゃないか.
英語に馴れたフリをすることで気付けました.ありがとうございます.
しかし,
(load "/home/foo/.../clocc/clocc")
=>
...
*** - EVAL: the function WITHOUT-PACKAGE-LOCK is undefined
...
うちの Debian woody のパッケージ, clisp 2.27 は古いと仰せられました.
処理系には依存しないが,ディストリビュージョンの
パッケージには依存するという盲点です.
古い clocc を探してみるも,clocc.sourceforge.net -> Project home には
よく分からない 5 つのパッケージが.そのうちの CLX を
落としてきましたが,,,なんてインストールが簡単なんだ!
これで cllib をバリバリ使えるんですか?ちょっといろいろやってみます.
0557デフォルトの名無しさん
NGNG$ export LISPTYPE=cmucl
$ cd /path/to/clocc
$ make clocc-top
この後 clocc/src/以下のディレクトリ(port/とかcllib/とか)の
使いたいライブラリのある場所に行って
$ make system
とやれば、ビルド開始。
で、cmuclの初期設定ファイルに
$ cat >>~/.cmucl-init.lisp
(setf *clocc-root* "/path/to/clocc/")
(load (concatenate 'string *clocc-root* "clocc"))
;; ↓ロードしたいものを御自由に指定してください。
(load (translate-logical-pathname "clocc:src;cllib;base"))
(load (translate-logical-pathname "clocc:src;port;sys"))
Ctl-D
#'save-lispなどでcoreに含めてしまうのも良し。
0558デフォルトの名無しさん
NGNGなるほど、おれの頭には
x^n == (x^(n/2))^2
しかなかったけど、こっちでもいいのか。
x^n == (x^2)^(n/2)
>>544 そのアルゴリズムって岩波の「基本的算法」かなんかで見た気がするな。
0559デフォルトの名無しさん
NGNG最強じゃない?
0560デフォルトの名無しさん
NGNGZopeの何も判ってない奴の意見だが。
0561デフォルトの名無しさん
NGNGLython[ttp://slashdot.jp/article.pl?sid=04/02/15/1528254]と逆のアプローチで。
0562デフォルトの名無しさん
NGNG無いと非常に困ります.
0563デフォルトの名無しさん
NGNG0564562
NGNGshell に nkf コマンドを渡すからイラネーヨ w
しかし clisp で ext:shell するとプログラムの終了ステータスしか返されず,
出力は標準出力に垂れ流してしまう.
一時的なファイルに入れておけと?
0565デフォルトの名無しさん
NGNGZopeくらいのことはCL-HTTPで十分だったりしない?
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNG> ZopeくらいのことはCL-HTTPで十分だったりしない?
CL-HTTPはウェブサーバで、Zopeはウェブサーバにもう一層、アプリケーション層
の仕組みが加わって、いるのでは? ユーザ認証から始まって、Zopeオブジェクト
をデータベースに保存できるとか、色々便利そうな機能があるのではないのかな、
Content management systemとしての機能もあるかな?
>>564 GNU CLISPなら、普通にEUC-JPを扱えないのかな?
詳しいことわすれたけど、CLISPでなら日本語の文字コード変換フィルタ
プログラムって:external-encoding(だっけ?)を読み書きのときに指定
するだけなのでは?
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNGclisp なら convert-string-from-bytes と convert-string-to-bytes で変換かな
0570デフォルトの名無しさん
NGNG0571562
NGNGわー.すみません.内心,最初から諦めていたのか
impnotes.html を読んでいませんでした.
すごいです.欲しかったものがたくさんありました.
ただ,URL エンコードされたものについて色々やってみましたが,
iso-2022-jp の場合は「% に続く 2 文字を整数にしてベクトルへ格納」という
やり方ではできないようです.$ が入っていたので (w3m にて).
>>570 活用しているんですね.いいなぁ.
0572デフォルトの名無しさん
NGNG使い勝手のいいUDEでLISPが開発できればいいのに。
0573デフォルトの名無しさん
NGNG程度ですね。まぁ、Eclipse を自分でいじれるクラスの人なら好きなように
できるでしょう。でも主な Lisper は Lisp ベースのエディタ(Emacs とか)
使ってる人が大多数なので…。
ちなみにどの辺が使い勝手が良いですか? >Eclipse
ソースレベルデバッガとかリファクタリング周りは羨ましいけど
結局 Lisp の開発だと Emacs の方が快適なんで Eclipse は Java でしか
使ってないんですが。
0574デフォルトの名無しさん
NGNGがないから知らんが、一般に普及しているECLIPSEでLISP開発が
できたら認知度のUPにつながるかも知れない。
>573
リファクタリングは便利。
packageの移動字に名前を自動で参照しなおしてくれるのもいい。
0575デフォルトの名無しさん
NGNGて、EllipseのプラグインってもしかしてJava?
・・Javaわかんねえよなおまいら
つーかEllipse入れるってことはJavaランタイムも入れなきゃだめか
0576デフォルトの名無しさん
NGNG> 製作中のプラグインがいくつかありますが、現状ではハイライトができる
> 程度ですね。
と書いているのだが…。
0577デフォルトの名無しさん
NGNGわかってるって!
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGつくればいいんじゃないのばかども。
0581デフォルトの名無しさん
NGNG汎用IDE開発環境として十分な機能がそろっているし。
最近はEmacsも画像を扱えるようになったので、
見ためもEclipseにあまり負けていません。
http://ecb.sourceforge.net/screenshots/1.png
http://ecb.sourceforge.net/screenshots/index.html
この絵にあるようなツリーコンポーネントのコードって独立して
他のパッケージから使えるのかな。ETK (Emacs Took Kit)とかいって
だれかツリービュー、ボタンなんか作らねーかな…
(テキストベースのツールキットはすでにあるけど)
emacs + CL ワショーイ!
0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG;; スレ違い気味だがそういや ISLISP ってのがありましたなぁ
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNGhttp://www.itscj.ipsj.or.jp/topics/tp34.html
0587デフォルトの名無しさん
NGNGOpenLisp と国産のが2つくらい?どれも普及するようなもんじゃないよなぁ…。
CL よりコンパクトっても CL より高性能の処理系がなきゃぁ使う気がおきないよ。
仕様がコンパクトなだけなら別に Scheme でもいいし。
0588デフォルトの名無しさん
NGNGあとCLの場合は互換性かな
実行ファイルも作れるとなおいいんだけど
0589デフォルトの名無しさん
NGNG>>587 CL より高性能の処理系がなきゃぁ使う気がおきないよ。
俺がCLが好きなのはプログラミング上で問題になりそうなことの解決策が
仕様としてすでに用意してあることなんだよね。その解決策がSchemeが求めるような
たったひとつの冴えたやりかたではないにしても。
卑近な例では、キーワードパラメータとか、コンパイラマクロとか、色々ね。
ここらへんは、規格制定時に各Lisp陣営から知恵をあつめた成果だと思うけど。
0590デフォルトの名無しさん
NGNG最近Lisp/Schemeの面白さに目覚め、できればこれで飯食って行きたいと本気で考えてるんですが、
どの会社の業務内容を見ても使用言語はC/C++かJava、良くてPerlとしか書いてありません。
富士通やNTTでは研究が行われていた(それも昔の話?)ようですが、
現在のところどうなんでしょう?
もちろん言語は手段の一つに過ぎないことはわかってるのですが、
どうせ仕事するなら好きな言語でとどうしても考えてしまいます。
俺は仕事でLisp/Scheme使ってるよって方いますか?
0591デフォルトの名無しさん
NGNG誰か教えて。
0592デフォルトの名無しさん
NGNG案件として、lisp/schemeな仕事って殆どないんでない?
仕事にしたいなら、ポールグレアムさんや川合史朗さんみたく自分で会社作っちゃうか、
大学とかの研究室に入るのが多分一番速いと思うがどうだろう?
参考までに(ACLとschemeな例だけど)
ttp://jp.franz.com/base/success_main.html
ttp://www.shiro.dreamhost.com/scheme/experience-j.html
0593デフォルトの名無しさん
NGNGあとは言語処理系扱ってる会社なら可能性あるかも。
0594デフォルトの名無しさん
NGNG規格が約束するのは高機能
0595デフォルトの名無しさん
NGNG正: 高性能かどうかは実装依存
0596デフォルトの名無しさん
NGNGCの例でいうと、変数へのポインタ経由での自由な参照(aliasing)をゆるしている仕様
のせいで、コンパイラが、なかなかFortranに勝てる最適化ができないという課題が
あったよね。
この点は、C99規格で対処したような気がしたけど。
CLなら、CLOSの実装かな…
0597デフォルトの名無しさん
NGNGそうゆう意味では CL は比較的恵まれている。CLOS もリファレンス実装
だった PCL にもメソッドキャッシュがあったりしてそこそこがんがって
たよね。
0598デフォルトの名無しさん
NGNGloopsよりになったんだよな。
bit別冊 Common Lisp オブジェクトシステム 共立出版 (絶版)
にそこらへんの事情が説明されてた。
0599デフォルトの名無しさん
NGNGloopsとかflavorsとか聞くけど、実際はどんな感じのモノだったのかな。
昔話キボウ!
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG0603名無しさん@Emacs
NGNG>>592
>>593
ありがとうございます。
実は既に大学の研究室に在籍してます。動画像や音声の実時間処理が
中心なのでほとんどCを使わなければいけない感じですけど。
Lispは研究とは関係なく、ほとんど趣味でやってます。
いじってるだけで楽しいのでよっぽど向いてるのかもしれません。
(Lisp関連の論文なんかも落として読んでいるんですが、
直接研究に繋がらないのがツラいです。)
そもそもLispに興味を持ったきっかけはEmacsとSawfishなんですけど、
完璧にハマったのがポール&川合さんのサイトが原因です。
起業も・・・してみたいんですけど、どうしてもノウハウが。
いくつか会社説明会をまわってるんですが、
企業によっては問題を解決するのにエンジニア側が好きな言語を選択できる
場合もあるそうなので(サーバサイドのシステムなんかはそうらしいです)、
そこらへんを中心に探していくしかないですかね。
あと前から気になってたんですが、とまべちさんってどういう方なんでしょうか?
Lispacheなんかで有名ですが、洗脳とか催眠とかアブナそうな
キーワードが・・・。
0604デフォルトの名無しさん
NGNG初心者以外の人が解答を書く場合、別のところに書いてリンク貼ってね。
[問題] member, assoc を実装せよ。なお、:test キーワードのみサポートすればよい。
0605デフォルトの名無しさん
NGNGおれの知ってる範囲で、最近日本で Lisp 使って仕事してるとこってここくら
いしか知らない。
ttp://cl-www.msi.co.jp/solutions/knowledge/
毎月 CL のセミナーやってるからそのときに来て話を聞いてみたら?
0606デフォルトの名無しさん
NGNGCL 中心という事と初心者向けという事で目的が違うじゃん。住人が
かぶってるんだからしょうがないだろ。いちいち指摘しなくてもいいんじゃネーノ。
0607デフォルトの名無しさん
NGNGXXX.exeに憧れる・・・。
0608デフォルトの名無しさん
NGNGhttp://www.cons.org/cmucl/doc/executable-print.html
つーかそんなことするまでもなくシェルスクリプトの要領で書けば(Winならバッチファイル?)解決...
0609名無しさん@Emacs
NGNG前から気になってたんですが、シェルスクリプト風に書く場合
1行目って、gclなら
#!/usr/bin/gcl.exe -f
clispなら
#!/usr/bin/clisp
でできるんですけど、cmuclの場合はどうしたらいいんでしょうか?
0610デフォルトの名無しさん
NGNG一体なんですか?
どうやって使うんですか?
0611デフォルトの名無しさん
NGNG#!/bin/bash
lisp <<EOF
(format t "Hello,world!")
EOF
みたいな感じで良いのでは。
# #!/usr/bin/lispが使えないことに気付いて必死のフォローw
0612名無しさん@Emacs
NGNG「バッチファイル」ってUNIXでいうところのシェルスクリプトのことです。
やって欲しい処理をDOSコマンドで書いておくと、上から順番に実行してくれると。
0613名無しさん@Emacs
NGNGttp://www.geocities.co.jp/SiliconValley-SanJose/7474/ScriptingWithLisp.html
ここに一応cmuclのスクリプティングのやり方があったんですけど、
ちょっとややこしいというか、もうちょっと他の処理系みたいに
簡単にいきたい・・・
0614デフォルトの名無しさん
NGNGたぶん cmucl の使い方を間違えていると思われ。スクリプト実行する
たびに起動するには cmucl はでかすぎる。そーゆう用途なら CLISP で
やったほうがいいと思うよ。
0615デフォルトの名無しさん
NGNG例文を〜〜・・・
立ち上げまではうまくいけたけど、それ以降がわからない・・・。
0616デフォルトの名無しさん
NGNGえっとバッチファイルのほうですか?
それともclispのスクリプトのほう?
clispのスクリプトであれば、上のほうにあるように
------------------------------
#!/usr/bin/clisp
;;↓なんか適当にLispプログラム書いて下さい
(defun ave (args)
(float
(/
(apply #'+ args)
(length args))))
(let ((numlist '(342 123 646 6464 4 423)))
(format t "average = ~A~%" (ave numlist)))
------------------------------
こんな感じで書いて、適当な名前(ここでは"hoge"にしときます)で保存して
実行権限付けて、あとはターミナル上で
% ./hoge
ってやれば
average = 1333.6666
こんな風に結果が得られます。
ってこんな感じでいいんでしょうか?
0617デフォルトの名無しさん
NGNG>[問題] member, assoc を実装せよ。なお、:test キーワードのみサポートすればよい。
Loopを使う人は少なそうなので、あえてLoopを使ってassocを実装してみました。
destructuring機能も使ってみました。loopだからっていじめないでね。
(defun my-assoc (item alist &key (test #'eql))
(loop for entry in alist
for (key . value) = entry
when (funcall test item key)
return entry))
0618デフォルトの名無しさん
NGNGreturn valueだと思って書き始めたのが敗因です。
(defun my-assoc (item alist &key (test #'eql))
(loop for entry in alist
when (funcall test item (first entry))
return entry))
0619デフォルトの名無しさん
NGNG(defun my-member (item list &key (key #'identity) (test #'eql))
(block nil
(mapl #'(lambda (list)
(when (funcall test item (funcall key (car list)))
(return list)))
list)
nil))
(defun my-assoc (item alist &key (test #'eql))
(car (my-member item alist :key #'car :test test)))
(defun my-member (item list &key (key #'identity) (test #'eql))
(block nil
(mapl #'(lambda (list)
(when (funcall test item (funcall key (car list)))
(return list)))
list)
nil))
(defun my-assoc (item alist &key (test #'eql))
(car (my-member item alist :key #'car :test test)))
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNG(declare (inline remove))
(check-type alist list)
(car (remove item alist :test-not test :key #'car)))
0623デフォルトの名無しさん
NGNGするための関数はありますか? どこかで見たような気がするのですが忘れてしまいました。
0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNG用意されていました。教えていただいたのと同じものだと思います。
clispでも使えるようです。
さぁ、これでスクリプティングにclispを使わない理由が無くなってきたな>俺
0626デフォルトの名無しさん
NGNGをを、その方法で出来るのですか。
ちなみにWINDOUWSでできますか?
0627デフォルトの名無しさん
NGNGcygwin上でしか動かないだろうな。
それとさ、UNIX厨は黙れよ。
最初に.exeって書いてあるんだからWindowsの話だろ。
0628デフォルトの名無しさん
NGNG俺のイタコのバアちゃんに聞いたら、LispWorks, Allegro CLなど有料の処理系ではWindowsでexe吐かせることができると思うと
言ってました。
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNGできないよりはいい
0633デフォルトの名無しさん
NGNG> exe って言っても処理系丸ごとラッピングしてるだけじゃないの?
現在のコンピューティング一般の傾向として、「それで何がいけないの?」という意見も
ありえる。exeがデカくなりすぎるという批判かな? 組み込み用途などを除いて、デカさ
は今どき、みんなスルーする話題なのでは?
たぶんExe + Common Lispランタイムdllという構成でだいたい満足できるのではないかな.
配布ファイルのデカさの解決策として、Common Lisp界隈では、tree shakingという技術が
発達しています。つまり、配布用の実行ファイルという木にケリを入れて、いらなそうな機能
という葉をふるい落すというイメージです。実際のところは知らんけど、デバッガ、コンパイラ、
など普通にいらなそうな機能からはじまって、CLOSとかもうまくやれば、理論上はまるごと削れる
よね。
ただそれでも、「やっぱり空のmain()の方が小さいよ」とかいう事を言う人もいるでしょう。
0634デフォルトの名無しさん
NGNGて話がでていたがまさしくその通りだな……。Lisp の動的さを生かすためにはフル
機能をユーザーに解放していて欲しいわけで機能削ってまで実行ファイル単体にまと
めるのもなー。まぁ商用の LispWorks や Corman はできるわけだが。
>>633
処理系丸ごとラッピングとかで配布されると使い回しに問題が。できればソースが欲
しい。Lisp 使ってる人は大抵自分のイメージファイルがあるわけで、プログラムを
取り込んで使いたいって人が多いんじゃないかな。
0635デフォルトの名無しさん
NGNGCommon Lispのインタラクティブな環境としての特性と,
int main(int argc, char *argv[]) を特別扱いするC系コンパイラの特性とは,
まったく反対な気がする.
C系コンパイラは,そもそもが実行ファイル組み立て装置なわけで.
それに対しCommon Lispの(ネイティブ)コンパイルは,最適化のための手段でしかないのでは.
むしろPHPとか鯖サイドJavaとかに近い.
Allegroとかのスタンドアロンアプリ生成機能は,ぶっちゃけLispらしくないと思うけど,
みんなもそう思わない?
アプリに組み込んだらどうなる,とかまた別の話になっちゃうけど.
0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG> 処理系丸ごとラッピングとかで配布されると使い回しに問題が。できればソースが欲しい。
ん? ソースを配布するかは、技術的に難しいとか簡単とかの問題ではなくて、単に配るか
配らないかという問題だよね?
> Lisp 使ってる人は大抵自分のイメージファイルがあるわけで、プログラムを
> 取り込んで使いたいって人が多いんじゃないかな。
それは、Lispを使う上では常識だけど、今は、exeが欲しいという人がいたので
あえて書いたんでしょう、たぶん。
>>635
つまり、Lispは、「OS」というと語弊があるから、「(開発)環境」なんだよね。
そんで、普通のLisp処理系には、Cの開発環境でいうところの C compiler +
C interpreter + Debugger + ...
という機能がつまっていると。 あと、make、profilerなんかもCの開発環境よりも
はるかに、継目が目立たないように統合できると。
> Allegroとかのスタンドアロンアプリ生成機能は,ぶっちゃけLispらしくないと思うけど,
> みんなもそう思わない?
アプリケーションのユーザーにrepループが開放されていないのなら、実質、どんな言語で
書かれていようが気にならないのでは?
>> 637
> 実行ファイル組み立て装置な Lisp 処理系欲すぃ。
どういう意味で言っているのか、いまいち理解できているかわからんけど、
ECL(Embeddable Common-Lisp)を見てみる事を、お薦めします。
0639デフォルトの名無しさん
NGNGだから、LispでWeb browserを書いたら、JavaScriptはサポートしなきゃならないけど、おまけで、
Lispも使えるようにする人が多いでしょう、多分。
これが、Cだと普通、アプリのマクロ言語としてC言語をサポートをするのはまれだよね。
0640デフォルトの名無しさん
NGNG>機能削ってまで実行ファイル単体にまとめるのもなー
exeにするってことは既に用途が決まってるわけで、
いらない機能なら削る事は特に問題ない。
必要になるなら別バージョンのexeを作ればいいし、
なんでもかんでも動的にしとけばいいってものでもない。
それよりアプリケーション側で下手にeval開放するとなると
セキュリティとかの問題が出てくるわけだが。
0641デフォルトの名無しさん
NGNG>これが、Cだと普通、アプリのマクロ言語としてC言語をサポートをするのはまれだよね。
アドインモジュールのABIがCコンパイラに依存してる(まあ当たり前だけど)のは
ある意味Cをサポートしてるのと同じじゃないかな。
0642634
NGNGいやコンパイル済みのやつは互換性を保つのが難しいくらいの意味っす。
普通はプラットフォーム間の移動もムリポだし。CLISP なんかはがんばってるけどね。
>>640
Windows な初心者なら アプリケーションを配布する == EXE を配布 だと思っている
可能性もあるのかと思ってさ。たしかに「要らない機能」が明確なそうかもしれない。
でもユーザーによる拡張を認める場合はフル機能が要るわけだしさー。Windows 界隈
でも「プラグインで拡張可能」とか拡張性は売りになる場合が多いみたいだし。
eval 云々は解放しなければいいだけだと思われ。そーゆう用途ならカスタマイズし
た機能制限インタプリタ or コンパイラを作るのが普通じゃないの?
0643デフォルトの名無しさん
NGNGなにを前提に「普通」と言ってるのかがわからないが。
拡張にもいろいろあるわけだし。
DLLを作成する様なプラグイン形式なら
LISPインターフェースを残す必要すらない。
0644デフォルトの名無しさん
NGNG「(セキュリティを気にしつつ eval が要るような場合は)
制限付きインタプリタやコンパイラを作るのが普通じゃないの?」
というのは >>640 後半の
> それよりアプリケーション側で下手にeval開放するとなると
> セキュリティとかの問題が出てくるわけだが。
への返事っす。
0645デフォルトの名無しさん
NGNGWindowsでアプリケーションを配布する、といえば配布物のみで大体動く必要あり
perl や ruby 用のスクリプトをソース配布するのと変わらん
そりゃ、Windowsでも実行環境ある人はあるけどさーってこと
0646デフォルトの名無しさん
NGNGsetupでついでにインストールしちゃえばエンドユーザーは意識しないっしょ。
0647デフォルトの名無しさん
NGNGWindows の話だと、
- 商用:ACL, LispWorks, Corman は exe 出力可能
- フリー: CLISP なら処理系ごと配布可能
ただし ACL はランタイムライセンスが高価なのでダメポ。
でも Windows 用 CLISP は GDI インターフェースもまだ無いし、
実質 GUI が使えないので受けないだろうね。
0648デフォルトの名無しさん
NGNGこれでCGIを描くこと出来ますか?
0649デフォルトの名無しさん
NGNG優秀な研究者であることに間違いはないと思うよ。
ただ企業家(起業家でもいい)としての能力/適正/本気度は疑問。
っていうより例の会社の状況見ればどんなもんかは想像つくと思うけど。
興味があるなら自分で確認してみるのが一番じゃない?
0650デフォルトの名無しさん
NGNGCGI はエディタの拡張としては方向性が違いすぎます。リクエスト毎に
起動するには xyzzy でも十分軽いとは言えないでしょうし、Web サーバー
からのリクエストを xyzzy に渡すプログラムを書くのも初心者にはハードル
が高いような気がします。
Lisp 慣れしていないならライブラリの充実度からいって
Perl や Python や Ruby を使ったほうが CGI には向いている
のではないでしょうか。それでも Lisp に興味があるならこの手の
用途には GNU CLISP がオススメです。というか Windows だと
実質的にこれしか選択肢がありません。
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNGCLISP 以上に敷居が高そうだけど…。
0653デフォルトの名無しさん
NGNGCLISPよりGaucheのほうが有利な点ってどんなところかな?
日本語処理という点では、WindowsでもCLISPのiconvライブラリへのインターフェイス
が生きているとしたら、ほぼ同じようなもんだよね。
俺のロートルマシンでもCLISPは起動が速いし(一瞬)。
ライブラリ的なものの数とかかな?
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNGPerl互換のCL-PPCREもあるしね(たぶん文字型に作用するという抽象化された書き方だから、
Unicodeもサポートされていると思う。)...
ただキャラクタクラス指定で使う順番がUnicodeだろうから[亜-熙]で漢字一文字ねという
わけにはいかないかもしれんけど。
CLISP、Gaucheの両方とも、S式によって表現したHTMLファイルみたいなライブラリはあるよね。
0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNGCLISP + CL-PPCRE は激しく遅いというのを以前見かけたような…。
PCRE モジュールを使うほうが良いような気もするが、Windows だと
モジュールの作成もマンドクサなのかな?Win ではコンパイラが無いのが
普通だと聞くので Windows 向け標準配布物に PCRE があるかどうかだな。
まぁぶっちゃけ Cygwin が平気なら Gauche のほうが CGI に向いて
そうだが。CLISP で Web 系のプログラム作ってる人って居るの?
0658デフォルトの名無しさん
NGNG> CLISP + CL-PPCRE は激しく遅いというのを以前見かけたような…。
CLISP + 組み込み済みの正規表現ライブラリ VS CLISP + CL-PPCRE
では、あまり動作速度は変わらないとCL-PPCREの作者さんが言っていました。
> Win ではコンパイラが無いのが
> 普通だと聞くので Windows 向け標準配布物に PCRE があるかどうかだな。
え? とりあえず、CLISPの話だと想定します。CLISPのバイトコードコンパイラは
OSを問わずに動きます。現在、CLISPにネイティブコードコンパイラは存在しません。
> Cygwin が平気なら Gauche のほうが CGI に向いて
> そうだが。CLISP で Web 系のプログラム作ってる人って居るの?
具体的に、Gaucheの方が向いている点をあげてみていただけますか?
CLISPでウェブログツールを開発して、配っている日本人の方(か日本語が堪能な人)が
いらっしゃいます。
http://lambda.s55.xrea.com/
0659デフォルトの名無しさん
NGNGるコンパイラってのは C コンパイラで PCRE ってのはCLISP に附属のモジュールの
話。こっちなら速度的には十分のハズなんだがWindows ユーザーにコンパイルしてねっ
て言うのもねぇ。標準で付いてないと辛いよねって話。
> 具体的に、Gaucheの方が向いている点をあげてみていただけますか?
Builtin な正規表現とか標準ライブラリ rfc.uri, text.html-lite, www.cgi とか
0660デフォルトの名無しさん
NGNGレスありがとうございます。
> 実際 CLISP + CL-PPCRE の ppcre:regex-replace-all とか遅いけど。
なるほど。あとは、実用上それがどのくらい問題かですね。
> Builtin な正規表現とか標準ライブラリ rfc.uri, text.html-lite, www.cgi とか
web関連のライブラリが標準で付いているということですか。
clispでも探せばありそうな気もしますが、統一感には欠けますね。
0661デフォルトの名無しさん
NGNGところで、「バッチファイル」でCLISPを動かすには
どうすれば・・・調べたがわからない。
つーか、「コマンドライン」て何なんだろう?
さすがにWIN+CLISP一週間ではきついよ・・・。
かえるか。
0663デフォルトの名無しさん
NGNGうまく行きませんでした。
まずhtmlを生成するプログラムを書き、
(format t "Content-type: text/html; charset=EUC-JP~%~%")
を頭につけてコマンドライン上で実行してみたところ、
きちんと標準出力に結果がはきだされました。
で、いざサーバ上に置いてアクセスすると、何故かサーバエラーが起こってしまいます。
いろいろ原因を調べたところ、どうやら日本語を使うとエラーが出るようです。
Webサーバのエラーログを見たら
"invalid byte #x94 in CHARSET:ASCII conversion"
となっていました(#x94の部分は使った日本語の文字によって違う結果になりました)。
clispのFAQ("ttp://clisp.cons.org/faq.html#enc-err")に同様
の質問があったのですが、スクリプト単体では正常に動いているので
微妙に違うような気がします。
CGIって標準出力にはきだされた文字列をそのままブラウザに渡すだけじゃないんでしょうか?
あきらめて処理系だけgclに切り替えたらうまくいったんですが、
個人的にclispのほうが好きなので未だに解決方法を模索中です…
0664デフォルトの名無しさん
NGNGこのサイトはよろずやの人かな。
Lisp Resource KitとかはKNOPPIX通り越してMovitzベースに移行するとかイケる
ところまで逝っちゃって欲しい。面白そうだし。
それはそうとどなたかCMUCL+SLIMEで開発していてデバッグしているところの過程を
ムービーみたいのでデモしているのとか持ってないですか(ttyrecみたいな感じで)。
上級LISPERの作業過程を見て勉強したいと思っても、周囲にLISPで遊んでいる奴すら
いないから、自分のやり方がいいのか悪いのかも判断できないんですよね・・・
0665デフォルトの名無しさん
NGNGBOM?
0666デフォルトの名無しさん
NGNG> それはそうとどなたかCMUCL+SLIMEで開発していてデバッグしているところの過程を
> ムービーみたいのでデモしているのとか持ってないですか(ttyrecみたいな感じで)。
賛成。上級Lisperじゃなくてもいいから、俺はSLIMEのデモとしても見てみたい。
>>663
> "invalid byte #x94 in CHARSET:ASCII conversion"
> となっていました(#x94の部分は使った日本語の文字によって違う結果になりました)。
これは、CLISPが吐いているエラーメッセージですよね。そんで、出力用のエンコーディング指定
がASCIIなのに、日本語文字を構成する8bit目が立った1バイトを渡されて怒っていると、たぶん、
LANGやLC_ALLなどの環境変数が、スクリプト単体で実行している時と、サーバから起動されている
ときと違うのではないでしょうか。あくまで、これは俺の憶測です。
LANG=ja_JP.eucJPなどという環境設定をしてからWebサーバを立ち上げるか、
CLISPのスクリプト内で、出力ストリームのエンコーディングを明示的に、eucJPにするとかどうで
しょう...
0667デフォルトの名無しさん
NGNG>>666
たぶん、出力時に問題になっているのではなくて、スクリプトファイルを読み込むとき
にスクリプトに含まれる日本語が問題になっていると思う。サーバがLANG=Cやen_US.ASCII
など7bitの文字指定で、シェルがたぶんLANG=en_US.ISO-8859-1など8bitを通す指定なんでしょう。
ウェブサーバをLANG=en_US.ISO-8859-1 apache2などとして起動したほうが良い気がする。
0668デフォルトの名無しさん
NGNG起動時に細かくロケールを指定したいときは、
http://clisp.cons.org/clisp.html#opt-enc
に書いてあるように、-E オプションがいいかもね。
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNGttp://www.komaba.utmc.or.jp/~flatline/wiliki.cgi?WiLiKi&l=jp
0675デフォルトの名無しさん
NGNGまとめるとか言い始めた本スレのヤシは何やってるんだ
0676デフォルトの名無しさん
NGNGま、俺はリンク集でもいいと思うけど。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGttyrec で試しに録画してみました。
emacs -nw だと ALT が効かなくて作業しにくい…
ttp://lambda.s55.xrea.com/files/slime_demo.tar.gz
kterm, xterm あたりなら再生できると思います。
デバッグはネタが考えつかなかったのでとりあえずパス。
- hello-world
- hyperspec-lookup
- 定番のフィボナッチ数列
- time マクロの出力を cl-ppcre を使って加工
です。やっぱ ttyrec だと見た目がイマイチですね。
X 版の Emacs + SLIME だともっとカラフルなんですが。
0680デフォルトの名無しさん
NGNGあと、slime起動時のascii animationみたいなのが面白い。こういう視覚効果を集めたemacsパッケージないかな。
俺はまだ、ilispなんですが、ilispって開発が止まっているみたいですよね。これからはSLIMEかな。
0681デフォルトの名無しさん
NGNGCMUCL-18e@FreeBSD でバグって無限に再帰する fib (非末尾再帰)をコンパイ
ル後実行したら Ctrl-C でも kill -9 でも止まってくれなくて困った。マシ
ンがキリキリ言ってるし他のアプリは激遅になるし。
最後 core 吐いて死んだ。コンパイルしていないものは Ctrl-C で止まった。
何で止まってくれないの?うちだけ?
;; SBCL では CONTROL-STACK-EXHAUSTED で一瞬で止まった。
0682デフォルトの名無しさん
NGNG3A: L0: JMP L0
と末尾再帰が無限ループになるため、実行しても何もおこりません。Ctrl-Cで普通に停止。
(defun f () (f) (print "Never reach here"))は、コンパイル後、実行したら
セグメンテーション違反でcmuclが殺されました。
0683デフォルトの名無しさん
NGNG試してみますのでコードみせてください。
うちでは >>682 の両方とも普通に停止できるみたいです。
環境: FreeBSD 5.2.1 + CMUCL CVS 2003-12-03
0684デフォルトの名無しさん
NGNG(defun f ()
(declare (optimize safety (speed 0)))
(f) (print "Never reach here"))
コンパイルせずに(f)をしたらしばらくしてcmuclが「強制終了」で終了。
コンパイルして(f)をしたらしばらくしてcmuclが「セグメンテーション違反です」で終了。
スタックを見張るスイッチか何かがありそうな気がする。
sbclは両方とも、以下のメッセージでデバッガに入った。宣言は関係なし。
debugger invoked on a SB-KERNEL::CONTROL-STACK-EXHAUSTED in thread 1986:
0685681
NGNG(defun fib (x)
(if (<= x 1) 1
;;(+ (fib (- x 1)) (fib (- x 2)))))
(+ (fib (+ x 1)) (fib (+ x 2)))))
そのマシンは家にあるもので今手元にないため再現するか確かめて
はいないのですが、上のようなコードだったように記憶しています。
>>682 さんの 2つ目のコードで大丈夫なら上のコードも多分問題は
ないように思うのですが。ということはうちの環境に問題ありそう
ですね。
環境について補足。
FreeBSD-4.9 STABLE + (portsの) CMUCL-18e
それと (defun f () (f)) のような末尾再帰版はうちでも Ctrl-C
で普通に止まりました。
;; うちのプロバイダはアクセス規制になっていたので結果の報告
;; など遅くなるかもしれません。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNGcoredump 中は ^C や kill が効かないけど、それじゃない?
FreeBSD 4.x のデフォルトでは resource limit の datasize がかなり大きい
ので、オンメモリで動かせる程度に制限してやればいいかと。
0688デフォルトの名無しさん
NGNG0689681
NGNGビンゴでした。
% limit coredumpsize 0
等して core のサイズを適当に制限すればよいようです。マシンが重くなるの
は 1G(!) の core を dump 中だったからのようです。
皆様ありがとうございました。
% ll lisp.core
-rw------- 1 name name 1329483776 Mar 11 19:55 lisp.core
% ll -h lisp.core
-rw------- 1 name name 1G Mar 11 19:55 lisp.core
0690デフォルトの名無しさん
NGNG19a には x86/sparc くらい限定ですが Stack overflow checking や Heap Overflow checking
が入ります。SBCL にはそーゆうのが既に入ってるのかな。
- (defun f () (f))
- (defun f2 () (f) (print "..."))
- バグ入り fib 無限ループ
を止める(stack check で止まる)シーンを slime_demo.tar.gz に追加しました。
独自ビルドの CVS 版なんで *features* も表示してます。以下 release-19a.txt の
Feature enhancements から抜粋。
- Stack overflow checking added for FreeBSD/x86, Linux/x86 and
Solaris. Code that makes the control stack overflow (for
example due to unbounded recursion) will lead to a
STORAGE-ERROR being signaled, instead of making CMUCL crash.
...
- Heap overflow checking for x86 and solaris with gencgc. When
the heap is close to overflowing, a heap-overflow condition is
signaled. If an overflow happens again while debugging the
condition, the user is returned to top-level without warning.
Use lisp::*reserved-heap-pages* to set the number of pages to
reserve.
0691デフォルトの名無しさん
NGNG関数呼び出しが遅くなるだけのような気がします。
0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGschemeだからできないってわけじゃないんだが
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNG呼び出すときに引数を名前で指定できてウマーじゃん。
順序だけより人間に優しいじゃん。性能的にマイナスなのは
そうだけど。その場合も「つかわない」という選択肢も関数
作成者には与えられているので無問題では。
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGVCちっくなものが欲しい・・・
0699デフォルトの名無しさん
NGNG【形】 視覚{しかく}の、視力{しりょく}の、目に見える
slimeだな。
0700デフォルトの名無しさん
NGNG>>691
foo(
0, /* object id */
NULL, /* docstring */
10, /* value */
this /* subject */
);
というようにCでは引数が多くなって分かりづらくなると、個々の引数が何を表すのかコメントを
つける事がよくあるけど、各引数に付けるコメントを、言語処理系からただ無視されるだけの
存在から、言語の構成要素にまで昇格させたのがキーワードパラメータです。
(foo :object-id 0 :docstring nil :value 10 :subject this)
0701デフォルトの名無しさん
NGNGR5RS だと :keyword も シンボルなんで不定長の引数をとるようにして自前で
処理。
0703デフォルトの名無しさん
NGNG括弧って最後にまとめて閉じるのが普通なの?
C とかでは先に対応する {} を書いちゃってから
中身を書いていってたんだけど。
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNG, - 、, - 、
, - 、i'・e・ ヽ,,・ァ, - 、
4 ・ ゝ - 、i'e・ ヽ、・ァ
ゝ i e・ ヽ、 ,,.-''´|
|`"''-,,_i ,,.-''´ |
| "'''i" ,,.-'"
`"''-,,_. | ,,.-''"
"'''--'''"
0706デフォルトの名無しさん
NGNGおまえ、uzuraか?
捨て子はよくないぞ
0707デフォルトの名無しさん
NGNGCLikiでXMLを検索するといくつかライブラリが見付かるのですが、Lisp&XMLの初心者でも
手っ取り早く扱えるのってどれですか? XML文書は普通どんな感じで処理されるのかとかいまいち
理解できてないのですが、やりたいことはOAI-PMHのクライアントを作ることです。
レスポンスが全部XMLで返ってくるのでこいつの扱い方を修得しなきゃいけないなぁ、と思って
全然真剣に取り組んでなかったXMLについて入門レベルから勉強しているところ。
0708デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNGあるXML elementを認識するたびに、プログラマが登録しておいたコールバック関数を
呼び出して逐次的に処理するというもの。次は、W3CのDOMみたいに、一度、
プログラム言語がサポートしているデータ型のデータ構造としてXML文書をメモリ内に
作ってしまうもの。他にもう1つくらいあったけど忘れた。
XMLとS式との親和性の良さから、DOMみたいに、一度、メモリ内にXML文書の
データ構造を作ると、いろいろ、変形とか処理を加えるのは楽そう。
ただし、XML文書の大きさが百メガとかだと、苦しいこともあるかも。
すでにあるCommon Lisp用XMLライブラリの紹介できるひとプリーズ。
0712デフォルトの名無しさん
NGNG紅茶。
0713デフォルトの名無しさん
NGNG>>667
>>668
レス遅れましたが、無事解決しました!
本当にありがとうございました。
原因はやはりサーバ側のロケールにあったようで、
色々調べたあげく、cgiを置いてあるディレクトリの
.htaccessファイルにLANG=ja_JP.eucJPと指定して試したところ
うまくいきました。
-Eオプションも試してみたのですが、*default-file-encoding*が
EUC-JPになっているのにも関わらず、なぜか以前と同じエラーが出てしまいました。
0714デフォルトの名無しさん
NGNG> .htaccessファイルにLANG=ja_JP.eucJPと指定して試したところ
> うまくいきました。
その手があったか、めでたし、めでたし。
>>711
以下の文書では、5種類くらいあると言っています。
What's Wrong with XML APIs
http://www.artima.com/intv/xmlapis.html
Common LispでXMLライブラリを書く/選ぶときは、参考になるかも。
0715デフォルトの名無しさん
NGNG>This page, and the pages linked to by it, contains the work-in-progress
> of Practical Common Lisp which will be published by Apress some time
> this year (2004).
http://www.gigamonkeys.com/book/
最近、Lisp関連の本がまた出版されるようになったと思う。
たしか、Successful Lispも出版されると聞いたし、
Paul GrahamのLispワショーイエッセイ集も発売されるとか。
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG時代がLispに追いついた
717 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 16:41
Paul Grahamさんからエッセイ集の推薦文をたのまれたと、
Rubyのまつもとさんの日記にあったな。
0718デフォルトの名無しさん
NGNG>>715 ぜんぶオンラインで読めてしまうところが、時代を感じるな。
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNG>(cons 'a '(b c))
(a b c)
>(cons 'a (cons 'b (cons 'c nil)))
(a b c)
もう一つは何ですか?
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG頭いいね
0728デフォルトの名無しさん
NGNGmake-alienしたオブジェクトは、GCで回収されるのでしょうか?
明示的にfree-alienする必要がありますか?
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG付属のモジュール(sb-bsd-sockets/malloc.lisp)を見るとfinalizationでfree-alienするmallocという関数が定義してありました。
やはり手動でfreeしないといけないみたいですね。
で、このmalloc関数を使うとGCと同時に解放されるということみたいです。
(in-package :sb-bsd-sockets-internal)なんてケチなこと言わなくていいのに。ぶつぶつ。
0731デフォルトの名無しさん
NGNGXYZZYみたいにエディタ上からコンパイルしたいのですが。
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNGC-x RETlisp-macroexpand-sexp
C-x C-elisp-eval-last-sexp
C-c C-vlisp-show-variable-documentation
C-c C-flisp-show-function-documentation
C-c C-dlisp-describe-sym
C-c C-alisp-show-arglist
C-c C-klisp-compile-file
C-c C-llisp-load-file
C-c C-clisp-compile-defun
C-c C-rlisp-eval-region
C-c C-elisp-eval-defun
C-c C-zswitch-to-lisp
0734デフォルトの名無しさん
NGNG前者が関数、後者がマクロで、前者は実行時のみ、後者はコンパイル時にも効果を持つということみたいですが
(eval-when (:execute :compile-toplevel :load-toplevel)
(proclaim '(special *x*)))
が (declaim (special *x*)) と同等と考えていいんでしょうか。
コンパイラにとっては実行時のproclaimは意味なしに思えるのですが合ってますか?
0735デフォルトの名無しさん
NGNG>>732
SLIMEを調べてみました。使いやすそうな雰囲気ですが
これってLINUXとかしか使えんのでわ?
0736デフォルトの名無しさん
NGNGほらよ
http://home.comcast.net/~bc19191/blog/040315.html
0737デフォルトの名無しさん
NGNG>コンパイラにとっては実行時のproclaimは意味なしに思えるのですが合ってますか?
たぶん合っていると思います。
compile-fileやcompileの処理対象であるコードの中に出てくるproclaimの効力は、
その場では発揮されません。コンパイルされたコードがloadやevalされたときに効果を発揮します。
0738デフォルトの名無しさん
NGNGttp://www.bluetail.com/~luke/misc/lisp/slime.pdf
0739デフォルトの名無しさん
NGNGおい、スレ間違ってるぞい。
0740739
NGNG0741738
NGNGと思って久しぶりに見てみたら貼られてますな。3回。
0742デフォルトの名無しさん
NGNGXLISPでlistの中のatomの数を数えたいんです。
下のようにlistの中のatomだけを抜き出してリストにすることはできました。
(DEFUN F1(L)
(COND((NULL L) NIL)
((LISTP(CAR L))(F1(CDR L)))
(T (CONS (CAR L)(F1(CDR L))))
)
)
このコードを実行すると次のようになります。
(F1 '((A B) C D (E F) G))
(C D G)
後はこれをlengthで数えるだけだと思うのですがそのやり方が分かりません。
それとももしかしてSETQで変数を設定して
Tのところで値を1つずつ足していって数えるのでしょうか?
お分かりの方、どうか教えて下さい。
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGああやって数を数えるんですね。
お答えを基にして修正してみました。
(defun f1(l)
(cond((null l) nil)
((atom(car l))(+ 1 (length(cdr l))))
(t (f1(cdr l)))
)
)
そして実行…
> (f1 '((a b) c d (e f) g))
4
CとDとGの三つなので"3"が返ってくると思ったのですが
なぜ4なのでしょう? うーむ…。
0745デフォルトの名無しさん
NGNG>>744は、「最初のatomが出たら残りのリストの長さを返せ」になってしまっているから、こうなる:
(f1 '(a (b 1))) => 1
(f1 '(a (b 1) (c 2))) => 2
(f1 '(a (b 1) (c 2) (d 3))) => 3
>>742のf1を使ってatomの数を数えるのは二通り考えられる。
a. f1の戻り値のリストの長さを数えるf2を作る。
b. f1にそれまで出てきたatomの数を表す引数を増やす。f1を最初に呼ぶときには0を入れることになる(そういうf2を作る)。
0746742
NGNGありがとうございます。いろいろ考えた末
(defun f1(l)
(setq ct 0)
(cond((null l) nil)
((atom(car l))(+ 1 (length(cdr l))))
(t (f1(cdr l)))))
…とかやろうと思ったのですが、これ以上浮かびませんでした。
それと今回はf1だけで処理しないといけないのです。
Common LISPの本をめくってみるとこういうのがありました:
> (defun f1(ls)
(cond ((null ls) 0)
((atom ls) 1)
(t (+ (f1 (car ls))
(f1 (cdr ls))))))
f1
これだと低いレベルのリストの中のatomまで全部数えてしまいます。よって
> (f1 '((a b) c d (e f) g))
7
となります。低レベルのリストを無視するにはどうすればよいのでしょうか?
(質問しながら僕もやってみます。)
0747デフォルトの名無しさん
NGNG(length (delq nil (mapcar #'atom l))))
(hoge '(a b (c d) e))
=> 3
0748デフォルトの名無しさん
NGNG(cond((null l) 0)
((atom(car l))(+ 1 (f1 (cdr l))))
(t (f1(cdr l)))))
0749742
NGNG> (defun f1(ls)
(cond ((null ls) 0)
((atom ls) 1)
((listp (car ls))(f1 (cdr ls)))
(t (+ (f1 (car ls)) (f1 (cdr ls))))))
F1
> (f1 '((a b) c d (e f) g))
3
> (f1 '((a b) c d (e f) g (h i)))
3
> (f1 '((a b) c d (e f) g (h i) j k))
5
> (f1 '((a b)))
0
> (f1 '(a b))
2
> (f1 '(a))
1
> (f1 '())
0
僕ももっと賢くなりたいです…
ご協力ありがとうございました!!!
0750デフォルトの名無しさん
NGNGdelqって二つ以上を消してくれるの?
0751742
NGNG>>747
すみません、XLISPを使っているもんですからdelqが使えませんでした。
> (defun hoge (l)
(length (delq nil (mapcar #'atom l))))
HOGE
> (hoge '((a b) c d (e f) g))
error: unbound function - DELQ
>>748
僕のヴァージョンよりも短くてかつ同じ動作をしますね。
そちらの方がより正統派っぽいです。
そちらを採用させてください。m(__)m
0752デフォルトの名無しさん
NGNG今さらかもしれませんが・・・
(defun f5 (l)
(reduce #'(lambda (x y) (if (atom y) (incf x) x)) l :initial-value 0))
0753742
NGNG> (defun f5 (l)
(reduce #'(lambda (x y) (if (atom y) (incf x) x)) l :initial-value 0))
F5
> (f5 '((a b) c d (e f) g))
error: unbound function - INCF
>
今回はXLISPと指定されているんです。
ここはCommon LISPスレだと知っていたのですが
他にLISPのスレが見つからなかったので質問しました。
ありがとうございました。
>>715
Paul Grahamって誰だろ?と思っていたら先週借りてきた本の著者でした。
ANSI Common Lisp (1996)
そんな有名な人の本だったのか。まだ読んでませんが。
0754デフォルトの名無しさん
NGNGPAIPのExercise 1.4[m]で小一時間悩んだ挙句に解答を覗き見しても納得がいかないので
どなたかに解説をお願いしたいのですが、お題にあるように`expression'と表現されたら
consは含まないのが定説ですか?
(count-anywhere '(a) '(a ((a) b) a))
とかするとcdr再帰のケツの方で余計なカウントアップが入るので正しい結果が得られないの
ですが。
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG入門に向いてるんじゃないかな。
0759754
NGNGtimes an expression occurs anywhere within another expression.
Example: (count-anywhere 'a '(a ((a) b) a)) => 3
Answer 1.4
(defun count-anywhere (item tree)
"Count the times item appears anywhere within tree."
(cond ((eql item tree) 1)
((atom tree) 0)
(t (+ (count-anywhere item (first tree))
(count-anywhere item (rest tree))))))
typoしてないといいんですが。itemにリストが渡されたとき正しい結果にならないのではと
考え中。まだ自分で納得行く解答を導き出せてませんです。ハイ。
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG>consは含まないのが定説ですか?
結論から言うと定説なんてない。
真実は書いた著者にしかわからないだろ。
0762754
NGNGレスどうもです。
それではこの問題はすっ飛ばして(consを考慮しないなら話は簡単)先を急ぐとします。
Chapter 2を読み終わったところなんですが、すごく楽しいです。この本。
0763デフォルトの名無しさん
NGNGShift+8/9で入力するのだるくない?
キーバインド変えたりしてる?
0764デフォルトの名無しさん
NGNGシフト無しで入力できる[]とかと最初からキー配置の設定が入れ替わって
いれば、少しは、楽だったかも。でもそうすると、小指を使うからそれほど楽じゃないか…
0765デフォルトの名無しさん
NGNG思ったり思わなかったり。まぁ Lisp とは括弧の量が違うけど。
0766デフォルトの名無しさん
NGNG@ -> (
[ -> )
1ヶ月で戻したが。
0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNG時々ミスするんだよなぁ(w
なんか変な記号がタイプされてて鬱になる瞬間
0769デフォルトの名無しさん
NGNG0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNGFTPが応答不能になっている。
・・・・・・・何故に(泣)
lispでHPが作ってみたいのにぃ・・・
0772デフォルトの名無しさん
NGNGcgiをLISPで書くってこと?
LISPが使えるサーバーを自分で立てたの?
0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNGでも落とせないです。なんでなんだろう。
0775デフォルトの名無しさん
NGNG>>770にCL-HTTPと書いてあるのを気付いていない罠
0776デフォルトの名無しさん
NGNGでは許可を取ればいいわけだ。
どうやってよ・・・・・・・・?
0777デフォルトの名無しさん
NGNGまず徳を積むことだ。
というわけで恵まれない俺に5万円寄付してくれ。
0778デフォルトの名無しさん
NGNG0779デフォルトの名無しさん
NGNGlispでHPが作ってみたいのにぃ・・・
と書いてあるのを気付いていない罠
0780デフォルトの名無しさん
NGNGxyzzyをつかっていたのですが、Linux上で使いたいと思ったのですが、
KNOPPIXってLISP処理系もってますか?
0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNGCLISPとかを指したつもりでした。
0783デフォルトの名無しさん
NGNGコンパイルして、あやしげなところの手前でブレークポイントで止めて、値を見つつステップ実行させて……というのと何だか違いそうなので、
普通Lisperはどのようにしているものなのか知りたいのです。
0784デフォルトの名無しさん
NGNGKNOPPIXにcmucl, acl, lispworksと入門書(英語)を入れたLisp Resource Kitはどう?
http://www.common-lisp.net/project/lisp-res-kit/
>>783
> あやしげなところの手前でブレークポイントで止めて、値を見つつステップ実行させて
compile, break, step, eval, inspectあたりを使えば、それに近いことができます。
0785デフォルトの名無しさん
NGNG私は完全にボトムアップですね。
一気に書き下してからデバッガでちまちまやるなんてことは無いです。
S式を一つ書いては実行して、一つ書いては実行して、塊に出来そうなら名前をつけて固めて、の繰り返し。
その作業の間はインデントめちゃくちゃ。
一通り出来上がったらインデントをズバッとキメて完成。
0786デフォルトの名無しさん
NGNGおれもボトムアップだな。関数を書いて関数単位でコンパイルして(Emacsのキー
バインドで)、テストコードを(関数のコメント部分に)書いて、その S 式にカー
ソルをあわせて評価(これも Emacs のキーバインドで)。で、エラーがあれば
デバッガが起動するのでスタックやローカル変数を見て関数を修正、そしてま
た関数をコンパイル... の繰り返し。リスナはあんまり使わずに、ソースコー
ド上でほぼ作業してる。
で、ほとんど完成したあとでバグがみつかった場合に trace や step をたま
に使ったりもする。
あとは、十分テストした後に、プロファイラの結果を見ながら必要に応じて
declare やら the などを埋めこんでく。
あ、作業中もインデントは常にちゃんとしてる、インデントしてないとコード
読めない人なので。
0787デフォルトの名無しさん
NGNG例が出てたよ。
自分はまだblockあたりでうろうろしてるから読んでもわからない…
0788783
NGNGみなさんありがとうございます。
ボトムアップでちょっとずつ確かめながら書く人が多いようですね。
>>784
> compile, break, step, eval, inspectあたりを使えば、それに近いことができます。
stepやbreakは使ってみたのですが、修行が足りてなくてまだうまく使えません。
SBCLだとstepできないし……。CLISPはバイトコードなインタプリタだからか、stepなどは使いやすかったです。
ブレークポイントはデバッガでかけるよりもソースに(break)を埋め込んで評価し直させるという感じなのでしょうか。
>>786
リスナって何ですか?
ぐぐってみてもよくわからなかったのですが別のポートに開けておく作業用REPLコンソールみたいなものかと思ったのですが。
>>787
ありがとうございます。近くの本屋にあるかな……探してみてみます。
0789デフォルトの名無しさん
NGNGlistenerと綴って、いわゆるREPループのことです。
0790デフォルトの名無しさん
NGNG面白そうですね。早速DLしてみます。(ISDNなんで2日がかり)
アレグロが入っているようなんですが、これって新日鉄のなんでしょうか?
0791デフォルトの名無しさん
NGNGFranz Inc.のもんでしょ。で実際にACL入ってるよ>Lisp Resource Kit.
漏れはいろんなドキュメントがまとめられてるのが嬉しかったな。
0792デフォルトの名無しさん
NGNGWINDOWS XPじゃ動かないじゃん・・・
0793デフォルトの名無しさん
NGNG>日本では新日鉄のバカタレがぼってるけど
ぼられてたのか…
いや、地元だし、高炉の制御に人工知能とか使ってるらしいので、
なんとなく安心感のようなものが…(社員じゃありませんよ)
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGうーん、それだけではよくわかりませんが、CLISP 2.33 使ってます?
UTF-8 が〜ってエラーの場合は
lisp.exe -E ISO-8859-1 -M lispinit.mem
みたいに起動時にエンコーディング指定すればなんとかならないでしょうか。
0796デフォルトの名無しさん
NGNG私は step はほとんど使いませんね。trace やバックトレース時にフレームに残った
情報を参考にデバッグします。私もそうでしたが、C/C++, Java 等から Lisp に入る
人はまず lispy な開発プロセスに慣れるとよいと思います。
一関数はなるべく短く(できれば一画面以内)、長い場合は flet や labels で内部的に
分割して考えるのでデバッグも楽です。とりあえず動かしてからデバッグ、ではなく動く部品
(関数)を組み合わせてプログラムしてゆく感じです。ほとんどの作成単位は小さく、Lisp の
単純な計算モデルの効果もあってステップ実行する必要は(今は)感じません。
;; 昔は step の使えなさに愕然として、 Lisp のデバッガなんて駄目じゃん!と思ってました。
0797デフォルトの名無しさん
NGNGおれも関数短い。で必然的に関数が多くなってしまって、関数の名前を考
える時間が長い。うまい関数名が思いつかないような関数は、大抵、おか
しな部分があって、再考する必要があるという法則(?)を発見しました。
0798デフォルトの名無しさん
NGNGところで、誰かLISPマシンの事話せるスレとか知らない?
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNGstep的な機能(emacsのedebug)は、俺の場合、他人が書いたコードを手っ取り早く理解するときに
便利に使っています。まさに、処理の「動き」が目に見えるので、理解が速いです。
0801デフォルトの名無しさん
NGNG今でもLISPマシンってあるの?
なんかミニコン時代の物のような印象なのだけれど。
>>800
メモリ空間が広いとかバスがどうとか。
青山学院大で作ってたらしい。
今のPCでLISPつかってて実行に支障が出たことってある?
0802デフォルトの名無しさん
NGNGとりあえずTAOのマニュアルでも
http://www.nue.org/nue/nue.html#tao-manual
0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNGどなたかEmacsのlisp-indent-function (or common-lisp-indent-function)の
解説をしていただけませんか。CMUCL+SLIMEでコード書いてますが、でっちあげたマクロの
インデントを調整したいのです。
0805デフォルトの名無しさん
NGNG'設定)
info の (emacs)Lisp Indent を参照。
0806デフォルトの名無しさん
NGNG> 今でもLISPマシンってあるの?
> なんかミニコン時代の物のような印象なのだけれど。
現在、開発が進行している売り物としてのマシンは俺の知る限りないと
思います。昔のマシンを販売している人(会社?)はあるみたいです。
> メモリ空間が広いとかバスがどうとか。
> 青山学院大で作ってたらしい。
> 今のPCでLISPつかってて実行に支障が出たことってある?
ハード的なすごさもあるのだろうけど、ソフトウェア開発環境としてのすごさが
知りたいです。Lisp OSの凄さかな。ハードの話で言えば、ちょっと前、昔のLispマシンと
Pentium PCマシンでベンチマークをしたら、Pentiumマシンが勝ったけど(クロックが10^n倍違うはず)、
思った程Lispマシンは遅くなかった(専用ハード恐るべし)という事を話している人が
いました。
スレ違いぎみでごめん。
0807デフォルトの名無しさん
NGNGhttp://www.cutt.co.jp/book/4-87783-102-9.html
Lispとありますが、Common Lispの事だそうです。
本スレでも話題になったようですが、感想をどなたか読んだ方、お聞かせ願えませんか?
初心者にすすめて問題ないでしょうか? あと、Paul GrahamのANSI Common Lispとの比較とか。
良い本なら売れればいいな…
0808デフォルトの名無しさん
NGNG素のPentiumはメモリとのやりとりは33MHzかな?
それをCPUでは5倍にしてると166MHzになる。
仮にLispマシンがバス幅を倍にして、10MHzくらいの回路を組んでるとしたら
一見すると16倍の性能差がついてるんだけど、
33:20=1.6倍にしかならないから、あんまり遅くみえないみたいな。
0809デフォルトの名無しさん
NGNGとりあえずその本の感想。
まず最初に、私は
・Lispに関しては完全にド素人、Lisp=括弧言語という程度の認識
・Prologはいちおーガッコで勉強させられたけど馴染まなかった
・C/C++はメインで使っていて読み書きできる
という人です。
LispというとなまじCのような手続き型言語を知っているとどうも馴染みにくい
という感じだったのですが、そんな私でも一応「Lispとはなんぞや」というのが
分かったような気がします。
Lispとはどういう仕組みで動いているのか、ということが割と丁寧に書いてあるので
「ほー、Lispってこんななんだ」という納得はしました。
ただ、もっともそれでじゃあLispでなんかプログラム書いてみれ、といわれても
さすがにそこまでは…あくまで「Lispとはなんぞや」という程度で
具体的にプログラムが書けるようになるというところまでは難しそうですね。
有名なマクロなる機能に関する説明もまったくありませんし。
まあ、とりあえずLispとはなんぞやという第一歩を踏み出すには悪くない本だと思います。
ただし、あくまでそこまでですね。実際にLisp使って何かやるとなると、
もう一段上の「入門書」が欲しいところかなと思いました。
0810デフォルトの名無しさん
NGNG立ち読みしかしてないけど
400ページ以上も読んで何も作れないってのは
結構悲しいな。
もっと薄くてよい本があると思った。
俺も対話による〜しか読破してない初心者だけど。
現在グレアムの本を読書中。
0811804
NGNGそこを参照してもわけわからん状態なので助けて欲しいわけで。
plistのlisp-indent-functionにシンボル設定すると引数5個で呼び出されるので
付属のドキュメントは信用してないです。ほんで暇を見ては.elをedebugで追いかけて
いるんですが・・・くじけるな。これは。
0812デフォルトの名無しさん
NGNGとりあえず、(get '適当な関数かマクロ名 'lisp-indent-function)
とかやって設定引っ張ってくればいいんじゃないかと。
0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG>サンマルコ・リスプ探検隊
これ?
http://www.personal-media.co.jp/book/other/jinkoutinou.html
http://www.google.co.jp/search?hl=ja&q=%22San+Marco+LISP+Explorer%22
http://www.google.co.jp/search?q=%22san+marco+associates%22
0815デフォルトの名無しさん
NGNGlisp-indent-functionは、lisp-mode.elで定義されていて、"(emacs)Lisp Indent"に
説明があると。common-lisp-indent-functionはcl-indent.elで定義されていて、説明はないと。
泥臭いけど、自作マクロと似たようなインデントになる標準マクロを探して、
設定を盗んでくるとか。あんまり力になれないな。
0816804
NGNGレスありがとん。
何だかイバラの道を進もうとしているような予感がしますが動くコードが手元にあるんで
やれるだけ頑張ってみますわ。折角気分がノッてきたときに妙なインデントされてテンポ
乱されるのもういやなんで。
板違いだけどMacOSXのターミナルも気分がノッてくると妙な「もっさり感」が気になって
げんなりするんだよなぁ・・・。デスクトップは非常に綺麗なんで好きなんだけど。
0817デフォルトの名無しさん
NGNGTerminalスレ@マク板あたりで聞くといいんじゃないかな?
iTermとか使う手も有りかもしれないし。
がんがってくらはい
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNG>何だかイバラの道を進もうとしているような予感がしますが動くコードが手元にあるんで
>やれるだけ頑張ってみますわ。
がんばってください。common-lisp-indent-functionの設定法の情報がまとまって、
気が向いたら、どっかで公開してくれればうれしいです。
短ければこことか、長ければ、wiki<http://www.komaba.utmc.or.jp/~flatline/wiliki.cgi>とか。
0820デフォルトの名無しさん
NGNGCocoaじゃなくてCarbon対応ってことでOSX対応版は出ている。
お値段は相変わらず(w
0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG学校でLISPの本を探していてそんな記述を見つけたのですが。
なんでもLISPの使い方を教えてくれるCAIソフトらしいのですが。
卒研でアソシアトロンをやることに。Cで書かされそうなんですが、
LISPでも書けますかね?教官を説得できる材料がない…
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG普通は理論が主でプログラミングは検証手段なんだから、
用があるのは出てきた結果(計算結果であれ、ソフトウェア自体の機能などであれ)だろ。
0826デフォルトの名無しさん
NGNGの再帰verをやってみたんですがこんな感じでよいでしょうか?
(defun numA (lst &optional (rtn 0))
(if (null lst) rtn
(progn
(if (eql 'a (car lst)) (incf rtn))
(numA (cdr lst) rtn))))
opitin 引数部分は、補助関数にしたほうがいいのかな?
0827デフォルトの名無しさん
NGNG(numA (cdr lst) (if (eq 'a (car lst)) (+ rtn 1) rtn))
0828826
NGNG確かに、引数代入時に分岐させれば
必要ありませんね!
eq は、アドレスを比較して一致を調べる
ものと認識しているのですが
こういう場合にも使えるのでしょうか?
関数の中で直書きされた a のアドレス??
0829デフォルトの名無しさん
NGNG>ものと認識しているのですが
たぶんその認識で問題ないと思います。
>関数の中で直書きされた a のアドレス??
最終的にCPUが認識するのは、そうだけど(シンボルaの実体のアドレス)、
私の場合、コードを理解するときは、Lispの世界内だけで考え、
read後の状態、その次にそれをevalした後の状態という順番で考えます。
つまり、脳内インタプリタを作ってあるんですね。
(eq 'a (car lst))において、aのアドレスは、この式のread時に、
aがすでにinternされて(存在して)いれば、そのアドレスを持って来て、
未internならシンボルaが生成されて、それが使われます。
的外れな説明じゃないと、いいけど…
0830デフォルトの名無しさん
NGNGLispのプログラムがインタプリタに読み込まれるときは、
まず最初にリテラルのリストに変換される。これをやっている関数は read
次にそのリストを関数やマクロ呼び出しのフォームとして評価する。
これをやってる関数は eval
そして呼び出された関数の返す値を印字する。これは print
このサイクルを REPL (read-eval-print-loop)という。
関数の中に直書きされた a のアドレスというよりは
'(eql 'a (car lst))
というリストの二番目の要素であるシンボルオブジェクトの
アドレスというほうが正しい。
0831デフォルトの名無しさん
NGNGという表記はかなり変だったけど堪忍して下さい。
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGlispをなめるな。
#'lambda-classでできるわ!!
0835デフォルトの名無しさん
NGNG回答どうもありがとうございます。
なんかN88で書くことになりました…。
あと、LISPのフロッピーを探したらLISP/80しかありませんでした。
どうやら私はこのスレに居てはいけないようです…
0836デフォルトの名無しさん
NGNG無名クラスという概念はCommon LispのオブジェクトシステムであるCLOSに存在します。
ただ、無名関数のやりとりだけでだいたい用が足りてしまう気もします。
>>835 N88って98に付いてるBASICかな? 98用ならxlispというものがあったような。
0837デフォルトの名無しさん
NGNGCLHSのglossaryとclass-nameに記述が少しあるだけで分からん。
0838デフォルトの名無しさん
NGNGmake-instance
0839デフォルトの名無しさん
NGNGそんなものあったのか・・・。
どうやって作るの?
0840デフォルトの名無しさん
NGNGインスタンス向けに eql でメソッドを定義すりゃいいじゃん。
0841デフォルトの名無しさん
NGNG>>840はlambdaの便利さから類推する頭を持っていないのだろうか。
それともlambdaの便利さを理解していないのだろうか。
let+lambda*複数でもいいんだけど、ちょっとプリミティブすぎて。
意味的まとまりを与えられる無名クラスはけっこういい。
0843not 841
NGNGCommon Lispの無名クラスは積極的に使うものではなくて、どちらかというと
そういう物ができてしまうこともあるという話だったような。defclassでは
定義できないし、make-instanceでのクラス定義の方法は処理系依存の部分があり
そうだし。
一度、Common LispだとJavaの無名クラスの機能をどうやって書くかなと考えた
ことがあるんだけど、結果は「同じようなことはCommon Lispなりの書き方で
綺麗にかける」だったと思ったけど、その過程の理屈をすっかり忘れちまったよ。
だれか、Javaの無名クラスを使ったコード片をここに書いてみてくれない?
>>841
> let+lambda*複数でもいいんだけど、ちょっとプリミティブすぎて。
> 意味的まとまりを与えられる無名クラスはけっこういい。
この書き方だと、たしかに抽象度が低いかも。
いわゆる「lambdaでオブジェクト指向の機能」を実装する話ね。
0844デフォルトの名無しさん
NGNGhttp://www.developer.com/java/other/article.php/3300881
を読んでみた感じでは、
* instanceのmemberに対して設けられたアクセス規制をすりぬけるために使う。
例えば、あんまり関係の無いクラスAとBがあって、外部からのアクセスが規制
されているBのmemberを参照するようなAのメソッドを書きたい場合などに、Bの
定義内にAを継承する無名クラスを定義し、メソッドをその場でoverrideするとか。
CLOSでは、アクセス規制が非常にゆるいのと、slot-valueで全てのslotを
読み書きできてしまうので、あまり問題にならない。
* 特定のinstanceに固有の振舞いをするメソッドを定義したいときに使用。
>>840さんの言うように、Common Lispでは、eql specializerを使ったメソッドを
定義することで対応できる。
(method-for-foo (let ((instance (make-instance 'foo :slot1 slot1-form)))
(defmethod bar ((foo (eql instance)))
(something-specific-to-instance foo))
instance))
let以下をdefinstanceなんてマクロにするとか。
0845デフォルトの名無しさん
NGNGそれ欲しいでつ。
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG(setq obj(make-instance 'CA))
(defclass CB(obj)())
こんなふうにインスタンスから型を取り出して継承とかってできますか?
0848デフォルトの名無しさん
NGNGmod_webapp使ってるけど妙なエラーが出て安定稼動できない・・・
プラットホームはDebian sidです。PortableAserve+WebActions使った方がいいのかな。
0849デフォルトの名無しさん
NGNG全然関係ないところですまんけど、
IMHO って in my humble opinion の abbrev 以外に、何かの固有名詞なの?
0850848
NGNGよろずやさんトコの開発途中のLisp Learning Centerのコード貰ってきて遊んでいるだけど
mod_webappがエラー吐いたり吐かなかったりで挙動不審なのでどうにかならんかなぁ・・・と。
PortableAserve+WebActionsの方が安定して稼働してるんだけど、規模が大きくなるにつれて
面倒になってきた。CLOSのオブジェクトどかどか並べてHTMLをレンダリングさせる方が個人的には
扱いが楽かなと思う。
0851デフォルトの名無しさん
NGNG(defmacro defclass-from-objects (name direct-superobjects direct-slots
&rest options)
`(eval (list* 'defclass ',name
(mapcar #'class-of ',direct-superobjects)
',direct-slots
',options)))
本当は、closureが正しく処理されるように、evalを使わずに、ensure-classに展開するようにしたほうがよいでしょう。
ただそれだと、ポータブルに書けるかな?
(defmacro defclass-from-objects (name direct-superobjects direct-slots
&rest options)
`(ensure-class
',name
:direct-superclasses (mapcar #'class-of ',direct-superobjects)
:direct-slots (list ,@(canonicalize-defclass-direct-slots direct-slots))
,@(canonicalize-defclass-options options)))
こんな感じ。
0852848
NGNGMatthew DanishがTue, 7 May 2002 23:50:59 -0400にポストした[Lispweb] IMHO + mod_lispの
内容でIMHOにパッチ当てるとmod_lispで動作し始めた。でもそのスレッドは完結してないからまだ
問題は本質的には解決してないと思われ。
そのためかMacOSXのSafariからだと問題なく動作するけどWin2kProのOperaからだと
ウェブメソッドがほとんど機能しない、と。クライアントMacOSXで開発続けるかな。
0853846
NGNG0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG○ 日本語処理しやすくするために日本語も S式にしようよ。
0856デフォルトの名無しさん
NGNG斎藤某『声に出して読むS式』
0857デフォルトの名無しさん
NGNGあと処理系が色々多いんですが、Mac、Win、Unixで共通の
コードで動きますか?処理系に依存する部分がどれくらい
あるのか気になります。
0858デフォルトの名無しさん
NGNGemacsenでしかlispやっちゃいかん、っていう規則はないからいいんでない?
実際高機能なvi cloneがどの程度のものか知らないけどSLIMEとか慣れれば快適だよ。
Escape+Meta+Alt+Ctrl+Shiftが生理的に受け入れられないってのなら無理に勧めないけど。
Mac,Win,Unixで共通のコードで動くかってのはどこまでシステム寄りのコードを書くかに
依存するから言及は避けとく。CLISPとかAllegroCLのトライアルで実際試してみるのが一番かと。
SBCLもぼちぼちWinで動き出してるらしいけどもちょっと先の話みたい。
0859デフォルトの名無しさん
NGNGお約束ですが、こんな方もいらっしゃるワケで。
ttp://www.ksky.ne.jp/~sakae/sicp/schemers-vi.html
互換性はひとまず忘れて、各環境で一番良いもの(Mac なら OpenMCL)を
使うのが良いと思います。
0860デフォルトの名無しさん
NGNGしたいので、互換性は譲れませぬ。うーむ残念・・・。
0861デフォルトの名無しさん
NGNG何を残念がってるのか知らんけど、とりあえずLispWorksでも試してみれば?
Unixって言ってるのが具体的に何なのかわからんのでLinux決め打ちですまんが。
>>859
OpenMCLってそんなにいい?MacOSXではCMUCLかACLしか使ったことないから使用感とか興味あり。
Uncommon Webで遊ぶのに導入しよっかな。
0862デフォルトの名無しさん
NGNG思い付くままに。
* 括弧の対応を教えてくれる。
* 括弧を基本とした編集、カーソル移動コマンド。
* 自動的なインデント。
* 構文を元にした、コードの色付け。
* CLHS(Common Lisp HyperSpec、つまり規格)のシンボル名での辞書引き。
* Lispと対話的なやりとりができる、listener。
* 現在、書いている関数が取る引数の個数や名前を自動表示。
* 関数名、変数名などシンボル名の補完機能。
...
0863デフォルトの名無しさん
NGNG> Winで書いたコードをUnixで動かしたり、Macで動かしたり
> したいので、互換性は譲れませぬ。うーむ残念・・・。
具体的にどんなコードを書きたいのかを言わないと、互換性については、言いにくいです。
グラフィックス、数値計算、入門書の練習問題、Web関連、スクリプティング、2chブラウザなど特定のアプリとか。
互換性を考える上での基準は、
・ANSI Common Lisp規格で定められている。
・コミュニティー規格やポータブルな実装がある。(MOP, CLIM, ...)
・特定の処理系が独自にサポートしている。(LispWorksのCAPIや、スレッド機能、...)
・自分でやるしかない。
などかな。
0864デフォルトの名無しさん
NGNG変な医者とか。
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNGなどといわれたのですが、なんでS式の比較対象にXMLがくるのか
わかりません。XMLってセマンティックwebとかじゃないのでしょうか?
0867デフォルトの名無しさん
NGNG単一ベンダの処理系をとことんあてにするという考え方もあるね。
3つのOSをサポートしている処理系はLispWorksとAllegro Common Lispかな。
0868デフォルトの名無しさん
NGNGあなたの友人はそういうレベルでの比較をしたのでしょう。
そういう意味において、S式でプログラムを表現するLispの比較相手を探すとしたら、
XMLでソースファイルを記述する言語が(もしあれば)それにあたるでしょう。
XHTML(HTMLの基盤はSGML)は、Webブラウザで表示するための要素を決めたXMLの
応用例(アプリケーション)の一つです。
プログラミング言語でXMLを扱うときに、XMLのベタテキストから、言語の内部で
扱いやすいデータ構造にまず変換する事が多いです。Lispでは木構造を表すためには
S式をほぼまちがいなく使うことになります。実際、XML<->S式の変換を行うライブラリも
(いくつも)存在すると思います。このとき、LispにはS式を操作するための関数群が豊富に
揃っており、Lispプログラマならそれらに習熟しているため、XMLデータの扱いはLispの
得意分野と言ってもよいでしょう。
セマンティックWebは私が現状を追っていないので、パス。
0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNGThe Evolution of Language
ttp://homepages.inf.ed.ac.uk/wadler/language.pdf
0872デフォルトの名無しさん
NGNG分からなかった。今日、その分からなかった理由に気付いた。
Common LISP を知らなかったからだ。
Scheme の美しさというのは、Common LISP に比べてのことだったんだ。
今、ここの
http://user.ecc.u-tokyo.ac.jp/~g340299/
『on Lisp』を読みはじめたのだけど、Common LISP で書かれた例文を
Scheme で試している。うちには Scheme の処理系しかないもので。
どの例文も Scheme で書くと、素人目にも美しくなる。素晴らしい!
ということで、どうせなら Common LISP, Scheme の両方を学ぶことをおすすめします。
もちろん、Common LISP は Scheme より実用的なわけで、どちらがすぐれているとか
言うつもりはないです。
0873デフォルトの名無しさん
NGNGCommon Lispのコード例とそれを美しく書いたSchemeのコード例を見せてくれませんか?
煽りじゃないよ。純粋に興味があるだけ。
0874デフォルトの名無しさん
NGNGCommon Lisp
(defun our-remove-if (fn lst)
(if (null lst)
nil
(if (funcall fn (car lst))
(our-remove-if fn (cdr lst))
(cons (car lst) (our-remove-if fn (cdr lst))))))
Scheme
(define (our-remove-if func lst)
(if (null? lst)
'()
(if (func (car lst))
(our-remove-if func (cdr lst))
(cons (car lst) (our-remove-if func (cdr lst))))))
・defun と違って、define は、呼び出しの形と実行の形が同じ
・条件式には全て「?」がつくので分かりやすい
・nil より () が分かりやすい
あと、この例には出てこないけど、Scheme だと #' が要らない、などなど。
0875デフォルトの名無しさん
NGNG(mapcar #’+ '(1 2 3) '(10 100 1000))
Scheme
(map + '(1 2 3) '(10 100 1000))
---------------------------------------
Common Lisp
(sort '(1 4 2 8 5 7) #'<)
Scheme
(sort + '(1 4 2 8 5 7))
・先にも書いたけど、Scheme は #' が要らない
・引数のリストが、Scheme は どちらも関数が cadr に来るよう揃えられている
過去互換性を無視して、文法が首尾一貫するよう再構成したのが Scheme なのだなあ、と。
とりあえず、自分が感じたのは、こんなところです。
0876デフォルトの名無しさん
NGNG変数と関数の名前空間を分けるか統一するかは、意見がいろいろだね。
分ける側の言い分を一つあげると、Schemeで、変数名としてlistなど
明解な名前が、すでに標準関数の名前に取られてしまっているという
点があるね。
俺は慣れたけど、いちいち(funcall f arg)と書くより(f arg)の方が
美しいとは思う。
>・条件式には全て「?」がつくので分かりやすい
あとは、破壊的な操作名の末尾に!を付けるとかか。
Common Lispにもpやnを付ける慣習はあるけど徹底してはいないかな。
>nil より () が分かりやすい
これは、Common Lispでもnilと()は表記上の違いだけで、同一物です。
0877872
NGNGありがとうございます。
funcall について、私は書き忘れてましたね。
nil を廃して () のみにしたのが、Scheme の良い点の一つと思います。
cadddr といった表記の便利さがなければ、 car, cdr も別の名にしたんじゃないかな。
list については、正直、やっぱり Scheme は不便ですねえ。
名前空間の統一は、空間の混雑とも言えるわけで。
著者のポール・グレアム自身は、名前空間が同一の方がいいと考えているようです。
『on Lisp 』 P15
だから「Common Lisp には変数と関数に異なった名前空間がある.」と言える.foo と
いう変数とfoo という関数を両方持つことができ,それらは別々である必要もない.
この状況はややこしく,コードがかなり格好悪くなってしまうことにつながるが,
これはCommon Lisp プログラマが付き合っていかなければならないことだ.
0878デフォルトの名無しさん
NGNG気もするけど、listみたいに動詞と名詞の両方としての働きを持つ単語の数は多いのかな。
0879デフォルトの名無しさん
NGNGSchemeを拡張していったときに、どこまで同一の名前空間でやっていけるかな。
0880デフォルトの名無しさん
NGNG特に、JavaScript は
・関数と変数の名前空間が同一
・既存の変数(関数)名を上書き再定義しても、エラーにならない。
・静的スコープのクロージャが使える
など、事情が Scheme に良く似ています。
JavaScript では、Ver2.0 から package が導入されることになっています。
反対の声も多いのですが。
Scheme にはパッケージは導入されるでしょうか?
なんでもありの Guile にもないぐらいだから、やっぱりありえないのかな?
http://www.kt.rim.or.jp/~kbk/guile/guile_toc.html
個人的には、Javaのいちばんありがたい点の一つが パッケージ だったりするので、
正直、非常に迷いますね。
0881デフォルトの名無しさん
NGNG既に主流のScheme実装は大抵モジュールシステムを備えてるし(互換性ないけど)
R6RSにはモジュールシステムが入るという噂。
あ、ちなみに
CommonLispの「パッケージ」は外部表記からシンボルへのマッピング、
Schemeの「モジュール」はシンボルから値へのマッピング。
CommonLispみたいに名前で検索することが多いと、名前そのものを
パッケージで分けるのが便利。Schemeはなんでも無名オブジェクトだから、
名前が何を指してるかをモジュールで分けるのが便利。
0882デフォルトの名無しさん
NGNGなんかパッケージとかわからんです。
バインドと代入の違いとか。
おすすめの入門書おすえて
0883デフォルトの名無しさん
NGNGlispをschemeに書き換えるとき、意図的に変数捕捉をさせるマクロは
どう書き変えればいいのでしょうか?
例えば on lispの11.2で紹介されている with-open-file は
ファイルをオープンし、そのハンドルを与えられたシンボルにboudするマクロで
(with-open-file (s "dump" :direction :output)
(princ 99 s))
のように使います。
with-open-fileをschemeで書くとどうなりますか?
0884デフォルトの名無しさん
NGNG(define-syntax with-open-file
(syntax-rules
((with-open-file (var filename . options) . body)
(call-with-open-file (lambda (var) . body) . options))))
としておいて、手続きcall-with-open-fileの中でdirectionオプションを
処理をするのが順当かな。
Schemeのsyntax-rulesで出来ないのは、マクロの呼び出し側で陽に与えていない
変数を捕捉するようなマクロね。On Lispのaifとか。
with-open-fileの場合は変数名sが与えられるので問題ない。
0885872
NGNG遅くなってすみません。
私の方は正真正銘の初心者です。
Web 上で入手できる資料しか読んでいませんし、とても何かを薦める
立場じゃないです。
一応、私のメインはこれ。
「入門Scheme」
http://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
パッケージは、複数の名前空間を共存させる仕組みのことです。
私の本業である Java で知った概念です。
バインドと代入は…、質問の意図がわからないんだけど、
メモリ上に領域を取って、何かの値を収めますよね。
それに具体的な変数名を結びつけるのがバインド。
代入は、これはもっと一般的なプログラミングの概念で、
変数の指す値を、指定した値に変える操作にはいろいろあるけれど、
それらをひっくるめて代入と呼ぶ、と言えばよいのかしら。
>>881
とても興味深い話、ありがとうございました。
0887デフォルトの名無しさん
NGNG>・条件式には全て「?」がつくので分かりやすい
>あとは、破壊的な操作名の末尾に!を付けるとかか。
>Common Lispにもpやnを付ける慣習はあるけど徹底してはいないかな。
! とか ? より p や n のほうが発音しやすいというメリットがある。
> 過去互換性を無視して、文法が首尾一貫するよう再構成したのが Scheme なのだなあ、と。
ハカー文化が生き残っているのが Common Lisp だ!ちょっぴり委員会がガチガチにしちゃったけど、
hogehoge-p がカコイイ。確かに泥臭いところもあるかもしれん。だが、それがいい。
効率とか OO も大事だよ。やっぱ。
0888883
NGNGありがとうございます。
頭悪いんでそのコードを完璧には理解できていないんですが、
可能だと分かっただけで大収穫です。あとは自分で勉強します。
On Lispのaifみたいに(itでしたっけ?)陽に与えない変数を束縛してしまう
マクロには便利さを感じてないので、十分です。
0889884
NGNG(define-syntax with-open-file
(syntax-rules
((with-open-file (var filename . options) . body)
(call-with-open-file filename (lambda (var) . body) . options))))
ついでにcall-with-open-fileの定義。Gaucheだとこんなんかな。
動かしてないからどっか間違ってるかもしれん。
(define (call-with-open-file filename proc . options)
(let ((dir (get-keyword :direction options :input)))
(case dir
((:output) (call-with-output-file filename proc))
((:input) (call-with-input-file filename proc))
(else (error "bad direction" dir)))))
0890デフォルトの名無しさん
NGNG(defun foo ()-!-
ここでリターンを押すと、
(defun foo ()
-!-
となり、インデントをするにはタブを押す必要があります。
リターンを押しただけでイッキに、
(defun foo ()
-!-
と改行とインデントをしてくれるようにしたいのですが、良い方法があったら
教えてください。
ちなみに、ilispでは、lispプロセスを立ち上げているときは、リターンで
改行+インデントがされます。
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNGfuncallいらねーと思わねえ?
スロット2つあるなんてデメリットの方が大きいよな。
0893デフォルトの名無しさん
NGNG悪い点。
・変数参照になってしまう所を関数参照にする手間。
e.g. × (mapcar #'foo list), ○ (map foo list)
・関数参照になってしまう所を変数参照にする手間。
e.g. × (funcall foo list), ○ (foo list)
良い点。
・変数名と関数名に同じ名前を使える。
e.g. × (list item lst), ○ (list item list)
動詞と名詞の両方の働きを持つ単語ほど、たとえ数はすくないとしても、
使用頻度の高い言葉が多い。listなど。(他は?)
この他の良い点、悪い点があったら教えてください。
Common Lispで名前空間を統一するとしたら、
(foo arg1)で、fooの変数スロットがunboundでなければそれを使うようにevaluatorを変更。
defunをdepricatedにして、変数スロットを設定するdefineを定義する。
なんて感じかな。混乱するだけのような気もする。
0894デフォルトの名無しさん
NGNGでも、Lisperにとっては違うのだろうか。
order: 順序、注文 or 順序づける、注文する
ってのがあるね。
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNG数日間、集中して構文を勉強したら、急に分かるようになってきた。
Shiro さんのところの「なんでも(or λ 再帰 継続)」シリーズの内容が、読んで理解できたよ。
継続についてのアリスの話も、大体は分かるよ。ものすごくうれしい。
私と同じく、周りに誰も LISP (Scheme) を知る人がいない人のために一言。
cdr は「クダー」って読むんだぞ。「しーでぃーあーる」じゃないぞ。知らなかっただろ?
まあ、発音する機会なんてないんだけど。
0898デフォルトの名無しさん
NGNG何を使って勉強したの? (本とか)
0899デフォルトの名無しさん
NGNG単一名前空間を望むなら Scheme を使いたまえ。人は短くて簡潔な方
を好む傾向があるが、それらの性質は必ずしも必要ではない。気をつ
けろ!その行き着く先は極度のミニマリズムだ。
0900デフォルトの名無しさん
NGNG環境は、Chez Scheme と ChezEdit
http://www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/index.html
教材は >>885 にもあがってる 「入門Scheme」
http://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
(Chez Scheme は R5RS のマクロしか動かない。そして R5RS のマクロを説明している
日本語の教材が、これしか見つからなかった)
この本はかなりとっつきにくい。ダウンロードしたのは何ヶ月も前だったんだけど、
ちょっとかじっては挫折を繰り返してきた。説明が割と厳密なのが災いした。
そこで、今まではモニタで見てたんだけど、その日読むと決めた分(数ページ)をプリント
アウトして、自分の中であいまいな点がなくなるまで徹底的にガリガリ噛み砕いた。
0901デフォルトの名無しさん
NGNG「Scheme の識別子(変数)はすべて、アドレスを保持するのみで、値を保持しない。
つまり、Scheme 中で使われる値は、整数も含めて全てオブジェクトだと言うことができる。
識別子(変数)への代入は全てアドレス渡しである。識別子にオブジェクトのアドレスを
代入することを『識別子を値にバインドする』と言う」
こういった感じで、自分が納得できるようになるまで読み砕いていった。間違った解釈は
あるんだろうけど、とりあえずその場で納得することを優先した。あとで R5RS を読んで
修正しようと思っている。
特にリストとペア(ドット対)については徹底的にやった。これまであいまいにしてきた
点が多かったから、紙に適当にリストを書いては、それをペアに分解したり、さらにそれを
二分木の樹形図に書き直したり、中学生に戻ったつもりで紙に書きまくった。
これはとても効果があった。それまで
「car (a b) は a なのに、なんで cdr (a b) は b じゃなくて (b) なの?」
というレベルだったのが、(((a b c d) a b c d) a b c d) というリストを見て
「ああ、同じ長さ、同じ値を持つ3本のリストが、頭のあたりでくっついてるんだな」と
すぐに分かるようになった。
0902デフォルトの名無しさん
NGNGわかってきた。たとえば、((lambda (a b . c) (...)) 1 2 3 4 5) で、なんで c に
(3 4 5) が割り当てられるのか、とか。
意外な副作用として、カッコの対応が分かりやすくなって、S式を読むのがだいぶ楽になった。
S式を読む能力は、頭の良し悪しより、自転車の運転のような、訓練で身につく技能ではないかと思う。
こういうことをやっているうちに、頭の中でいろいろなことがつながってきた。
「入門 Scheme」でさらりと述べられていることが、実はとても深い意味を持つことが分かって、
読みながらしばしば感動した。まだ第1章の文法のところしか読んでいないのだけど。
もっと要領の良いやり方もあるのだろうとは思う。また、他の教材を知らないから、
「入門 Scheme」が良い本かどうかは分からない。だけど頭の悪い私にとって、この本を
こういうやり方で読んだことは良いことだったと思っています。
他の皆さんは、どうやって LISP を身に付けたのでしょうか。興味があります。
0903デフォルトの名無しさん
NGNGScheme があまり普及しなかった理由の一つは、標準のライブラリの整備を、
その種の「悪しきミニマリズム」が阻んだからではないかという気がします。
まだ事情を知らないので、憶測で言っているだけですけれど。
また Guy Steele みたいな天才が現れるのを待つしかないのでしょうか?
0904デフォルトの名無しさん
NGNGあと、憶測でものを言う前に自分でいろいろ調べた方がいいよ。
0905デフォルトの名無しさん
NGNGいや、ここで Common Lisp の話だけじゃなくて、Scheme や Emacs Lisp の話も
してもらったほうが、初心者である自分には助かるんだけど。
なにしろ、いちばん学びやすいのは Scheme だと思うし、いちばん書く機会が多いのは
Emacs Lisp だろう?
前から不思議だったんだけど、ここで Common Lisp だけの話をしたい人は
初心者にはどれぐらい存在するんだろうか?
Scheme、Common Lisp、Emacs Lispの比較
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html
0906デフォルトの名無しさん
NGNG> なにしろ、いちばん学びやすいのは Scheme だと思うし、いちばん書く機会が多いのは
> Emacs Lisp だろう?
何を根拠にそんな決め付けを?
0907デフォルトの名無しさん
NGNGリンク先は読んだか?
> ユーザの多さでいうと、多い順に Emacs Lisp、Common Lisp、Schemeとなる。
これが、いちばん書く機会が多いのは Emacs Lisp だとした根拠だ。
ユーザもコードベースも一番少ないに関わらず、Scheme は MIT を始め、多くの
教育機関でコンピュータの初等教育に使われている。また日本語で読める
チュートリアルも多い。
これが Scheme が学びやすいと考えられる根拠だ。
しかし、そんなことは、はっきり言ってどうでもいい。俺が聞いているのは、
初心者様は本当に Common Lisp だけに限定したスレッドを望んでいらっしゃいますか、
つうことだ。
このスレはもうすぐ終わる。俺は正直、次スレが LISP 全般の質問・雑談スレになることを
希望しているんだが、他の皆さんはどうか?
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNGこのスレがこれだけ伸びたのは、「初心者」需要が多かったからだと考えている。
本スレだとちょっと間抜けなことを言っただけで叩かれそうだから。
Common Lisp 専用スレの需要があったせいだとは思えないのだ。
しかし、このスレも後半ぐらいから、Common Lisp 専用スレの雰囲気が強くなり、
間抜けな質問も叩かれやすくなったと感じている。
今後のスレッド運営をどうするか?
1.本スレを一般向け、このスレを初心者向けの Lisp 全般スレにする。
2.本スレを Scheme、このスレを Common Lisp の専用スレにする。
3.このスレを廃し、本スレに統一する。
俺個人は 1. か 3.を支持したいんだが。
あと、
4. Scheme 専用スレを新規で立てる。
こういう意見があるとしたら、俺は反対だ。人が分散して全体が寂れることが、
ほぼ確定だと思う。
0910デフォルトの名無しさん
NGNGに賛成。
>3.このスレを廃し、本スレに統一する。
これに賛成。初心者に気を使うとしたら、「【初心者歓迎】Lisp & Scheme Part11」
などとしてみるとか。
まぁ、本当はどの場所でも、実際に初心者が「マヌケ」なことを言ったときに、
それを嘲笑しない雰囲気が大切だろうと思う。
0911デフォルトの名無しさん
NGNGどの辺を叩きっていってるの?次は統合でいいんじゃないかなー。本
スレの最近のカキコからも敷居の高さはうかがえないし。
0912デフォルトの名無しさん
NGNG>>911
では、叩きという言葉は取り消そう。俺が過敏だったのかもしれない。
0913デフォルトの名無しさん
NGNGわざわざCommonLispに限定する必要はないと感じたよ。
結局読むの同じ人だし。
分けるとしたら
・本スレ(LISP統合スレ)
・初心者スレ
・特化した話題を扱うスレをいくつか(例えばCommonLispのコアな部分とか)
て感じが良いと思う。
まあEmacsLispスレは独立して立ってるし、専用のスレ立てたいCommonLisperの
気持ちわからんでもない。でもただの限定スレ、ってだけじゃ本スレと
話かぶりまくるし、今後はその辺を気をつけて立てようよ。
例えば初心者スレに特化するなら注意書きテンプレ考えて>1に貼っとくとか。
このスレの>1の中身じゃなんだかわかんねーし。
要は、住み分けがちゃんとできればなんでもいい。
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNG両方の利点を知りたいです。
そもそもwindows環境では、xyzzyに頼る以外にclispもインストールできない
人が多いと思います。Chez Schemeは認知度低そうですが簡単に
インストールが出来ました。
linuxや*BSDの環境でも初心者にはSchemeの方が簡単に手に入りそうです。
macはどうなのか知りませんが、手に入れた環境で手探りでlispに触れていく
んでしょう。
日常で使える便利なスクリプトがどれでも(os)、どちらでも(2つのlisp
)作れるようになれればいいな、などと思ってます。
0916デフォルトの名無しさん
NGNG最初の頃に質問させてもらいましたが調べる能力が
足りてないのも実感しました。質問以前に初心者ですらなかったのかもしれません。mapcarなんて基本的な関数すら知りませんでしたし、
今はもう質問に頼るようなことは諦めてます。
市場で農作物を抱えて運んだり台車で引っ張ったりと
いう単調で、そして人手が少ないのもあってかへとへとになる毎日です。
プログラムなんて興味があっても縁遠い人間です。
理解できてないのにtech板を定期的に見てしまうのは、"読み書きそろばん"
と呼ばれるような基礎的知識として、pcに簡単な処理をさせることはとても
重要だと思うからです。
じゃなぜ情報の少ないlispなんかに関心を持ったかというとスレの進行が
丁寧なのと、emacsの影響が大きいです。あと少ない労力で開発が
可能らしい…、という点でしょうか。
0917デフォルトの名無しさん
NGNG雑談スレになっても、またさほど高度ではない技術で
こんな面白いことができるという紹介のスレでも、lisperから
仕掛ける釣りのスレでも結構です。その時はageちゃえばいいんです。
きっと、何か聞きたいことが発生しても本スレだけでは
スレッドを汚したくない気持ちが強くて遠慮してしまいます。
0918デフォルトの名無しさん
NGNG915、916、917です。
0919デフォルトの名無しさん
NGNG本スレが簡単な質問もできないほど流れが速いのならまだしも、
平気で数日間レスが無かったりする状況だから、初心者の質問が
「スレ汚し」なんてことはないと思うよ。
質問に対する回答を見てても、本スレか初心者スレかをあまり気に
してないみたいだし。
0920デフォルトの名無しさん
NGNGそして、開発者やlisperの語る商売になる話、あるいは時代に一撃
喰らわせる程の熱い話があちらで飛び出して欲しいんですが、
やっぱり勘違いしてるでしょうか?
0921デフォルトの名無しさん
NGNG両方が混ざって混乱するほどレス数が無い
0922デフォルトの名無しさん
NGNG必要だと感じる人がいるのなら、次スレを立ててくれれば、俺は今まで
通り出来る範囲でレスをつけます。
このスレも一応、成功したうちに入るでしょ?
0923デフォルトの名無しさん
NGNGついでにいうとCommonLisp限定の方がいいと思うんですけど、なぜそう思うか
自分でも言語化できていないので強くは主張しません。
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNGパターンを示して、育ててみるのも一興よのう。
0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNG賛成一票。
0928デフォルトの名無しさん
NGNG同じく賛成。
だいたい Scheme は上級で Common Lisp は完全に初心者とか
その逆の人とか少なくないか? 分ける意味無い気がする。
0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNGつまり懐の深い本スレと初心者スレで、
Common lispもSchemeもありってことでいいんでしょうか。
>>925な感じでぐいぐいひっぱってくれればついていくかも知れないけど、
>>926なのでできればお勧めは前者ですよーな感じ?
0932デフォルトの名無しさん
NGNG無名関数の呼び出しが発生するので、遅いだろうと文句を言われました。
それでも、あなたはreduceを使った、この簡潔な定義が気に入っています。
次の一手は?
(defun reverse (list)
(reduce #'(lambda (a b) (cons b a)) list :initial-value nil))
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNG(declare (inline reduce))
(reduce #'(lambda (a b) (cons b a)) list :initial-value nil))
これで、reduceを展開してくれるコンパイラはない?
cmucl18e, clisp2.33, lispworks4.3.6は展開してくれない。
0936デフォルトの名無しさん
NGNG(defun ore-reduce ...)
する。
0937デフォルトの名無しさん
NGNGお願いすれば、インライン展開してくれるコンパイラが主流だと誤解していたよ。
0938デフォルトの名無しさん
NGNGそれとも標準のストリームなどから容易に実装できるのでしょうか?
0939デフォルトの名無しさん
NGNG使ったことはないですが、とりあえず。
ttp://www.geocities.com/mparker762/clawk.html
0940938
NGNG有り難うございます。助かりました。使ってみます。
read, read-char, read-line などは標準であるのに、、、
token 毎に読んだり字句解析まで出来る read なんかも
標準に入ってて、いつでも気軽に使えるといいな〜。
と思ってるのは私だけ?
0941デフォルトの名無しさん
NGNG>字句解析まで出来る read
字句解析がどういうものを求めているのか
よくわからないけど、set-macro-characterを駆使して、
自分でマクロ文字を定義してやれば、ある程度は可能かも。
って、そういう問題ではない?
0942938
NGNG>>939 のリンク先にあった lexer と同程度のこと、または
Unix の lex プログラムと同程度の事ができるものです。
恥ずかしながら read macro のいじり方が良く分からないんです。
0943938(長文スマソ。本スレの方がいいのかな。。)
NGNG「y2k の問題を解決するために COBOL のプログラムの
解析プログラムをLISP により作成し次々と問題のプログラムを
修正していった。
LISP だとこのような強力なことが割合容易に可能となる」
みたいなのをどっかで読んだ記憶があります。
でも、LISP にそれを直接サポートする関数はあんまりないし、
Scheme でもいいのですが、
「LISP で簡単実装、擬 C コンパイラ」
みたいな文献やサイトも見た事ないです。
一度構文解析までできて構文木リストまでにプログラムを
持っていけるとあとは楽しそうなのですが、
それ以前でつまづいてしまってふがいないというか、
やるせないというか、悶々としてしまってます。
皆さん clawk と lalr を使っているのでしょうか?
それとも他言語コンパイラ向き LISP があるのでしょうか?
それとも標準的機能で簡単にある程度の事はできるのでしょうか?
0944デフォルトの名無しさん
NGNGしかも、y2kの話はかなりの売り文句になると思う。今まで知らなかったけど。
0945デフォルトの名無しさん
NGNGフリッツは国の仕事よく請け負ってるからそんな表にでてこないネタいっぱい知ってると思われ。
ライブラリの件はzebuだっけ?何か有名なのあったよね。
使おうとしてたら上級Lisperの人に遅くて使い物にならんよ、って止められた記憶がある。
0946デフォルトの名無しさん
NGNGCommonLispのread系の関数は、lispのプログラムを読むために用意されているので、
マクロ文字の処理関数を書いてもCなどのソースを字句解析するのは厳しいでしょう。
Lexerには正規表現をよく使うけど、Common Lispの規格には規定されて
いないから、汎用的なlexerをCLの標準装備で簡単に定義するのは難しいかも。
まぁ、Cの字句解析なら手書きでread-charから書いてもそれほど手間じゃないと思うけど。
したがってlexerやlalrを使うことになると思います。Cなら文法定義もどっかにあるのでは?
Cの文法クラスって、recursive descent parserじゃパースできなかったっけ?
無理っぽいよね。
0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNG「Scheme初心者スレ」でよろ。
09501
NGNG「Scheme初心者スレ」で単独スレを立てればいいではないか。
何もこのスレの後継にすることはないと思う。
ちなみに「Commonlisp初心者スレ」のスレタイで立てたのは、
内容をCommonlispで統一したいから。
Schemeとlispは別言語であり、別言語を混ぜると混乱する。
ここは「Commonlisp初心者」対応のスレであり、初心者が混乱することは
できる限り避けたいと思うしだい。
如何でしょ?
09511
NGNG「Scheme初心者スレ」で単独スレを立てればいいではないか。
何もこのスレの後継にすることはないと思う。
ちなみに「Commonlisp初心者スレ」のスレタイで立てたのは、
内容をCommonlispで統一したいから。
Schemeとlispは別言語であり、別言語を混ぜると混乱する。
ここは「Commonlisp初心者」対応のスレであり、初心者が混乱することは
できる限り避けたいと思うしだい。
如何でしょ?
0952デフォルトの名無しさん
NGNG本スレ=CommonLisp+Scheme+Scheme初心者
でいいんじゃない。
0953デフォルトの名無しさん
NGNGいきなり参照すると、unbound-variableエラーになりますが、
この動作に、歴史的な経緯や、理屈はあるのでしょうか。
エラーにせずに、(car 'nil) => nil みたいにとりあえずnilを返す仕様の方が
便利な気がします。
0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNG初期値を設定せずに参照するって発想は間違ってるから、
それでいい。
歴史的経緯とか関係なく、プログラム組む上での常識。
0956デフォルトの名無しさん
NGNGわざわざ値を設定しなくては、参照できない変数ってすこし面倒。
なんでもいいから値が最初から入っている事にしてほしいのでは?
0957デフォルトの名無しさん
NGNGま、わからんからそういう発想が自然と出てきてしまうんだな。
納得。
0958デフォルトの名無しさん
NGNG他の型であることが前提のコーディングをしていれば、そこで簡単にエラーとなるでしょ?
関数のキーワードパラメータのデフォルトの初期値はnilだよね。
0959デフォルトの名無しさん
NGNG初出変数を自動宣言できるという仕様にしていた。
だけど、Schemeでライブラリを書いていくうちに、それが大きな
間違いだった事に気づいた。
原因不明な実行時エラーという形で問題が表面化したからだ。
変数に使うシンボル名にゴミが付いただけで、それが何のエラーも
出ずに通ってしまっていたのだ。
エラーが出た時点で、名前にゴミが付いたという原因は判るはずもなく、
あてのないデバッグ作業が続いた。
ロジックは全てあっているし、トリッキーなこともしていない。
あげく、自分の書いたコードに不信感を抱き、このコードには
呪いでも掛かっているのでは?
と、オカルト的な思考をしてしまう程追い詰められた。
そして原因がわかった時、その恐怖は想像を絶した。
・・これは、Lispに限らない話。
0960デフォルトの名無しさん
NGNG変数名の打ち間違いはここ数年ないと思う。
でも危険性はあいかわらず存在するから、どうしても初期値をnilにしたいっていうなら、
最初に参照した時点で、warningを発するようにするとかするかな。
0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNGことがよくある。誤って改ざんってわけじゃないけどバッファの移動に失敗してゴミ残すパターンが
多いみたい。CTRLキーをもっと確実に押せるようにキネシスでも買おうか思案中。高いけど。
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG同じホラーストーリーは、plistやhash-tableなんかでも発生する可能性があるよね。
一箇所だけ、(setf (getf plist 'zpeed) 100)なんてね。
0965デフォルトの名無しさん
NGNGlispもトップレベルで色々、思考錯誤しているときに、
> (dolist (it some-list) (pushnew it a))なんて打ってから、
チッ! aを設定してネーゼなんてこともあるから、トップレベルに与える
フォーム中に未定義変数が含まれている時は、警告と共にnilに初期化
するというのは、アリだと思う。
0966デフォルトの名無しさん
NGNG(let ((foo (bar (list 'a 'b))))
;; do something
)
のつもりで、
(let (foo (bar (list 'a 'b)))
;; do something
)
と書いたときでした。私も呪われているのかと思いました。
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNGキネシスですか。いいですね。小指で押してますがやはり辛いです。
0970デフォルトの名無しさん
NGNG小指でコントロールを押すなら、oxとかp,nがたまに入るのは、ありえるかなと思った。
0971デフォルトの名無しさん
NGNGLISPでアプリケーション書くときにGUI構成するのは何がお勧めですか?
当面CMUCL on Linuxで作業する予定ですが処理系・プラットフォームが変わっても
使い続けられるようなのがあると嬉しいんだけど商用の処理系でCLIMでケテーイ、ですか?
0972デフォルトの名無しさん
NGNGhttp://www.tilton-technology.com/cellophane.html
0973デフォルトの名無しさん
NGNG>>971 CLIM for CMUCLとして、McCLIMもあるでよ。完成度はどうか知らんけど。
当面、CMUCL + McCLIMにしておいて、金が工面できたら売りものの処理系を買うのもいいかも。
0974971
NGNGCelloはコードにアクセスできないのでドキュメントとかメーリングリスト斜め読み中。
この前のcommon-lisp.net侵入騒動から完全に復帰するのはいつ頃になるんだろうねぇ・・・
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG必ずしも環境(スタックフレーム)丸ごと保存する必要は無い様な気がするのですが
(クロージャが作られた時に参照している幾つかの変数だけ分かれば良いとか)、間違って
いますでしょうか?
もう一点、レキシカル変数って他の関数とも共有され得る変数ですよね。スレッドと相性
が悪くないでしょうか?
初心者質問で済みません。
0977デフォルトの名無しさん
NGNG>(クロージャが作られた時に参照している幾つかの変数だけ分かれば良いとか)
その通り。コンパイル時にどの変数を参照してるかわかるので、それらだけを
抜き出してフレームを作るようなコードを出すこともできます。ただ、setfされる
変数は共有しなければならないので、それは一段間接参照をかませます。
Scheme->Cの処理系でこれをやってるのを見たことがあります。環境をCの
関数フレームに置けるので有利です。
この方法は、単に環境と関数ポインタのペアを作るのにくらべてランタイムの
クロージャ作成時のコストが高くつきますが、余分な環境を持たないメリットも
あるので、可否は処理系全体のバランスですね。
0978デフォルトの名無しさん
NGNG成る程。計算量的には環境へのポインタを作った方が効率が良さそうですね。
>Scheme->Cの処理系でこれをやってるのを見たことがあります。
これかな。
http://www.swiss.ai.mit.edu/~jaffer/hobbit.txt
0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG転じて、Lispでは仕様の微細な変更を言う。
0982デフォルトの名無しさん
NGNGscheme = skin、すなわち皮のこと。皮はハワイ語で kahua と表音されるが、
継続ベースのアプリケーションフレームワークを指すこともある。
kahua は gauche という scheme 処理系で動作するが、この作者は
川合氏であり、嘘のようなホントのカワ繋がりには、いささか背筋が寒くなる。
0983デフォルトの名無しさん
NGNGhttp://www.gnu.org/software/kawa/
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG人海戦術
0987デフォルトの名無しさん
NGNGひたすら論理記述するしか無いの?
Lispでも人工知能が知らない対象を処理出来たりはしないってこと?
0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG今でも、現役の言語なの?
0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG他の言語よりもよさそうな気がする。まだ
Lispでそういうものを書いたことないけど。
Perlで設定に応じたCGIスクリプトを生成する
CGIを書いてたら、かなり面倒だったですよ。
0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。