LISP Scheme Part3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGPart1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/test/read.cgi/tech/1002584344/
Part2(過去ログ倉庫): http://pc.2ch.net/tech/kako/1002/1002584344.html
リンクは>>2-4に。
0002デフォルトの名無しさん
NGNG日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
プログラミング言語Scheme(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。
Lisper への道(日本語)
http://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html
判りやすいLISP入門サイト
Schemeへの道(日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
慶応の授業のページ・記号処理プログラミング 2001
http://buri.sfc.keio.ac.jp/lisp/menu.html
Practical Scheme(日本語)
http://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書があります。
SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。
Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。
お隣りのプログラマ板のLISPスレのログです。
http://mentai.2ch.net/prog/kako/963/963134110.html
0003デフォルトの名無しさん
NGNGCommon Lisp the Language, 2nd Edition(英語)
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
CommonLispの仕様書です。
アルゴリズム言語Schemeに関する第五改訂報告書 R5RS(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
http://www.biwa.ne.jp/~mmura/scheme/tspl.html#r5rs
日本語訳はここ以外にもあるそうです。
Scheme Requests for Implementation SRFI (英語)
http://srfi.schemers.org/
Scheme Frequently Asked Questions (英語)
http://www.schemers.org/Documents/FAQ/
0004デフォルトの名無しさん
NGNGSchemeで書かれた正規表現ライブラリ
ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html
SICPの回答集
http://www.melt.kyutech.ac.jp/~gogogo/sicp_ex/
http://pluto.aurorasd.co.jp/~mkama/sicp/
http://www.ipl.t.u-tokyo.ac.jp/sicp/solution.root.html
http://www.sampou.org/scheme/sicp/answer/
0005デフォルトの名無しさん
NGNGですが、これで縦型探索になるのが不思議です。lにリストをいれてxに要素を
いれると、見つかるとscontが呼び出されてだめだとfcontが呼び出されるという
ことでいいんでしょうか。Scheme屋さんはこういうコードが好きなんですか?
(define (dfsearch x l scont fcont)
(if (pair? l)
(dfsearch x (car l)
scont
(lambda ()
(dfsearch x (cdr l) scont fcont)))
(if (equal? x l) (scont x) (fcont))))
0006デフォルトの名無しさん
NGNG(+ 1 2) ; -> 3
(* @ 2) ; -> (* 3 2) -> 6
(- @ @@) ; -> (- 6 3) -> 3
みたいに。
0007デフォルトの名無しさん
NGNGCommonLispにはある筈。
たしか+
詳しくは仕様書参照して。
0008デフォルトの名無しさん
NGNG0009無名λ式
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1002584344/?&st=949&to=949&nofirst=true
> つーか、シンボルは分解するようなものじゃないだろ?
Lisp 1.5懐かしあげ
(explode 'explode) → (e x p l o d e)
(inplode '(i n p l o d e)) → inplode
0010デフォルトの名無しさん
NGNGすげえな。でも、何の意味が?
シンボルってアトムじゃないの?
0011デフォルトの名無しさん
NGNG質問の意味がワカラン
0012関数プログラマ
NGNGシンボルを簡単に分解できるexplode/implodeが重宝がられたそう
です.
0014関数プログラマ
NGNGcar/cdrを取ることもできます.
これとは関係ないのですが,昔のマイコン上のLisp処理系では,
atomのcarだかcdrだかを取るとproperty listがぞろぞろと取れ
てしまうものがありました.atomのメモリ上の表現がconsセルと
同じだったからなんですね.実際それを使ったプログラムもあり
ました.うーむ.
0015デフォルトの名無しさん
NGNGsymbol の字面の文字を解析して別の symbol の list を返す
というのは, atom の分解できないという定義とは矛盾しないと
思うけど.
0016デフォルトの名無しさん
NGNG(define (explode sym)
(map (lambda(c) (string->symbol(string c)))
(string->list(symbol->string sym)))
)
(define (inplode sym-list)
(string->symbol (apply string
(flatten (map (lambda(s)(string->list(symbol->string s)))
sym-list))
))
)
0017デフォルトの名無しさん
NGNG=>abcde
0018デフォルトの名無しさん
NGNGs/flatten/apply append/
Lisp の組み込み述語 member を自力で定義しなさい。
(キーワードパラメーターももちろんサポートすること)
例:
> (member '(c) '( ( (a) (b) ) ( (c) (d) ) ) :key #'car :test #'equal)
( ( (C) (D) ) )
0020デフォルトの名無しさん
NGNGこういうmap関数を作ったとき、
(define (string-map proc s)
(let loop ((pos 0))
(if (< pos (string-length s))
(cons
(proc (string-ref s pos))
(loop (+ pos 1)))
tail)))
(string-map (lambda(c)(display c)#t) "abcdef")
fedcba
=>(#t #t #t #t #t #t)
という結果になってしまいました。
これは規格通りなのでしょうか?
ほんとは
abcdef
と出したいんですけど。
0021デフォルトの名無しさん
NGNG(defun member (item list &rest rest &key test test-not key)
(nthcdr (or (apply #'position item list rest) (return-from member)) list))
0023デフォルトの名無しさん
NGNGconsじゃなくてbeginつかえよ。
0024デフォルトの名無しさん
NGNG(let ((r (proc (string-ref s pos)))) (cons r (loop (+ pos 1))))
0025デフォルトの名無しさん
NGNG特に規定が無いからなんだけど。
副作用のある処理でこの辺気をつけて書かないと
大量のバグを抱え込むことになる。
0026デフォルトの名無しさん
NGNGこれ間違えたら警告出す様にできない?
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGSchemeの場合,任意の式が副作用を持つか持たないかは静的には
(実行する前には)わからないので難しいと思います.
0029デフォルトの名無しさん
NGNGまたなつかしい論文を…
まあ,それにしても G. Steele って天才だと思います.
彼のこの分野への影響力は半端ではない.
0030デフォルトの名無しさん
NGNGこれWeb翻訳しようとしたら、全部画像じゃん。アホか。
PDF使えねー
0031デフォルトの名無しさん
NGNGコンパイルすると大抵の処理系では右から左への評価順序に
なるんじゃないかと。(理由はCと同じだと思う。)
インンタプリタなら左から右ってのも珍しくないけど。
過去スレに無理矢理評価順序を変えるマクロがあった。
0033デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGいったいいつの論文だと思ってるんだか…
スキャンしてオンラインで読めるようにしてくれているだけでも十分ありがたいのに.
0036デフォルトの名無しさん
NGNGなんだと?この論文オナニー野郎
OCRにぶち込めば済む話だろうが?
0037デフォルトの名無しさん
NGNGじゃオマエがやれやヴォケ
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG何する言語?
みなさんどんなことに使ってるんですか?
単に興味持っただけなんですが、教えてくらさいませ・・・・
0040>39
NGNG0041デフォルトの名無しさん
NGNG俺はパースなんかに使ってる。
0042デフォルトの名無しさん
NGNG僕も最近lispを知って、面白そうだったのでxyzzyでいろいろ
いじってます。
lispだけしかやらない人は少ないと思うのですが
lispをやって得た知識が、他の言語でのプログラム
に役立ったってことはありますか?
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGあの本たのしいね。
25才を越えてしまったいま、「普通の奴ラの上を行け」を読んで
今年はSchemeきわめようかな、と思うこのごろ。でもRubyもSqueakも
極めたい。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGでもCのマクロとschemeのマクロは全然違う機能だと思うけど。
0048デフォルトの名無しさん
NGNGエレガントな方法ある?
SICPの4章みたいなのが一般的?
004942
NGNG僕は培風館のLISP(原書3版)というのを使ってやってますが、
そこでクロージャーでジェネレーターを作っているのがありました。
確かにこんな機能はCにはないですねえ。
ただ、ジェネレータを作るたびにそれぞれのレキシカルな環境が生まれるっていうのは
なんだか、クラス作ってインスタンスを作ったみたいな感じがしました。
(って、激しく勘違いしてるのかも知れませんが。)
0050デフォルトの名無しさん
NGNGデータ付き関数
005142
NGNGしかし、xyzzyでやってるからオブジェクト指向で書けない。
CLOS、おもしろそうなんですが・・・。
0052デフォルトの名無しさん
NGNGマクロはマクロだけど
lisp の構造上異常に強力になるという
ことだよね。
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG(#defineの中に#ifdefなんかが書けない)
LISPはなんでもあり。
この違いはデカイ
0055デフォルトの名無しさん
NGNG明日確認しよーっと。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGデータ救助&復旧の予定は?
0058デフォルトの名無しさん
NGNGできる。あれはLisperの作者がLisp風マクロをJavaでも使いたくて作ったものなので。
0059デフォルトの名無しさん
NGNG根本的な考え方が身についた。
>>44
どれかを徹底的にやってから次に手を出すのがよいと思われ。
LispとSmalltalkは甲乙つけがたいよさがあるが、Smalltalkは見事な
実アプリはあっても丁寧に内容を説明したないのが欠点。
Lispはいい本がたくさんあるが、"Paradigms of Artificial Intelligence
Programming"を一冊終わらせたらスーパープログラマーになること
間違いなし。
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGmapじゃなくてfor-eachを使えば評価順序は規定されてる。
(ただし値はunspecified。副作用専用。)
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGSRFI の map-in-order
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNGザウルスってCEだっけ?
だったらPocketSchemeで検索
0066デフォルトの名無しさん
NGNGOSはWindowsですか?
0067デフォルトの名無しさん
NGNG独自OSです。
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNGそんなにLISPってすごいの?
0070デフォルトの名無しさん
NGNGすごいですぅ
0071デフォルトの名無しさん
NGNGってわけでもない。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNGそういえば、Omoikane Debian GNU/Linuxのinstallerもschemeでした。
0076デフォルトの名無しさん
NGNGそれってマクロだけじゃ無いの?
本体をLISPで書いている分けではないでしょ?
0077デフォルトの名無しさん
NGNGLISP も凄いけど、その方言である Scheme はもっと凄い。
これは LISP に環境モデルを加え、言語としてもかなり綺麗。
「環境」をうまく使えば、メッセージ送信、(多重)継承、カプセル化
なども簡単に実現できる。他にも継続なんてものもあるので、
これを使えばバックトラックも可能。Scheme に弱点はあるのかな?
0078デフォルトの名無しさん
NGNG無敵と考えるのは不遜だよ.
0079デフォルトの名無しさん
NGNG>Scheme に弱点はあるのかな?
名前空間が1つしかない、とか。
define-publicとかは処理系依存だし。
あとオペレータ操作とかが面倒。
普通の言語ではa:=bと4文字程度で済むのに対し、
(:= a b)とタイプ量が増える。(括弧、セパレータの空白)
独自にリーダー作っちゃえば良いんだけど。
0080デフォルトの名無しさん
NGNGSchemeのプログラムはもっと根本的なところで
タイプ量が減ると思うけどね。
008177
NGNG> 名前空間が1つしかない、とか。
そうですね。これについては拡張 Scheme を使えば良いと思います。
処理系依存になってしまいますが、これは現実的なプログラミング
との妥協点だと思います。Schemeの計算モデルの問題では
ないですね。根本的な問題点で思い付く事ってありますか?
0082デフォルトの名無しさん
NGNGあと、ローカル関数があれば名前空間はなくてたいして困らないと思う。
現実的に一番困るのは動的な型が大きなプログラムではデバグしにくいこと。
0083デフォルトの名無しさん
NGNG静的な型が無いことぐらいだね。
008477
NGNG思います。現実なプログラミングとして「デバグがしにくい」という
のはあると思いますが、それと同時に記号処理の恩恵も受けている
はずですからね。
書式 (括弧だらけ) についても、長所と短所があると思います。
括弧で囲い前置記法にすることで曖昧性がなくなり、つまらない
ミスを減らしているのも事実です。慣れない人とっては奇妙な書式
ですけど。色々なプログラムの設定ファイルを見ると、その長所は
理解してもらえると思います。LISP/Scheme の S 式を使う事で、
書式の統一が出来ますし、混乱することもなくなりますからね。
初心者用には、フロントエンドを用意すれば良いと思います。
0085デフォルトの名無しさん
NGNGやっぱりそれでも短所だよ。同時に長所だけどね。(w
0086デフォルトの名無しさん
NGNG>>77 型付ラムダ計算の実習に使えない点
が弱点かと思います。
0087デフォルトの名無しさん
NGNGCは、「Fileローカルな関数/変数があるから、名前空間がない」という流儀で、
バリバリやってきたわけだけど、欲しい…名前空間。
0088デフォルトの名無しさん
NGNGみたいな名前にすると名前空間気分が味わえるよ。
usingのかわりに(define foo hoge::foo)とかする。
0089デフォルトの名無しさん
NGNGそれいただき(w
0090デフォルトの名無しさん
NGNG次のようなマクロを Common Lisp で定義しなさい。
> (for x (0 8) (princ x) (princ (+ x 1))
0112233445566778
NIL
0092デフォルトの名無しさん
NGNG(let ((foo hoge::foo))
...)
で囲んだ方がそれっぽいかも(w
0093デフォルトの名無しさん
NGNG意味わからん。宿題?
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG009695
NGNG0097デフォルトの名無しさん
NGNGシンプルなところ
0098デフォルトの名無しさん
NGNG0099名無しさん@Emacs
NGNGでも Win じゃまともな処理系が見つからない。DrScheme ってなんか見た目が
好きじゃないし。
0100デフォルトの名無しさん
NGNGまともな処理系はchezとか、mitとかscmとかbiglooとかたくさん
あるみたいだけど。
なんにせよ見た目で選ぶのはやめたほうが良いよ。
0101前スレに書いたんだけど
NGNG僕もWinのコマンドラインの処理系探し回ったけど
処理系の「アプリ」として一番まともなのはPetite Chez Scheme。
mit,scmはどーもいまいち。
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG特に実行ファイルで配布できそうなもの。
GUI対応で単体EXEで配布できるようにすれば普及するかもよ?
誰か作らない?
0104デフォルトの名無しさん
NGNG> 誰か作らない?
そう言われて「じゃあおまえが作れ」という言葉がよく返ってくるのは、
「欲しいけど自分は作れない」人が多いからなんじゃないかと思ったりして。
……という訳で、自分で作ってください……。
Winで実行ファイルが作れる処理系は、わたしはこれしか知りません。
(Cのソースを吐き出す奴だけど)
http://www.kt.rim.or.jp/~qfwfq/rhiz-pi/index.html
UNIXなら、guileなんかが割と使えそうな感じなんですけどね……。
0106デフォルトの名無しさん
NGNGそれ下さい
0107103
NGNG仕事で使ってるので公開できない。
おれはコレ作るのに(片手間だが)2年費やしてる。
2年前はLISPなんてまったく知らんかったやつがだ。
キミもそれぐらい苦労すれば作れるだろう。
某スレでは1週間で作ってたやついたし。
0108デフォルトの名無しさん
NGNGhttp://pc.2ch.net/cdr/
0109デフォルトの名無しさん
NGNGhttp://natto.2ch.net/car/
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNGリスト、シンボル、整数、apply、eval、gcぐらいでいいんで。
0114CD-R??
NGNG0115デフォルトの名無しさん
NGNGパロディー版アスキーにBASICで書いたlispのソースがあります。
0116デフォルトの名無しさん
NGNG0117名無しさん@Emacs
NGNGttp://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
0118デフォルトの名無しさん
NGNG>小学4年生の時に作った、はじめての Lisp 処理系の名前が CAMPUS LIsP でした。
天才か?
と思ったら、読み間違えでした。
s/小学/大学生/
0119デフォルトの名無しさん
NGNG昔、アスキーから出てた「Cプログラムブック」の第3巻に
Will'O Lispってのが掲載されてた。
丸々一冊の本でLispインタプリタの最小実装をまず作って
それから少しづつ機能を増やしていくって構成だった。
MS-Cで書かれたたんだけど、それをX68K上で動かすように
いじくった憶えがある。
著者は小西弘一・清水剛
LinuxかFreeBSD用にリファインして再販キボンヌ。
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGください。
0122デフォルトの名無しさん
NGNGexeを作ってくれるわけじゃないんだっけ?
0123あげ
NGNG> Chez有償版
有償版では、作ってくれたような気がします。
0124デフォルトの名無しさん
NGNGスタンドアロンでEXEやDLL作るための情報、誰かお願いします。
0125デフォルトの名無しさん
NGNGwinならMSDN
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGbytecodeのレベルまでならgc気にしなくても書けるかな。
探索とかの生成が無いコードだとnativeにしても問題ないね。
0129デフォルトの名無しさん
NGNG一番厄介なのはEXEやDLLのヘッダ部分なんだけど。
MSDNに載ってる?
0130親切な人
NGNGヤフーオークションで、幻の人気商品、発見!!!
今は無き「コピーガードキャンセラー」↓
http://page3.auctions.yahoo.co.jp/jp/auction/c15158602
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0131デフォルトの名無しさん
NGNGMSDNに少しだけ載ってたような載っていないような・・
「Windows System Internal」か、そんな感じの名前の
本にPEファイルフォーマットについて詳しく載ってた。
今、手元にその本がないから詳細不明。
0132デフォルトの名無しさん
NGNGCとか、JavaとかC++みたいな言語と比較してね。
0133デフォルトの名無しさん
NGNGここや、「型無し言語逝って良し」スレとか。
0134デフォルトの名無しさん
NGNGemacsのマクロがかける。
0135デフォルトの名無しさん
NGNGC/C++やJavaだと書けないね。
0136デフォルトの名無しさん
NGNG0137Lisp って雲を描いてるみたい(括弧の事ね)。
NGNG使ってみりゃ分かるみたいな記述が多いですが、初心者には何に使えば良いのか分かりません。
色々読んで、C のマクロと同列に語ると失礼になると言う事は分かりましたが。
0138デフォルトの名無しさん
NGNG使ってみりゃわかる
0139デフォルトの名無しさん
NGNGとくべつ使う用途がないなら、ムリに使う必要ないよ。
0140デフォルトの名無しさん
NGNG知らずに使ってる場合が多い。
0141デフォルトの名無しさん
NGNGすべてマクロで作られてる可能性が高い。
実際、Cでいうところのenum列挙子やstruct/union,sizeofなんかは
マクロで書いた。
0142デフォルトの名無しさん
NGNGscanf() みたいな。
0143デフォルトの名無しさん
NGNGDrSchemeは知らんけど、SLIBにscanfそのものがあったと思う。
0144デフォルトの名無しさん
NGNGgetchとかは無いけど。
0145デフォルトの名無しさん
NGNGここの
X−COM:ALLIANCE
というコーナーに、面白い記事が載ってる。
「中でも一番の特徴は驚異的なAIである。タイプ的にはSWAT3の様なリアルタイム方式なのだ
が、簡単な命令で非常に複雑な行動を地形やシチュエーションに応じて自動的にやってのける能力を持
っているのも同じ。ただしもっとずっと頭が良いという事であり、これがE3のベストに選ばれた最大
の理由だった。AIの作成には世界でTOPクラスのマサチューセッツ工科大学のロボット班が協力してい
るそうで、感情パラメータ導入により人間的な振る舞いを見せてくれるとの事。発売されればPCゲーム
界に革命を起こすとまで言われている期待作である。」
0146デフォルトの名無しさん
NGNGなんの話?
0147デフォルトの名無しさん
NGNGCLOSになるという話を聞きましたが、PCLというのは
フリーなんでしょうか。
xyzzyにのせられる?そんな話題を聞いたこともないの
で無理なんでしょうが。
0148デフォルトの名無しさん
NGNG0149148
NGNGFreeで入手できるCLOSってあるんですか?
0150デフォルトの名無しさん
NGNGWIZARDRYの謎解きよりも難しいじゃん。
0151デフォルトの名無しさん
NGNG上手い
0152デフォルトの名無しさん
NGNGたしかrequireをちゃんと設定するんだと思われ
0153デフォルトの名無しさん
NGNGLisp FAQ
http://www.faqs.org/faqs/lisp-faq/
1. Introductory Matter and Bibliography of Introductions and References
2. General Questions
3. Common Programming Pitfalls
4. Lisp Implementations and Mailing Lists
5. Object-oriented Programming in Lisp
6. FTP Archives and Resources
7. Lisp Window Systems and GUIs
Scheme FAQ
http://www.faqs.org/faqs/scheme-faq/
Topics Covered (Part 1):
[1-0] What is the purpose of this newsgroup?
[1-2] What is the difference between Scheme and Common Lisp?
[1-3] Scheme books, introductions, documentation, periodicals,
journals, and conference proceedings.
[1-4] Where can I learn about implementing Scheme interpreters and
compilers?
[1-7] Standards for Scheme -- What are R4RS and IEEE P1178?
[1-8] How do I do object-oriented programming in Scheme?
[1-9] Repositories of Scheme Software
[1-10] Publicly Redistributable Scheme Software
[1-11] Formatting code in LaTeX (WEB and other literate programming tools)
[1-12] Where can I get an implementation of Prolog in Scheme?
[1-13] What does SICP, SCOOPS, R4RS, CAR, CDR, ... mean?
[1-14] Why is there no EVAL in Scheme?
[1-15] World-Wide Web (WWW) Resources
[1-16] Why is Scheme called 'Scheme'?
Topics Covered (Part 2):
[2-1] Free Scheme implementations.
[2-2] Commercial Scheme implementations.
[2-3] What Scheme-related discussion groups and mailing lists exist?
0154デフォルトの名無しさん
NGNGexite翻訳以下のところさえあるでしょう。
scheme faq 1-1
http://www.faqs.org/faqs/scheme-faq/part1/section-1.html
[1-0] このニュースグループ(comp.lang.scheme)は何ですか?
ニュースグループ「comp.lang.scheme」は、プログラミング言語Scheme に関係のある様々な話題について話すところです。たとえば、次のようなものがあるでしょう(これらに限定している訳ではありません)――
* Scheme に関する本や、その他のものの告知
* Scheme で書かれたプログラムやユーティリティに関する議論
* 移植性に関する問題点についての議論
* Scheme 処理系のバグについての質問
* 他アーキテクチャへ処理系を移植するときの問題点
投稿は Scheme コミュニティが興味を持つものにしてください。question [2-3] も参照のこと。
comp.lang.scheme は
ftp.cs.cmu.edu:/user/ai/pubs/news/comp.lang.scheme/
にアーカイブされています。更新は週単位です。
CommonLisp に関する質問は comp.lang.lisp で。
Lisp でのオブジェクト指向プログラミングについての議論は comp.lang.clos。
関数型プログラミング言語全般にわたるものは comp.lang.functional。
また、Scheme で AI のプログラミングをしている時は、comp.ai. にクロスポストすべきかもしれません。
0155デフォルトの名無しさん
NGNGWinだったら、解凍した後、環境変数SCHEME_LIBRARY_PATHにSLIBフォルダを
設定をして、開発環境に合わせた"〜.init"というファイルがSLIBフォルダに
入ってるので、そのファイルの中身を編集する。
編集の仕方はフォルダの場所の所を適切に変えて、software-typeをMS-DOSにする。
それで、そのinitファイルを開発環境からloadするとrequireが使えるようになる。
もしも開発環境がSCMだったら、はじめからSLIBを前提としてチューニングが
なされてるので、環境変数を設定するだけでいい。
あと、Dr.Schemeは初期化ファイルをSLIBとは別に既に用意してるので、
環境変数設定した後それを使ってもいい。ヘルプデスクで「SLIB」と検索すれば
使い方がわかる。
0156デフォルトの名無しさん
NGNG使ってると速さを感じないなあ。
Dr.SchemeやScheme48 for Winなんかと大差ないような気がする。
chezが一番速いような気がするんだけどどうかな?
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGこれはあのビット別冊の人ですかね。
0160デフォルトの名無しさん
NGNGLisp界隈では最大級の有名人だと思うけど。
0161デフォルトの名無しさん
NGNG自称当社の Guy L. Steel Jr.担当 です.
他社にも Steel担当者って結構居るらしいです.
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNGアマゾン japan で Scheme と入れて検索。
5件ヒット。
そのうち、4件は入手不可で、実質一つしか選択肢が無い。泣き笑
0165デフォルトの名無しさん
NGNG1.プログラミング言語SCHEME
R.ケント ディヴィグ (著), その他 単行本 (2000/05/01) ピアソン・エデュケーション
↑これね。今時めずらしい本、と思っていたら、他はほとんど入手不可なんだ...
(中略)
4.FD ソフトウェアライブラリ Scheme
湯浅 太
〜〜ふとしってだれだぁ? 太一せんせーか(笑)
0166デフォルトの名無しさん
NGNGは結構新しい本でしたよね……。
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG『入門SCHEME』は絶版らしい。
いまは著者のページで公開されてるよ。
0169デフォルトの名無しさん
NGNGほんとに。
0170デフォルトの名無しさん
NGNG高階関数 と 高階論理 の (類似性) を
誰か説明してくませんか?
0171デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1007387924/
もしかして、ここに書きたかった?
0172デフォルトの名無しさん
NGNG>>164
ここだともうちょっと増えます。
0173デフォルトの名無しさん
NGNGhttp://www.honya-town.co.jp/ で、↓サテライトトップページへ↓から
「Scheme」で検索。
0174ご
NGNG0175デフォルトの名無しさん
NGNGその後chezの存在を知り今に至る(藁
0176デフォルトの名無しさん
NGNGありがとうございます。
0177ご
NGNGふむー、chez ってマルチバイト文字対応はいかがですか?
0178not 175
NGNG_
↑うまくいきません。
> (display "あいうえお")
あいうえお>
↑これはプロンプト
>>177
7ビットで切ってあるという事は無いようですけど、Shift-jisの問題が……。
0179ご
NGNGありがとうございます。
そうですか、やはりマルチバイトは……
0180デフォルトの名無しさん
NGNG一応(display "表\表\表\表\")で回避。
0181デフォルトの名無しさん
NGNGそりゃちょっと厳しい。2バイト目が「\」の字なんて「表」以外知りませんから……。
工夫が必要か。
0182デフォルトの名無しさん
NGNGWirthの方が有名だし権威だろ。
比較の対象がちがってないか?
0183Steele <
NGNG「さよならファインマン」ちう本に写真が載ってて、
中央には椅子に座った、冗談物理学者のファインマン先生、
その横に立って談笑しているのは、数式処理ソフトMathematicaのウルフラム氏が、
背景には、シンキング・マシン社の超並列コンピュータ CM-1 (by ダニエル・ヒルズ)
が写っていた。従って、
ファインマン > ウルフラム > ダニエル・ヒルズ > Guy Steele
量子電磁気学 > 数式処理ソフト > 超並列機 > プログラム言語
なのは確か。
0184デフォルトの名無しさん
NGNG【オカルト】 λ..........トボトボ
http://curry.2ch.net/test/read.cgi/occult/1010105764/l50
0185デフォルトの名無しさん
NGNGSJIS駄目ならEUC使えば?
0187すたすた
NGNG括弧が激しく入れ子になるのをみてるとなんか forth のようなスタックマシンを連想します。
コンピュータサイエンス的に見て、この感覚って、あってます?
あんまり学問の人じゃないんで、感覚で、としか言えないんですが…
0188名無しさん@Emacs
NGNGアスキーの青い本は Info で読める elisp-manual を訳しただけのものだって
読んだ気がするけど本当?買おうにも近くの本屋に置いてないし。
Info で読めるなら買うの迷うんだけど。
0189デフォルトの名無しさん
NGNGあってません。
0190デフォルトの名無しさん
NGNGあれはFSFへの募金と思って購入するものです。
0191デフォルトの名無しさん
NGNG訳分かんね…
0192名無しさん@Emacs
NGNGということはやっぱり elisp-manual と中身はいっしょなんですね?
日本語版読んだけどあんまり分からないから買うのやめよかな(w
とりあえず立読みするために本屋探します。
0193192
NGNGんだけど Info 見てもそれらしいのがないな。どの辺にある?
0194すたすた
NGNGそうでしたか。
なんとなくスタックにリストが積まれていってるような気がしたものですから。
0195デフォルトの名無しさん
NGNGLispでいうリストは連結リスト(linked list)ですから、
スタックには積みません。
car、cdr、consの仕組みを学べば、すぐにわかることです
(というかLispの基本中の基本です)。
0196デフォルトの名無しさん
NGNG何をしたいの? カーソルを一番内側のかっこの先頭に移動させたいとか?
あるいは、カーソルの直前にある閉じかっこに対応するかっこの先頭に移動したいとか?
いずれにせよ、search-backword-regexpを使えば一発だと思えますが。
0198デフォルトの名無しさん
NGNG> Wirthの方が有名だってことだよ。
> それ以外のことは云ってないぞ。
比較の対象(>>182)違わないでしょ。
プログラミング言語の実際的なことが中心の人でしょ、両方。
Oberonのタイプシステムの研究に相当するようなやや理論的なこと、Steeleはやってないけど。
それにWirthが圧倒的により有名なのは、昔の話でしょ。
0199デフォルトの名無しさん
NGNG>カーソルの直前にある閉じかっこに対応するかっこの先頭に移動したい
って isearch-backward-regexp(?) でできます?
0200デフォルトの名無しさん
NGNGリストを構成する要素の順番を逆転してみれば、
>194 の感覚もあながち完全な間違いとはいえないかもね。
でもそれはすでに lisp とはいわないかも。
0201デフォルトの名無しさん
NGNGbackward-sexp でどう?
0202デフォルトの名無しさん
NGNGlinked listがメモリ上でどう表現されるか知っててそういう発言?
0203デフォルトの名無しさん
NGNGそんな君に
http://www.acm.org/awards/taward.html
0204アホにアホレス
NGNGfeynman が死んだのは 1988年。
mathematica が世に出たのも同じ頃。
wolfram が feynman と談笑してたのは mathematica がすごいのでなく
wolfram がすごかったからです。
参考URI:
http://www.apple.co.jp/solution/education/hed/success/mathmobile/
0205デフォルトの名無しさん
NGNGスタックって双方向リンクリストで実現できるかなーと。
0206デフォルトの名無しさん
NGNGスタックってFILOでしょ。トップ以外をポイントできないじゃんよ。
リストは任意の要素をポイントできるでしょ?
0207デフォルトの名無しさん
NGNG双方向でなくてもええんちゃう?
ちなみにスタック2つあれば、リストも表現できるよ。
0208デフォルトの名無しさん
NGNGcommon lispに移植してください。
おながいします。
0209ついでにイタチ買いレス
NGNGWolframってCaltechだったんだー。ひょっとして
Feynmanのアドバイジーなんじゃないの?
Hillsは、たしか「さようなら[...]」にFeynmanが
TMIに首突っ込んだ話をHills自身が書いてた気がする。
まぁ、183はアホだけど。
0210デフォルトの名無しさん
NGNGputpropって何?つーかどのlisp?
put/getみたいなもん?
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG>>210
Lisp1.5です。
http://www.hucom.tp.titech.ac.jp/class/lisp/4th.html
にあった、
(defun putprop (var value attribute)
(setf (get var attribute) value))
をコピペして解決したふりしました。
0213デフォルトの名無しさん
NGNGs/電磁気/麻雀/
0214デフォルトの名無しさん
NGNGなかなかよいので age
http://www.shiro.dreamhost.com/scheme/gauche/index-j.html
0215デフォルトの名無しさん
NGNGえ? pushとpopしかできないのがスタックなんじゃないの?
0217デフォルトの名無しさん
NGNGcatは標準入力を標準出力に書き出すコマンドでしょ?
Unicode対応もクソもないと思うのだが。
0218デフォルトの名無しさん
NGNGcatならCで作った方がいいだろ。
0219216
NGNG> (cat "hoge.txt") ;; hoge.txt は Unicode ファイル
やはり、open()で :external-format とか指定するのかな?
0220216
NGNG(defun cat (fname)
(let
((istream (open (make-pathname :name fname)
:direction :input
:if-does-not-exist nil)))
(when istream
(do
((line (read-line istream nil 'eof) (read-line istream nil 'eof)))
((eql line 'eof) t)
(format t "~A~%" line)
)
(close istream)
)
)
)
0221デフォルトの名無しさん
NGNG特に一時変数作るのに(let((..)))や((lambda(..)))とか記述量が多い。
なんとかしてくらさい。
0222デフォルトの名無しさん
NGNG気のせいれす。
0223デフォルトの名無しさん
NGNG(var 変数1 値1
var 変数2 値2
...
式1
var 変数3 値3
式2
...
)
展開するとこんな感じになるやつ
(let* ((変数1 値1)(変数2 値2))
式1 ;式1は変数1〜2が使える
(let ((変数3 値3))
式2)) ;式2は変数1〜3が使える
最初のvar以降はキーワード。
varが置かれた場所は以下の書式が適用される。
var <変数名> <初期化式>
C++の様に、varはブロックの途中からでも変数宣言できる。
0224デフォルトの名無しさん
NGNGアセンブラのSP+nとかBP+nの様なことだと思われ。
0225デフォルトの名無しさん
NGNG(try
<try-sequence>
finally
<finally-sequence>)
↓
(unwind-protect
(begin try-sequence...)
(begin finally-sequence))
みたいなのもあるといいな
これぐらいはすぐ組めそうだけど。
0226デフォルトの名無しさん
NGNGいつのまにかデータ構造の話になっているようだけど。
最初に >187 が受けた印象や >200 の逝っていることは、
リストの評価はは主記憶に保持されている各リストたちへのポインタを
スタック push, pop しながら進行する、ということなのだとオモワレ。
リストへのポインタを push, pop しながら動作するスタックマシン、これでいいんじゃないの?
あと、>211 が逝ってる(そして >215 が突っ込んで >224 がフォローしてる)スタックはアセンブラレベルで見ての話ね。
C 言語の関数呼び出しのときなんか、引数+戻り先PCをひとまとまりでかんがえたら >215 が正しくて(そしてスタックの定義から言えばこちらが正しい)、
積まれた複数の引数のそれぞれにアクセスする必要があることを考えれば >211 が正しい。
Lisp に関係ないので sage。
0227デフォルトの名無しさん
NGNG頭の体操がてらに作ってみた。schemeだけど。
(連続let->let*変換はしてない。)
(define (var-expand l)
(if (and (pair? (cdr l)) (symbol? (cadr l)) (pair? (cddr l)))
`(let ((,(cadr l) ,(caddr l))) ,@(var-sequence-expand (cdddr l)))
(error "syntax : var <name> <value>" l)))
(define (var-sequence-expand l)
(let loop ((x l) (r '()))
(if (pair? x)
(if (eq? (car x) 'var)
(append (reverse r) (list (var-expand x)))
(loop (cdr x) (cons (car x) r)))
(reverse r))))
(define-macro (var . l)
(var-expand (cons 'var l)))
0228デフォルトの名無しさん
NGNG;test
(var putl (lambda l (for-each display l) (newline) #t)
var a 1 (putl a)
var b 2 (putl b)
var c 3 (putl c)
(putl (+ a b c))
var d (+ a b c)
d
)
1
2
3
6
=>6
0229デフォルトの名無しさん
NGNG(let ((putl (lambda l (for-each display l) (newline) #t)))
(let ((a 1))
(putl a)
(let ((b 2))
(putl b)
(let ((c 3))
(putl c)
(putl (+ a b c))
(let ((d (+ a b c))) d)))))
0230デフォルトの名無しさん
NGNGコンソールはUnicodeを表示できるコンソールなの?
僕の知る限り、Unicodeを表示できるコンソールって、
Mule-UCSをインストールしたEmacsのShellモードくらい
なのだけれど。
0231デフォルトの名無しさん
NGNGコンソールとは限らないだろ
0232216
NGNGUNICODE から MBCS への変換関数とか知らないですか?
もしないなら、バイナリオープンして自前で実装するしかないのかな >> 230, 231
0233216
NGNGCで言うところの fgetws() と wctomb() みたいたもの LISP にないかな?
0234デフォルトの名無しさん
NGNG(define (try-expand l)
(let loop ((x l) (r '()))
(if (pair? x)
(if (eq? (car x) 'finally)
`(unwind-protect (begin ,@(reverse r)) (begin ,@(cdr x)))
(loop (cdr x) (cons (car x) r)))
(error "syntax : try [<try-sequence>] finally [<finally-sequence>]" l)
)))
(define-macro (try . l)
(try-expand l))
0235デフォルトの名無しさん
NGNGだからさ、8bitストリームを読み込んで8bitストリームに書き出せば
いいだけじゃないの? catなんでしょ?
文字単位で何かの処理をするわけじゃないんだから、wcstomb()なんか
何に使うのよ。
0236デフォルトの名無しさん
NGNGいよいよwcstomb()なんか要らないと思うけど。
0237216
NGNGそれから 8bitストリームにしても Unicode 文字を出力するわけだから
プリント関数自体が ワイドバージョンじゃないとまずいじゃないの? >> 235
0238デフォルトの名無しさん
NGNG(define (var-expand l)
(let loop ((x l)(a '()))
(if (and (pair? x) (eq? (car x) 'var))
(if (and (pair? (cdr x)) (symbol? (cadr x)) (pair? (cddr x)))
(loop (cdddr x) (cons (list (cadr x) (caddr x)) a))
(error "syntax : var <name> <value>" l))
`(,(if (pair? (cdr a)) 'let* 'let) ,(reverse a) ,@(var-sequence-expand x))
)))
0239デフォルトの名無しさん
NGNG(let* ((putl (lambda l (for-each display l) (newline) #t))
(a 1))
(putl a)
(let ((b 2))
(putl b)
(let ((c 3))
(putl c)
(putl (+ a b c))
(let ((d (+ a b c))) d))))
0240223
NGNGホントに作ってくれる人が現れるとは...
感謝!
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG=>
の使い方をおしえてください
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNGあまりの訳の下手さに絶句した。
あのクソ訳に4000円も払う「まぬけX」「金持ちO」がいると考えると「笑えてX」「畏敬の念が湧き上がってきたO」
気の利いた大学生の方がもっとよっぽど良い訳をすると思われ。
少なくとも、あのレベルでは、翻訳事務所のトライアルも通らないのは確実。
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG(var fp (fopen filename mode)
(and fp
(try (proc fp)
finally (fclose fp)))))
悪くないかも
0247デフォルトの名無しさん
NGNGでも技術系の翻訳って難しいよね.日本語として流暢な訳にしてしまうと,
「原文とは違う表現だ,これは誤訳だ」と言って騒ぐ人も多いし.
一字一句逐語的につき合わせができないと,訳が間違ってると思ってるみたい.
もともとそんなことできないのに,違う言語なんだから.
0248デフォルトの名無しさん
NGNG原書で読めってことだね。
0249デフォルトの名無しさん
NGNGI am MANUKE! HA!(T_T)
0250249
NGNGa MANUKE
0251デフォルトの名無しさん
NGNG何が問題なのかわからないので、自分でもCLISPをインストールしてみるわ。
# プリント関数がワイドバージョンじゃないと困るとはまったく思えないん
# だけどね。
0252デフォルトの名無しさん
NGNG意味がよくわからない所は原文にあたると
すんなりわかったりする.
かといって全部原文で読むよりはやはり日本語の方が
わかりやすいんだよな.
0253デフォルトの名無しさん
NGNG(define (max-value lst)
(do ((max-v 0)
(cur-v 0))
((null? lst) max-v)
(set! cur-v (car lst))
(if (and (number? cur-v) (> cur-v max-v))
(set! max-v cur-v))
(set! lst (cdr lst))))
0254デフォルトの名無しさん
NGNGlispは使ったことあんま無いけど、それって
(length lst)が2なら大きい方を返す
じゃなかったら (car lst) と (max-value (cdr lst)) の大きいほうを返す
の再帰で短くなんない?
0255デフォルトの名無しさん
NGNG(define (max-value lst)
(case (length lst)
((0) 0)
((1) (first lst))
((2) (max (first lst) (second lst)))
(else (max (first lst) (max-value (cdr lst))))))
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG与えられたリストが空の場合、0が帰るのでいいの?
候補がないんだから、最大値は得られるべきではないのでは?
0258デフォルトの名無しさん
NGNGCでcatを実装するとして、ワイド文字が必要とか思ってたりしませんよね?
0259デフォルトの名無しさん
NGNGcat だからね。 wc じゃないからね。
単純にバイトごとに読んで書く、これでいいんじゃないの?
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGバイナリ拾ってくれば?
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGただ、cygwin上では改行コードのところで動作がおかしい。
UCS-2の場合、CRは\0\r、LFは\0\nになるんで、そこがダメだ。
cygwinの場合、改行コードの扱いをUNIX互換にするために操作するので、
そこでうまくいかなくなる。UTF-8なら、期待通り問題はない。
でも、この問題はcygwin特有の問題だよな。
バイナリストリームを利用すれば問題ないよ。
ちなみにformatではなくwrite-lineを使った。
0264デフォルトの名無しさん
NGNGCLISPの拡張機能で文字のエンコーディングや改行コード問題は全然解決できるわ。
UCS-2からSHIFT-JISの変換とか、最初から持ってるじゃん。
0265デフォルトの名無しさん
NGNG(cygwinじゃない)windowsバイナリあるみたいだけど。
0266デフォルトの名無しさん
NGNG(cat "hoge.txt")
としたら、hoge.txtの中身を画面に表示する機能がほしいんだと思うんだ。
でもって、通常、画面表示を担当しているコンソールはSHIFT-JISなり、
EUC-JPなりじゃないと表示できない。だからUCS-2なファイルだったら、
変換しないと文字化けしたり、エラーになったりする。
で、以下がそれなりの答え。めちゃめちゃ効率悪いですが、とりあえず
動きはします。Common Lispを触ったの今日が始めてので許してちょ。
(defun cat (fname)
(let
((istream (open (make-pathname :name fname)
:direction :input
:element-type 'unsigned-byte
:if-does-not-exist nil))
(byte-list '())
(iencoding (ext:make-encoding :charset "UCS-2"))
(oencoding (ext:make-encoding :charset "SHIFT-JIS")))
(when istream
(do
((byte (read-byte istream nil 'eof)
(read-byte istream nil 'eof)))
((eql byte 'eof) t)
(setq byte-list (cons byte byte-list)))
(close istream))
(mapcar
#'(lambda (x) (princ (coerce x 'character)))
(coerce (ext:convert-string-to-bytes
(ext:convert-string-from-bytes
(coerce (reverse byte-list) 'vector)
iencoding)
oencoding) 'list))
))
0267216
NGNG疑問なんだが、C で Win32 API で WriteConsoleW()で UNICODE 文字を引数に
してきちんと出力できるのは API 内で UCS-2 -> S-JIS 変換してるのかな?
0268デフォルトの名無しさん
NGNGWin の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?
あったら教えて下さい。
0269デフォルトの名無しさん
NGNGChez&EUC
0270デフォルトの名無しさん
NGNGありがとう、っておい!
# 御免なさい。つい興奮してしまいました。
# Win/Scheme のお手軽日本語環境なんぞ無いって事で良いですか?
0271デフォルトの名無しさん
NGNGKawaはどうですか?
0272デフォルトの名無しさん
NGNGありがとうございます。
Java VM で Unicode が使えるという事ですよね。
今 ftp からゲット中です。
;; Gauche が Cygwin で使えたら・・・
0273デフォルトの名無しさん
NGNG> ;; Gauche が Cygwin で使えたら・・・
同意………
今後に期待age
0274デフォルトの名無しさん
NGNG>;; Gauche が Cygwin で使えたら・・・
でもさ、無理やりコンパイルすればつかえるようにならないかな?
gcの辺りがネックっぽいね。
暇ができたら試してみるよ。
0275デフォルトの名無しさん
NGNGkawaいいかもね
0276デフォルトの名無しさん
NGNGcat っていうのは文字コードとは関係ないものですよね.
ファイルのバイナリのシーケンスをただ標準出力にはき出すだけの.
0277デフォルトの名無しさん
NGNG同意。>>266はcatではなく、display-fileとでもすべきだね。
ついでにエンコーディングは引数として与えるべき。
(display-file "hoge" (ext:make-encoding :charset "UCS-2"))
こんな感じに使うわけよ。エンコーディングを省略したときは、
デフォルトとして変数display-file-default-encodingの値を参照する
としておけば、
(setq display-file-default (ext:make-encoding :charset "UCS-2"))
としてから、
(display-file "hoge.txt")
みたいに使えるから。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGリアルタイムで表示されない。
0280デフォルトの名無しさん
NGNGそうなんだよね。
対話的に使いたいときはGUI版を使いなさい。
コンソール版はファイルに書いたコードを実行するときに使うなり。
0281デフォルトの名無しさん
NGNG0282デフォルトの名無しさん
NGNGconfigure, make, make install だけで何やらちゃんと動いている模様。
DOS 窓から直接日本語の入力は出来なかった。
make test しなかったけど、とりあえずと言う事で。
0283デフォルトの名無しさん
NGNG・・・まぁ使えるんなら出自などどーでも良いのかも知れソが
やや鬱
0284デフォルトの名無しさん
NGNGNT系OSなら日本語入力できるんじゃない?
0285デフォルトの名無しさん
NGNGclispが日本語つかえるんだったら、
pseudo-scheme試してみるとか。
・・・まどろっこしすぎるか。
0286デフォルトの名無しさん
NGNGほらそこ!negativeな発言すんな!(w
つくりが単純なのは十分なメリットだぞ
0287268, 282, etc.
NGNGMe なんですよ。Linux 入れようかなと思っていた所でした。
>>285
とりあえずファイルに書いたコードを実行する分には日本語が使える
ようになったので、しばらくこれで逝きます。
(display "表表表表") も OK でした(当然か・・・)。
実はこれが初めての Scheme です。
0288デフォルトの名無しさん
NGNG値なし?
強引に宣言するなら、
int foo = 1;
symbol bar;
ってことなのかな・・・。
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG> Lisp = 某開発者の気まぐれ言語
当時はFORTRANのリスト処理ライブラリがたくさんあった。
Lispの源はその中の一つで、他のライブラリの影響も受けて発展した。
一人の気まぐれじゃないよ。
0291デフォルトの名無しさん
NGNGLisp と C++ とアセンブラぜんぶてばなせない。
まぁアセンブラはいいとして Lisp と C++ ケコーンしたプログラム書きたい。
Gauche てのはいいですか?
0292290
NGNGsource取得してexampleでも見てね。
Debianなら、apt-get install swig-examples libguile6-devだな。
0293デフォルトの名無しさん
NGNG> なんで御指名なんか分からんが、
なんとなく(笑
Debian なんで、apt-get します。
0295デフォルトの名無しさん
NGNGどうもコンソールがCP932対応と決めうちされている。
日本語版のVisualC++かBCCでコンパイルしたバイナリ
があればいいんだが……。
# cygwinでソースからコンパイルしたので間に合ってはいるけれど。
# 他人に勧めるのはバイナリ版のが楽なんだがなあ。
0296デフォルトの名無しさん
NGNGCommon Lispが良いならCMUCL
http://www.pmsf.de/pmai/MaiSQL.html
他に
XEmacs http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/lisp.html
Guile http://www.google.co.jp/search?hl=ja&q=PostgreSQL+Guile&lr=
0297290
NGNG> なんとなく(笑
あっそ。ま、俺もC++マンセーなんでいいや。
>>294
Debian使いですか(w
http://ww.telent.net/cliki/Debianにあるapt-lineを入れて、
apt-get intall uncommonsql-postgresql
0298デフォルトの名無しさん
NGNGCygwin で guile の make に成功している人がいました。
patch も公開して下さっているようです。
0299デフォルトの名無しさん
NGNG>tarball の解凍でエラー; and-let*.scm というファイル
>(アスタリスクを持ったファイル) を含むため。
これって何とかならんのかね。
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG>>(アスタリスクを持ったファイル) を含むため。
>
>これって何とかならんのかね。
既に,CVSの方ではand-let-star.scmになってたと思う.
次のリリースくらいには直ってるんじゃない?
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGそのときの状態をファイルに書き出しておいて、次回起動したら
そのファイルを読みこんで高速に復帰できるという意味です。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNGところでこれって単体で GUI は作れないのでしょうか?
0307デフォルトの名無しさん
NGNGsmalltalk の image ファイルみたいなのかな?
Python で言うと pickle 見たいな関数が欲しいんだよね??
0308デフォルトの名無しさん
NGNGbitで連載してたころからもう15年近くたってるんだけど…。
0309デフォルトの名無しさん
NGNGというか、そもそも作れんの?
0310デフォルトの名無しさん
NGNGGPLに汚染されるのでは……。
0311デフォルトの名無しさん
NGNGそういう話ではないのでは…。
0312303
NGNGtranscriptみたいのじゃなくて、
Object指向で言う、シリアライズや永続化インスタンスの様なものです。
多分>>307さんの言ってるイメージが正しいと思います。
あったら面白い運用ができそうな気がするんですが。
0313デフォルトの名無しさん
NGNGCLISPの場合、saveinitmem関数でメモリイメージを保存できる。
http://clisp.cons.org/impnotes.html#image
で、起動時に-Mオプションでメモリイメージを保存したファイルを
指定する。
たぶん、これで期待通りだと思うけど。
0314303
NGNGまさにそれです。
ありがとうございます。
0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG(んが とっ と)
0319デフォルトの名無しさん
NGNGこれ?
((lambda (x)
(list x (list (quote quote) x)))
(quote
(lambda (x)
(list x (list (quote quote) x)))))
0320デフォルトの名無しさん
NGNG'λだと2バイトだし。
0321デフォルトの名無しさん
NGNGマクロ定義一発でわ。
0322デフォルトの名無しさん
NGNGいや、それはそうなんだけど
quoteの'みたいな、しっくりくる略記号ないかなと。
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG\
0326デフォルトの名無しさん
NGNGSchemeでは大文字のシンボルを使う慣習はないし。
0327デフォルトの名無しさん
NGNG大文字小文字区別されないんじゃなかった?
guileはそうでもないみたいだけど
lはすでにlistの変数名で良く使うし
0328デフォルトの名無しさん
NGNG=>(1 2 3)
0329デフォルトの名無しさん
NGNG(list 1 2 3)
=>(1 2 3)
と
((lambda x x) 1 2 3)
=>(1 2 3)
と
'(1 2 3)
=>(1 2 3)
は何が違うのでしょうか
0330デフォルトの名無しさん
NGNG値という意味なら同じだけど、評価のステップ数?という意味ならちがうかも。
0331デフォルトの名無しさん
NGNGそれだ、自作のschemeに組み込んだけど、確かに起動はめちゃめちゃ
速くなる。これはgc使う処理系にはお勧めかも。
イメージをEXEに結合すればそのまま配布もできそうだしね。
だけど、単純な状態退避/復帰だけでは色々な問題が発生するんだよ。
ファイルや、gcで管理されてないメモリなどの外部リソースのことをちゃんと
考えてやらんと・・・。
suspend前に外部リソース用の復帰用関数を登録して、
resume直後に呼び出す様にして解決したけど。結構しんどいかも。
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGlist関数は、各要素を評価した上でリストの要素とする場合に使うよね。
(list
(car '(1 2 3))
(car (car '(1 2 3)))
(car (car (car '(1 2 3)))))
0334デフォルトの名無しさん
NGNGconsのcdrはループに出来たんだけど、carがなあ・・
0335デフォルトの名無しさん
NGNGGUI が気軽に作ればもっと良いんだけど。
0336名無しさん@Emacs
NGNGテキスト処理向きのscheme処理系は何ですか?
0337デフォルトの名無しさん
NGNG作成されたそうです。
Guile でも正規表現は扱えたと思います。
日本語が扱える、大抵の Scheme なら可能なのではないでしょうか。
あとはプラットフォーム等の、別の要件によると思います。
0338名無しさん@Emacs
NGNGGuileに正規表現あったんですね。regexpさえあれが満足なんです。
参考にした邦訳が古かったのかな。
http://www.kt.rim.or.jp/~kbk/guile/guile_toc.html
>>337 さん どうもありがとうございました。
0339デフォルトの名無しさん
NGNGguile は使った事が無いのですが、ここには
>Guile は正規表現によるパターンマッチングをサポートしている
と書いてありました。
http://www.unixuser.org/~euske/doc/scm-sd7/
0340名無しさん@Emacs
NGNGしかし、作業がはかどりません。
Emacs Lisp の lisp-interaction-mode や describe-function の
ようなものはありませんか? あとシンボル名補間もほしい。
0341デフォルトの名無しさん
NGNGEmacsでやってた作業なら、そのままEmacsでやりゃいいじゃん
つーか
>lisp-interaction-mode や describe-function
って何?知らん奴は無視か?
0342デフォルトの名無しさん
NGNGただ、対話性や補完がどの程度あるのか疑問。
0343デフォルトの名無しさん
NGNG対話性:標準入出力以外無し。コマンドをS式で用意してる処理系はあるだろうけど。
補完:無し。
guileはreadline組み込んでるんじゃなかった?
bash程度の補完機能は望めるかと。
0344デフォルトの名無しさん
NGNGLispMachineみたいなシステム作るんだって逝ってたんだから、
Emacs位は LispMachineやInterLisp並の便利環境 (VBぽいかも)
を揃えて下さい>>rms方面
0345デフォルトの名無しさん
NGNG(setq scheme-program-name "guile")
して M-x run-scheme するといいよ.
0346デフォルトの名無しさん
NGNG実際それで困ることってあるかな
0347デフォルトの名無しさん
NGNG~/.guile にこう書いています。
補完は tab でしてくれるようです。
(use-modules (ice-9 readline))
(activate-readline)
http://tanaka-www.cs.titech.ac.jp/%7Eeuske/scm/SD0007/index.html
guile の他に regex と readline が必要でした。
0348デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNGguile> (begin (write (version))
... (newline))
"1.7.0"
guile>
去年の夏にCVSから取て来たまま。いまどこまで行ってるか確認したらまた来ます。
0351デフォルトの名無しさん
NGNGカコイイ
0352名無しさん@Emacs
NGNGhttp://prdownloads.sourceforge.net/gemacs/emacs-guile-0.2.tar.gz
西田さんが作った emacs-guile です。 Guile Emacs ではありません。
scheme-interaction-mode が (・∀・)イイ!!
guile-scheme-mode では M-Tab で補間も効く、これすごすぎ。
0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNGスレ違いの上に、googleあたりで検索すれば一発の質問だな。
0355デフォルトの名無しさん
NGNG君には無理だ YO!!
0356名無しさん@XEmacs
NGNGMeadowかXEmacsだな。http://www.xemacs.org
0357デフォルトの名無しさん
NGNG(・∀・)イイ!!
0358名無しさん@Emacs
NGNG多言語化された scheme ってありますか?
0359デフォルトの名無しさん
NGNG多言語化って何?
unicode使えたら多言語化っていうの?
0360デフォルトの名無しさん
NGNGunicodeと多言語化は、近似値としてはイーコールだろ?
unicode1.0に欠点は多くあるが、unicocdeは存在すること自体に意義がある
気に入らないなら、自分で作れ
0361デフォルトの名無しさん
NGNG多言語化ってのは色々な意味があるよな。
localeに対応してエラーメッセージが変化するとかな。
Unicodeが使えればいいなら、Kawaがあるし、
Gaucheなんかも英語と日本語に対応しているから多言語ではあるね。
マルチバイト文字を文字として認識するかどうかって話をしてるんなら、
この辺がそうだよ。
0362名無しさん@Emacs
NGNG多言語化、言われてみれば曖昧な質問でした。
私が考えていたのは。
正規表現で
"あ.い+う*"
文字定数として
#\あ
が、理想です。
別に同等のことができれば、満足です。
0363デフォルトの名無しさん
NGNGGauche
0364名無しさん@Emacs
NGNG> guileって1.4から上がった?
>>350
"1.7.0"
本当? 今日のスナップショット見たら、1.5.4だった。
NEWS によると、これからはLinux的Version番号らしく、
奇数の1.5.4は開発版。安定版は偶数の1.4らしい。
0365350
NGNG/..(snip)../src/guile-core.unstable-20010824
maru@lahaina$ grep VERSION GUILE-VERSION
GUILE_MAJOR_VERSION=1
GUILE_MINOR_VERSION=7
GUILE_MICRO_VERSION=0
GUILE_VERSION=${GUILE_MAJOR_VERSION}
GUILE_VERSION=${GUILE_VERSION}.${GUILE_MINOR_VERSION}
GUILE_VERSION=${GUILE_VERSION}.${GUILE_MICRO_VERSION}
VERSION=${GUILE_VERSION}
$
こんな感じでした。unstable は自己責任で使うということで。
個人的には guile-hobbit の近況が知りたい也。
0366sage
NGNG0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNGhttp://www.csl.sony.co.jp/person/masui/papers/JSSSTDmacro/dmacro.el
0369デフォルトの名無しさん
NGNG文字列を対象としたものでは無理でしょう。
SICP の 4 章の、非決定性計算を参照すると良いと思います。
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNGLispはかじったことがあったけど、微妙に構文が違うんだね。
さて、遊んでみよう。
0372デフォルトの名無しさん
NGNGnewlisp っていうのがあるが、どうよ。
http://www.newlisp.org/
0373デフォルトの名無しさん
NGNG一応。
ちゃんとFull Schemeに設定しましたか?
Language->Choose Language
0374デフォルトの名無しさん
NGNG中途半端な処理系ばっかりではないか。
もっと団結して一つの処理系とその開発環境をつくって欲しいと願うものであるがいかがよ?
0375デフォルトの名無しさん
NGNGお前は何系ですか?
0376デフォルトの名無しさん
NGNG作られるってのはあるよな。
でも、Common LISPの制定作業は「団結して一つの処理系」を作
る作業だったと思うけどね。
開発環境にしたって、金を出せば相当なものが手に入るし。
C言語において「団結して一つの処理系とその開発環境」が
つくられたことってあるのかね、フリーなもので。
# GNU Stepはいつまでたっても完成しないし、
# GNOMEやKDEあたりも、まだまだでしょう。
0377デフォルトの名無しさん
NGNGEmacsはしっかりした処理系・開発環境だと思われ。
Schemeじゃないけどね。
0378デフォルトの名無しさん
NGNGしかも過去の elisp を全て利用できる
emacs 使ってくれ.
0379デフォルトの名無しさん
NGNG0380名無しさん@Emacs
NGNGが違うんですか?
0381名無しさん@Emacs
NGNG> 誰かマルチスレッドで scheme 実装,
> しかも過去の elisp を全て利用できる emacs
Guile はマルチスレッド対応しているようだし、
Guile Emacs は elisp が動作することが前提なので。
Guile Emacs か?
0382デフォルトの名無しさん
NGNGelispと比較したときのschemeの最大のアドバンテージは、
俺にとってはレキシカルスコーピングだってところだなあ。
elispは名前空間の汚染を避けるためにパッケージ名を変
数名のprefixにしないと仕方ないので、ついつい変数名が
長くなる。その点、schemeはレキシカルスコーピングだか
ら、安心してローカル変数に短い名前を使える。
そこがイイ。
あと末尾再帰を繰り返しとして評価してくれるところか。
elispの場合、本質的には再帰で書ける処理を、実用上の
理由からループで書かないといけないことがあるのがダサ
い。これがschemeだと末尾再帰を繰り返しに最適化して
くれるので、そこもイイ。
0383デフォルトの名無しさん
NGNGscheme の方が自然にできるのがいいね.
cl 使えばいろいろ便利にはなるけど.
変数と関数を変に区別しない方が
いろいろすっきり書けるような気がする.
0385デフォルトの名無しさん
NGNG「ここで継続があれば一撃なのに!」とか感じるようになった。
elispに○○がほしい、と思ったことはあまりなかった。
それもそうだ。どんな強力なアイデアでも、その存在を
知らなければ、「この機能が足りない」と考えるわけない。
0386名無しさん@Emacs
NGNG> elispは名前空間の汚染を避けるためにパッケージ名を変
> 数名のprefixにしないと仕方ないので、ついつい変数名が
> 長くなる。その点、schemeはレキシカルスコーピングだか
> ら、安心してローカル変数に短い名前を使える。
間違っていますよ。
0387デフォルトの名無しさん
NGNGえ? elispってダイナミックスコーピングじゃなかったっけ?
0388デフォルトの名無しさん
NGNG前を使えないってことになならないんじゃない?
0389デフォルトの名無しさん
NGNGダイナミックスコーピングの場合、
ある関数の中から、その関数で定義したローカル変数を
破壊するような別の関数を呼ぶことが可能じゃない?
0390デフォルトの名無しさん
NGNGそれはダイナミックスコーピングなんだから当然。
でも、elispでのプログラミングスタイルでは一時変数を使う場合は必ずletで
束縛してから使うということになってる(バイトコンパイラも警告を出す)から
他の関数を呼び出す際もローカル変数を破壊しないと期待していい。
あくまでもお約束でしかないけど、Emacsの標準ライブラリもそれを前提に短
い名前使いまくりで書かれてるわけだし。
0391名無しさん@Emacs
NGNG>>389
なるほど、そういうことですか。
そんな弊害は気が付きませんでした。
しかし、この問題を避けるために局所変数にまでパッケージ名の
prefix を付けるとは完璧主義者ですね。
0392デフォルトの名無しさん
NGNGそっか。警告出してくれるんだ。
ダイナミックスコーピングだって話を知った瞬間から
警戒しまくってたよ。thanx。
0393デフォルトの名無しさん
NGNGダイナミックスコーピングであることを利用しているパッケージが
存在するってことなのかなー。
0394デフォルトの名無しさん
NGNG警告を出すのはあくまでもバイトコンパイラであって、評価時ではないので気
をつけてね。あと、elintなんてパッケージもあるです。
>>393
(let ((global-variable 'hoge))
(hokano-kansuu))
みたいなのは多用されてる。
0395デフォルトの名無しさん
NGNGelispのletって、schemeのfluid-letみたいなやつだっけ?
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGって、これ何?誤爆?
0398デフォルトの名無しさん
NGNGダイナミックスコーピングなんでletはSchemeのfluid-letと同じだと思う。
一つのletでグローバル変数とローカル変数を同時に束縛したりすることも
多いから、そのままレキシカルスコーピングに移行するわけにもいかないのかも。
lexical-letとか新しいspecial formを用意すればいいのかな。
0399デフォルトの名無しさん
NGNGご苦労さま
0400デフォルトの名無しさん
NGNG処理系と仕様を勘違いしている、と一応つっこんでおく。
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNG>fluid
0403デフォルトの名無しさん
NGNG知らんかった。thanx。
レキシカルスコーピングな defun は無いのかなあ。
0404名無しさん@Emacs
NGNG(define x '#(1))
てして、長さ1のベクタへ x をバインドしておきながら、
(set! x '#(1 2))
どうして、そこに長さ2のベクタを代入できるんだ?
その点 string-set! は納得がいく。
0405デフォルトの名無しさん
NGNG(define x "hoge")
して、長さ4の文字列に
(set! x "hogehoge")
できるでしょ。
中身を書き換えるのは
vector-set!
0406名無しさん@Emacs
NGNG挙げ足とりですが、scheme では コンスセル は ペア というらしいです。
(define x "hoge")
(set! x "hogehoge")
これができるということは、私としては set! は代入ではなくて、
バインドしているようにしか思えないです。
なんで、4文字しか確保してないのに、8文字も入ちゃうの?
そうか、バインドかー。って感じです。
でも、バインドじゃーないんですよねー。set! は代入なのです。
私の感覚と scheme の相性が悪いのでしょう。
みなさんは scheme を勉強した時、すぐに腑に落ちました?
0408デフォルトの名無しさん
NGNG(defun func1 nil
(prog (age)
(setq age 20)
))
(defun func2 nil
(setq age 30))
ってできるの?
ageはfunc1内ローカル変数だと思うんですけど。
0409名無しさん@Emacs
NGNG分からない。テキトーにインタプリタで遊んでたら、腑に落ちちゃいました。
>>407
多言語と比較して Lisp で書けば圧倒時に開発期間が短くなるというのは
おおげさだと思う。ライバル会社が機械語で書いていたのなら別ですが。
0410デフォルトの名無しさん
NGNGじゃないの?
0411デフォルトの名無しさん
NGNG>set! は cons cell 自体の書き換えだからね。
はぁ?
0414デフォルトの名無しさん
NGNG>多言語と比較して Lisp で書けば圧倒時に開発期間が短くなるというのは
>おおげさだと思う。ライバル会社が機械語で書いていたのなら別ですが。
LISPマトモに使ったことないんだろな。
まぁ日本語も正しく入力できない奴は以下略。
0415デフォルトの名無しさん
NGNGでもやる仕事によると思うよ.
単純なテキスト処理なんかはやっぱり perl の方が楽だよ.
書いて楽しいのは lisp だけど.
0416デフォルトの名無しさん
NGNGでも機械語と比べるのはどうかなあ。
これだと「LispなんてC/Java/アセンブリ以下だ」と言っているのと同じような気がしますけど。
まあ、それはともかく。
>>409
「なる」ではなく「なった」です。
>>406
> でも、バインドじゃーないんですよねー。set! は代入なのです。
どっちでも良いんじゃないかなあ、と思います。
「既にdefineされた記号に値をバインドし直す」でも「代入」でも、自分がわかればそれで良いのでは?
(勿論、他の人と話が合うようにはすべきですけど)
そんなことに拘っていては、分かるものも分からなくなるかもしれませんよぅ。
もう一つ、揚げ足取り。
> scheme では コンスセル は ペア というらしいです。
この2つは別物では。
リストは「コンスセルの集まり」ですが、「ペアの集まり」とは言わなかったような。
「ペア」はコンスセル単体( '(hoge . fuga)など)のことを指します。多分。
0417297
NGNGと思うね。
(list? '(a . b)) ⇒ #f
(pair? '(a . b)) ⇒ #t
要するにコンスセルの最後がヌルであればlistであり、さもなくばpairだよな。
0418417
NGNG0419デフォルトの名無しさん
NGNG良いのないですか?
0420デフォルトの名無しさん
NGNGなんか日本語も楽に使いたいとか言い出しそうだな。
だったらkawa+JDBCってところかな。
0421416
NGNG0422421
NGNG0423デフォルトの名無しさん
NGNG行
が
消
え
る
な
ん
て
こ
と
が
あ
る
の
か
?
0424デフォルトの名無しさん
NGNG0425419
NGNG0426デフォルトの名無しさん
NGNG; 俺はPetite Chez SchemeからSQL操作専門のRubyスクリプトを呼び出す
; というバカなことを試してみたよ。割といける。標準入力からSQL文を読
; み込んで、標準出力に結果を書くの。
0427419
NGNG今までVBでやってた作業をschemeでもやりたいなと思いまして。
0428デフォルトの名無しさん
NGNG(if (= n 1) (list (list 'move-disk from 'to to))
(append
(hanoi (- n 1) from spare to)
(hanoi 1 from to spare)
(hanoi (- n 1) spare to from))))
これって末尾再帰に直せる?
0429デフォルトの名無しさん
NGNGAllegroCLにしなさい。
それで万事解決。
0430デフォルトの名無しさん
NGNG0431名無しさん@Emacs
NGNGソースに全角スペース 含めるなや (゚Д゚)ゴルァ
0432デフォルトの名無しさん
NGNG半角スペース2個を全角スペース1個に置換するのは
ソースうpするときの定説でしょ。
0433デフォルトの名無しさん
NGNG&nbsp;に半角スペースを織り交ぜ
出きるだけ&nbsp;を使わないのが最強。
0434test
NGNG0435デフォルトの名無しさん
NGNGおれもわからんけど。
0436デフォルトの名無しさん
NGNGが、べつに面白くもないのでやってあげない。
0437デフォルトの名無しさん
NGNGなぜJDBCではダメなの?
あとAccess使ってるならVBで良いんじゃないの。
Accessには論理的な美しさなんかないんだし。
0438デフォルトの名無しさん
NGNGそれで万事解決。
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNG念写
0441デフォルトの名無しさん
NGNG伝書鳩
0442デフォルトの名無しさん
NGNGのろし
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGcopy gc を再帰呼び出しでやってる処理系を教えてくれ。
てか copy gc の利点の一つは gc 時に必要なメモリがコンスタントに押えられる
ところだと思うが。
0445デフォルトの名無しさん
NGNGSchemeだからする必要ないけど…
0446デフォルトの名無しさん
NGNGコピーGCて2倍のメモリ使うんじゃないの?
0447デフォルトの名無しさん
NGNGで、僕は Debian GNU/Linux を使ってるんでパッケージを探してみたら guile はあるけど gauche は古いバージョンのやつしかない、と。
で、gauche の最新バージョンを Debian 用にパッケージ化してみました。
で、気づいた。
Scheme を使ったことないやつでも Scheme 処理系のパッケージングができることに。
でもさすがに Scheme 使ったことないやつが作ったパッケージなんて、だれも使いたくないだろうなぁ…(笑
0448デフォルトの名無しさん
NGNG>Scheme 使ったことないやつが
改行の仕方を解らない人が作ったパッケージも
どっちかというと嫌です。
0449デフォルトの名無しさん
NGNG学生とかが作った奴はほとんど再帰呼び出し形式だよ
0450デフォルトの名無しさん
NGNGhttp://www.isc.meiji.ac.jp/~ce11731/work/tscm/
0451デフォルトの名無しさん
NGNGやらしいつっ込みだなあ。
はっきりいえばいいのに。
0452デフォルトの名無しさん
NGNG>でもさすがに Scheme 使ったことないやつが作ったパッケージなんて、
>だれも使いたくないだろうなぁ
わざわざ言わなきゃいいのに
0453パッケージャ
NGNGあと、今日 Scheme つかったので、
「Scheme 使ったことのあるやつ」になりました。
0454デフォルトの名無しさん
NGNGかなり書きやすくナタヨ
0455パッケージャ
NGNGttp://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
0456デフォルトの名無しさん
NGNGsources.list
に何を加えればいいですか?
下さい。
0457パッケージャ
NGNGdpkg -i でインストールしてください。
あと、パッケージの説明文とか空白のままなんですが、
しばらくは気にしないで使っててください。
ftp://infosys.sys.i.kyoto-u.ac.jp/pub/debian/dists/experimental/
の下の
main/binary-all/interpreters/gauche-doc_0.4.12-0.1_all.deb
main/binary-i386/interpreters/gauche_0.4.12-0.1_i386.deb
です。なお、gauhe-doc は texi 形式のドキュメントしか入ってません。
いずれ HTML, PDF 形式に変換したものも入れます。
それまでは Web ページの最新版ドキュメントを見たほうがいいと思います。
ttp://www.shiro.dreamhost.com/scheme/gauche/
他にもいろいろ有用(そうな)パッケージがあるんですが、
それはまた Linux 板の Debian スレでってことで。
0458パッケージャ
NGNG開発環境(ライブラリとヘッダファイル)の場所が
Debian 標準に沿っていません。
たとえばヘッダファイルは
現在 /usr/share/gauche/0.4.12/include/*.h
正しくは /usr/include/gauche/*.h
これはいずれ gauche-dev というパッケージに分離して
Debian 標準にあわせます。
#すみません、age ます
0459デフォルトの名無しさん
NGNG0460パッケージャ
NGNGって、コレのことですか?
ttp://www.lispme.de/lispme/
0461459
NGNGですよ。
思いの他サクサク動いて気持ち良いです。
思いついた時にサラサラ書けるのが良いですね。
0462デフォルトの名無しさん
NGNG入力はどうしてるんだろう
0463デフォルトの名無しさん
NGNG>せめてODBCが使えるやつ無いですか?
DLL使える処理系ならODBC32.DLLを直接コールするとか。
0465デフォルトの名無しさん
NGNGhttp://www.lispme.de/lispme/angif.htm
http://www.lispme.de/lispme/LispMe3.gif
0466デフォルトの名無しさん
NGNG0467パッケージャ
NGNGGauche は 0.5.0 が 1/30 付けでリリースされているようです。
昨日見たときにはまだ出てなかったような気がするんですが…
というわけで、近いうちに 0.5.0 も deb パッケージにします。
0468パッケージャ
NGNGttp://www.shiro.dreamhost.com/scheme/gauche/
につき、Debian 用パッケージを作りました。
ftp://infosys.sys.i.kyoto-u.ac.jp/pub/debian/dists/experimental/
の下の
1)main/binary-all/interpreters/gauche-doc_0.5-0.1_all.deb
2)main/binary-i386/interpreters/gauche_0.5-0.1_i386.deb
3)main/binary-i386/interpreters/gauche-dev_0.5-0.1_i386.deb
です。実行に必要なバイナリ、ドキュメント、開発キット に分けました。
でもドキュメントは Web 上のものが最新です。
さらに開発キットはまだ使ったこと無いです。
というわけで、2) の実行に必要なバイナリだけ dpkg -i でインストールしてください。
なお、Scheme 勉強中につき以下のプログラムしか動作確認してません(笑
#!/usr/bin/gosh
(begin
(display "Hello, World!")
(newline))
でも、 make test で全部のテストをクリアしたので多分大丈夫かと。
0469デフォルトの名無しさん
NGNGLXだと速度的につらい
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG;; fruits は (and apple banana) に、
;; main は (and fruits database weapon) に依存している
(main (fruits apple banana) database (weapon sword))
このような呼出し関係の場合、どう (load FILE) を記述して
いますか? require/provide がある処理系ならそれを使うの
ですが、今回は無い場合と仮定しています。
要は、多重 load を避けたいわけです。
実際に使用している処理系は guile です。
0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG超軽量電池長持ちマシンに Emacs でもいいかな.
0474デフォルトの名無しさん
NGNGちゃんと末尾再帰もサポートしている。
0475デフォルトの名無しさん
NGNGloadを上書きするのが簡単。
(define *load-list* '()) ; ロードしたファイル名を記録
(define load (let ((org load)) ;オリジナル
(lambda (filename)
(if (not (memv filename *load-list*))
(begin
(push filename *load-list*)
(org filename))))))
0476デフォルトの名無しさん
NGNGは
(set! *load-list* (cons filename *load-list*))
のマクロ。
0477471
NGNGなるほど、その手がありましたか。ありがとうございます。
後はその再定義を util.scm なりに書いて、全スクリプトの頭で
(load "util.scm") しておけば良いですね。
0478デフォルトの名無しさん
NGNG上のloadは2回以上読むとおかしなことになると思うよ。
0479デフォルトの名無しさん
NGNGArc
http://www.paulgraham.com/paulgraham/arc.html
文字列をlistと同一視する機能は便利かも
(CommonLispのsequenceアプローチとは違うみたい)
> (car "abc")
\a
> (cons \a "bc")
"abc"
0480デフォルトの名無しさん
NGNGhttp://www.paulgraham.com/paulgraham/arcll1.html
・構文に影響しない不要な括弧は省略できる
・記述的な長い名前を使わない(lambda->fnまで行うのはどうかと思うが)
・シンボルの出力が小文字(大文字シンボルは伝統的なLISPの標準)
・文字列操作の強化
・一時変数it(=>の代替え?)
・macroがFirstClassObject(コンパイルどうするの?)
は良い考えだと思う。
でもインデントに依存する様な構文(cond)があるみたいなのが
少し引っかかるのだが。勘違いかも。
暗黙の変数宣言も好き嫌いが分かれる所。
0481デフォルトの名無しさん
NGNG\b
は型同士のみの位置関係(オペレータが存在しない)で定義する総称関数?
(define-generic (<string> s <number> n)
(string-ref s n))
0482デフォルトの名無しさん
NGNGやた。On Lispついに公開された。
本屋探してもなくってさー。Arcネタと外れてすまん。
0483名無しさん@Emacs
NGNG0485デフォルトの名無しさん
NGNGpdf印刷したら400枚・・厚さ5cmになった(w
両面印刷なんてとても手動じゃできん
(トレイに逆向きに並べ替えるだけで大変な手間。)
せめて縮小2段組で印刷できるようにできないのか
0486482
NGNG会社でコソーリ 2pages/sheet の両面印刷してくる予定ですが何か(w
0487デフォルトの名無しさん
NGNG(define (func (a b) c)
(+ a b c))
(func (1 2) 3)
=>6
ってできませんか?(funcの引数の構造に注目して)
0488デフォルトの名無しさん
NGNG無料で公開されてるのってどこでしたっけ?
0489デフォルトの名無しさん
NGNGせめて名前がわかれば・・・
0490デフォルトの名無しさん
NGNGOn Lispまだちゃんと読んでないけど、なんかマクロに力入れてるっぽい。
onlisp.lispのサンプルコードの定義の数
defun 157こ
defmacro 107こ
defvar 6こ
つーわけです。
他にもschemeの末尾再帰や継続について触れていたり、なかなか面白そうです。
0491484
NGNGANSI Common Lisp は本当にできがいい。英語も読みやすいし。
マクロか、呼んでみるか。
0492デフォルトの名無しさん
NGNG20.2 Continuation-Passing Macros
Common Lisp doesn’t provide call/cc, but with a little extra effort we can do
the same things as we can in Scheme. This section shows how to use macros to
build continuations in Common Lisp programs. Scheme continuations gave us
two things:
1. The bindings of all variables at the time the continuation was made.
2. The state of the computation—what was going to happen from then on.
CommonLISPのマクロで無理矢理レキシカルクロージャと継続を
エミュレートする試みらしい
0493デフォルトの名無しさん
NGNG>>169
0494デフォルトの名無しさん
NGNGhttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
0495デフォルトの名無しさん
NGNG絶版かあ・・
世知辛い世の中だね。
0497デフォルトの名無しさん
NGNGあれってどんな具合か知ってる人いない?
0498デフォルトの名無しさん
NGNGどうよ?って、使ってみてよ。
ソースも公開されてるし。
まあ、一言で言えばCommonLISPのサブセット。
0499デフォルトの名無しさん
NGNG敵はSchemeって感じか?
こいつは流行るのかな?
CLを掃除しただけって言うか、CLとそんなに変わらん気がするが。
ならいままで通りCLが使われてそうな気もする。
ISLISP用の資産、無いし。
0500デフォルトの名無しさん
NGNGあまりにも普通っぽいのは埋もれていく運命なのでは・・・
個人的にはarcの思想みたいな密構文マンセー主義な方言が流行って欲しい。
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG>>500
湯浅せんせ〜!
こんなことゆってはるひとがいます〜!
こいつらしばきましょう!
ぶぶってばかりないでIS Lispも活動してください!
(ぶぶってむしろ.NET版が欲しい。ぶぶ.NET)
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNGHTML文書をXHTML文書に加工するプログラムを書き始めた。
処理系はGNU Clisp。
とりあえず、大文字のタグを小文字に変換するところまでは
すぐにできた。
エンコーディングを自動判定にしたりとかも「できそうだ」
という感触はあるな。
機能はとにかく沢山あって、
これだけのものを作ったからには
応用事例が大量にあるんだろうな、と思ったよ。
でも、高機能なのはいいけど、やっぱりいろいろウザいねえ。
構文がいろいろあって。
美しさでは圧倒的にSchemeだねえ。
0506デフォルトの名無しさん
NGNGcall/cc使うって理屈はわかるんだけど
0507デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=call%2Fcc+call-with-current-continuation+catch+throw&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=
LISPのcatchは他の言語と比べて微妙に使い勝手が違う
0508デフォルトの名無しさん
NGNGオブジェクト指向的なこと(CLOS など)について、
分かりやすく教えてくれる日本語の本や文章ってありますか?
0509デフォルトの名無しさん
NGNGの日本語訳って出てます?
0510デフォルトの名無しさん
NGNG出てなかったと思うけど・・出るには早すぎないかな、
翻訳が終わってなかろうと言う意味で。
読んでてちょっと思ったのは、
日本語版が出たとしても、SICP第一版の悪夢を再現しそうかなと・・
LISPのしかも入門者向けの本じゃないとなれば、
翻訳者も「安」いだろうからねえ
0511デフォルトの名無しさん
NGNG(September 9, 1993)
ま、原著も絶版らしいんで、
日本語の訳本は存在しない、
ということでいいですか?
0512デフォルトの名無しさん
NGNGえ、そんなに古いの?
もしかして私は「最近絶版になった」を誤解してた?
絶版になった本じゃ、売ろうとはしてくれないだろうね。
日本でも次々と絶版だし。
Lisp系の本って一体何冊残ってるんだろう?
オンライン出版とかでもしてもらわないと。
0513デフォルトの名無しさん
NGNGttp://www.pearsoned.co.jp/washo/nbindex_mar.html
0514デフォルトの名無しさん
NGNGSICP 第一版ということは、
第二版が出てるんですか?
0515デフォルトの名無しさん
NGNG第二版の方が (訳者は高いだろうに :-)) 悪い訳だった気がするが...
ちなみに第一版って、McGrowhillからでて、絶版になったやつだよね。
0516デフォルトの名無しさん
NGNG幸いにして読んだことないからしらない。
英語の方がましかも、というできだったと聞いてるが。
第二版は大先生が翻訳したので、用語の間違いなどが全改善されてよくなった
・・と聞いてる。
私個人は英語版を読んでる途中のまま(おい
0517デフォルトの名無しさん
NGNG("abc" 1)
=>\b
("abc" 1 #\c)
=>"acc"
(("abc" "def") "ghi")
=>"abcdefghi"
クソ長いオペレータ名書かなくて済むから便利かな?
バグの原因になりそうだが。
0518デフォルトの名無しさん
NGNG=>"bc"
("abcdef" 1 "xyz") ;insert
=>"axyzbcdef"
eval-hookを公開してる処理系なら切り分けできそうだけど、
本来は評価エラーになるはずの部分に埋め込む形だから
処理系自身に手を加えないと難しいかも。
0519デフォルトの名無しさん
NGNG0520名無しさん@Emacs
NGNGあれ、楽しい?
めちゃくちゃ つまらんかったんだけど。
0521デフォルトの名無しさん
NGNGという煽りはやめて,もしSICPがつまらなかったらEoPLをお勧めします.
0522デフォルトの名無しさん
NGNG禿同。2nd editionも出たし。
あとおすすめできるマニアック本はQueinnecのLISPかな?
0523デフォルトの名無しさん
NGNGSICPが面白くないのは、よっぽどできるか、
解ってないかのどちらかだと思われる。
原著のアマゾンでの評価の二極化を思い出されたし。
SICPがつまんなかったひとは、もっと簡単な本をするか、
もしくは薀蓄のある世界に全然興味の無い人ならLisp
なんぞ止めてしまうことを薦める。
0524デフォルトの名無しさん
NGNGよっぽどできる、ってアメリカの大学だとあの本でみんな計算機科学の勉強始めるんだよ。
計算機科学入門、みたいな授業で良く使われてるよ。確かにいい本だと思うけど、あくまで
入門者用って感じじゃないかな。アルゴリズムの授業とかの方が、もっとずっと難しいん
じゃないかな(ずっとためになるけど)。
0525デフォルトの名無しさん
NGNG日本の大学では教科書を理解してる奴はほんの一握りだな。
0526デフォルトの名無しさん
NGNG誤解されて読まれてしまった。
よっぽどできる、というのはですね、
例えばあの本にツッコミを余裕で入れられるくらいの人なら
「つまらない」かもしれないという前置きです。
解ってない、というのはあれでLISPを1から勉強するには
適していないらしい、という過去の書きこみを汲んだものです。
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNGEoPLって何ですか?
例によってオンラインで読めたりします?
0530デフォルトの名無しさん
NGNGhttp://mitpress.mit.edu/catalog/item/default.asp?sid=73806852-76AF-4AAE-B79E-8AF1751C5A82&ttype=2&tid=3620
http://www.amazon.com/exec/obidos/ASIN/0262062178/
アマゾンで34ページ読める。
0531デフォルトの名無しさん
NGNGつーか目次だけじゃん
0532デフォルトの名無しさん
NGNGhttp://curry.2ch.net/test/read.cgi/occult/1010105764/
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG0535519
NGNG>>520
俺はそこそこ楽しかったかな。
序盤は「ふーん」って程度だった。
MLとかSchemeは普通に知ってたから、
高階関数とかカリー化とか関数オブジェクト
とか見せられても今更、って感じだったし。
むしろS式とかlambda式とかの数学的定義を
あまり表に出さない所とか、
少し好きではなかった気がする。
でもLogicalProgrammingとか、ambとかは
あんまりしらなかったのでとても面白かった。
SQLとかもあまり詳しくなくて、普通に本で
勉強した事がある、程度だったので、
むしろPrologに近い言語である、というのが
わかった時は驚いた(SQL使いには常識なんだろうが)。
コンパイラもストップアンドコピーは組んだ事無かった
ので、そこはなかなか楽しめた。
どうせならストップアンドコピーとマークアンドスイープ
の定量的な比較をシミュレータ使ってやってみる、
ついでにキャッシュ相当の機能も実装してみて、
ヒット率にどう違いがでるか、とかまでやったら
もっと楽しかったと思うが、そこまで要求するのも酷だろう。
Scheme系のインタプリタ組む時はいつもC使っちゃうから、
末尾再帰とか結構面倒な事になるんだけど、
アセンブリだと楽なんだねぇ、とか学んだ事もあった。
題材としてもゲートとかとの関連が見えたり、
HDLとかが裏に見えたり、副作用の無い関数型言語に
ついてのさわりが見られたり、良く選んでるなぁ、と思った。
全部読んだ感想としては、いろいろな事の基礎が学べて
良い本だと思ったよ。
OS関係が全く触れられてない、っていうのは良いのか
悪いのか良くわからん。あれも一つの選択なのかもしれない。
OOPに触れないのは俺は好感が持てたかな。
余談だが、ニュートン法とか大学受験を思いだして、ちょっと笑えた。
台形公式とかも。
ヘネシー&パターソンとどっち読もうか悩んだんだけど、
一応読んどいて良かった、と今は思ってる。
入門書としてはどうかなぁ?とは思う。
何か具体的に作って動かす、という喜びが
あまり感じられない所が入門書としては
良く無いと思ったよ。
勉強にはなるけど、プログラムの楽しさは
わからない気がする。
>>523
いや、つまらん、面白い、ってのは人それぞれなのでは?
別に理解出来て勉強になるレベルでもつまらん、
と思う人もいそうな本だと思うが。
SchemeとかLisp好きな人は好きそうな本だとも思うけど。
0536デフォルトの名無しさん
NGNG> コンパイラもストップアンドコピーは組んだ事無かった
GCとコンパイラ、普通混同するかね…
0537デフォルトの名無しさん
NGNG0538535
NGNG書いただけなんだが、、、
0539デフォルトの名無しさん
NGNGに分かれているのでしょうか?
Lisper としては下のようになるのは気持ち悪い。
CommonLisp: (if (if (< 2 1) 'a) 'b)
NIL
Scheme: (if (if (< 2 1) 'a) 'b)
b
CommonLisp: (if (< 2 1) 'a)
NIL
Scheme: (if (< 2 1) 'a)
#<unspecified>
and を使えばいっしょなんだけど
CommonLisp: (and (and (< 2 1) 'a) 'b)
NIL
Scheme: (and (and (< 2 1) 'a) 'b)
#f
0540デフォルトの名無しさん
NGNGschemeでは(if #f 'a)が#<unspecified>なんだから
一致しないのはしょうがないのでは?
本来警告ぐらい出すべき部分だと思うけど。
0541539
NGNGうん、だからなぜ nil に相当するものを #f と #<unspecified>
にわざわざ分けるような仕様にしたのかなと思って。
例えば CommonLisp で
(defun foo (x)
(and x
(stringp x)
(setf x (parse-integer x :junk-allowed t))
(* x 2)))
(foo "1") ==> 1
(foo "a") ==> NIL
みたいなことがしたいときに、 Scheme だと set! が #<unspecified>
を返すので
(define (foo x)
(and x
(string? x)
(set! x (string->number x))
(* x 2)))
(foo "1") ==> 1
(foo "a") ==> Error
になってしまうのがちょっと不便だなと思ったわけです。
(define (foo x)
(and x
(string? x)
(set! x (string->number x))
x
(* x 2)))
のようにすればいいんですけど。
0542デフォルトの名無しさん
NGNG(set! x (string->number x)) ;←これはまずいんでは?
(* x 2)
#<unspecified>が#tと同じかどうかは処理系依存だし。
素直に
(begin (set! x (string->number x)) (* x 2))
とすべき。
あるいはマクロでsetq相当を作っておくのも良いかと。
(macro setq (lambda(l) `(begin (set! ,(cadr l) ,(caddr l)) ,(cadr l))))
0543539
NGNGごめん、ちょっと例が悪かったみたいなんだけど、
おれが聞きたかったことは
なんでわざわざ #<unspecified> という値(?) を仕様に
導入したの、ということで、
(if (< 2 1) 'a) ==> #f
(define x 1) ==> 1
(set! x 2) ==> 2
みたいな仕様になっていれば >>539>>541 のような
気持ち悪いことが起こらないのに、ということが言い
たかったのです。
> #<unspecified>が#tと同じかどうかは処理系依存だし。
ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html#SEC59
| Schemeのすべての標準の値の内で、#fだけが条件
| 式の中で偽と判断される。#fを除くSchemeのすべて
| の標準の値は真と判断される。
と書いてあるので #<unspecified> も真なのではないの?
とりあえず手元にある scm-5d4 と kawa-1.6.97 では
(if (define x 1) #t #f) ==> #t
だったよ。
0544デフォルトの名無しさん
NGNG>(if (define x 1) #t #f) ==> #t
なんでこんなヘンなことしようとするの?
#<unspecified>みたいな特別な値を持ってない処理系だと、
例えば#fを返したりする事もありそうだけど?
#<unspecified>を返すって事は、
C言語とかでも見る関数引数の評価順序の様な「未定義の振るまい」
みたいなもんだと思うけど。(そんなのわかってそうだけど、一応)
警告にすりゃいいのを、なんでわざわざ未定義にしたのかは不明。
トレースで簡単に追えるからか、あるいは仕様書を短くしたいだけか。
0545539
NGNG> >(if (define x 1) #t #f) ==> #t
> なんでこんなヘンなことしようとするの?
ただ #<unspecified> が真と評価されるか試してみただけ。
別に #<unspecified> を返す式ならなんでもよかったんだけど。
(define unspecified (if #f #t))
(if unspecified "unspecified は真" "unspecified は偽")
==> "unspecified は真"
0546デフォルトの名無しさん
NGNG気がする。なぜって、正当な値としてnilを返すifはありそうじゃない?
nilを返す関数はあるわけだから。
R5RSによればunspecifiedを返すのではなく、何を返すか規定されてい
ないと書いてある。おそらく、本来、代替部alternateを省略できるこ
と自体が不適切なんですよ。SML/NJなんかは実際に省略できないわけだ
し。省略できるように「あえて」してあるのは、特定のケースにだけ副
作用を伴う式を評価し、if式全体の評価結果は使用しないようなケース
のためじゃないかな?
# if式全体の評価結果が必要なのであれば、明示的にalternateを記述
# すればいいだけだし。
0547デフォルトの名無しさん
NGNGって副作用のためにあるんじゃないの?
こういうのはシーケンスの途中に置くべきだと思う。
(begin ... (if test true) ...ちゃんとした戻り値)
0548デフォルトの名無しさん
NGNG(try
...
(if test (throw <tag> <result>))
...
catch <tag> <throw-result>
...
catch-all <tag-result> <throw-result>
...
finally
...
)
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG0551539
NGNGなるほど。ありがとう。
まだ Scheme いじくりはじめて日が浅いのでいまい
ち実感がわかないけど、
Scheme の仕様に #<unspecified> が入っているのは
副作用を伴う式を明示的に示したいような場合に使う
ため、という感じでよいのかな?
つまり、この手続きは副作用のための手続きなので返
す値はどうでもいいよという場合に、あえて #<unspecified>
を返すことによってその手続きの目的を強調するという
ことかな?
例えば
(display 'hello) ==> #<unspecified> (副作用だから)
0552デフォルトの名無しさん
NGNG5千円くらい出します。
あと、cプログラムブック3も。
おながいします。
0553デフォルトの名無しさん
NGNGええと、
図書館はご利用なされないのですか?
後者は昔地元の図書館で見かけましたが。
0554デフォルトの名無しさん
NGNG5千円くらい出します。
あと、メールアドレスも。
おながいします。
0555デフォルトの名無しさん
NGNG僕が調べた限りでは、#<unspecified>というオブジェクトは
R5RSにはありません。仕様では戻り値が決められていない
(未定である)というだけです。
Chez Schemeでは
(if #f 'a)
は#<void>を返します(つまり戻り値がない、ということです)。
また#<void>が返ったときは画面上では何も結果が表示されません。
有意な戻り値がないわけですから、妥当な表現だと思います。
もっとも#<void>もまた、#fではないので
(if (if #f 'a) 'b)
はbを返します。つまり#<unspecified>と同じですね。
> つまり、この手続きは副作用のための手続きなので返
> す値はどうでもいいよという場合に、あえて #<unspecified>
> を返すことによってその手続きの目的を強調するという
> ことかな?
というより、nilは有意な値であるのに対して、#<unspecified>
や#<void>はそうではない、ということでしょう。そういう意味で
は、#<unspecified>や#<void>が#tとして評価されるのは、仕様
上仕方ないけれど、本来は「評価不能」としてエラーになるべきだ
と思う。
0556デフォルトの名無しさん
NGNGcall-with-current-continuation
しかない環境で(修正や上書きで)実装できますか?
(define (dynamic-wind before thunk after)
(before)
〜
(thunk)
〜
(after)
)
afterはCommonLISPのunwind-protectと同じ解釈で良いですよね?
beforeがよくわからない・・・
0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG例えばthunkの中で継承をどこかにset!して、あとでいきなりthunkの中に
戻ってくるとかしたときにやりたい処理を書いておく。
例えばthunkがファイルにアクセスする時、ファイルのオープンをbeforeです
るととつぜん継承を使ってファイルのアクセスコードにジャンプしてもファイ
ルがオープンできる。
そんなの無理に使わなくて良い。
0559デフォルトの名無しさん
NGNG深く考え過ぎ。
値は定められてないって意味で値がunspcifiedだって書いてあるから、
値として#<unspecified>というのを返してるだけ。
別に#fを返そうが'()を返そうがR5RS的には問題ない。
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG手続き: (error シンボル 文字列 オブジェクト ...)
戻り値: 戻らない
errorへの引数はカレントerrorハンドラに渡される(error-handlerを見よ)。
ハンドラが制御を戻してきたら、エラーはリセットされてカレントcafeに戻る。
デフォルトerrorハンドラは引数を説明メッセージをprintするために使う。シ
ンボルはエラーの発生した場所を特定する。状況を説明する文字列はformat文
字列である(formatを見よ)。その他のオブジェクトはformatへの追加引数で
ある。第1引数がシンボルのかわりに#fならば無視される。メッセージを
formatしてprintした後、デフォルトerrorハンドラはerrorの継続を保存し
(debugを見よ)、リセットする。
(define slow-vector-map
; an allocation-intensive implementation of vector-map
(lambda (p v)
(unless (procedure? p)
(error 'vector-map "~s is not a procedure" p))
(unless (vector? v)
(error 'vector-map "~s is not a vector" v))
(list->vector (map p (vector->list v)))))
0562デフォルトの名無しさん
NGNGパラメータ: error-handler
このパラメータの値は手続きでなければならない。カレントerrorハンドラは
errorによって呼び出され、errorの引数がerrorハンドラに渡される。デフォ
ルトerrorハンドラの解説はerrorを見よ。以下の例はデフォルトerrorハンド
ラの変形(breakを使って直接デバッガを起動させる)をインストールする方
法を示す。
The following example shows how to install a variant of the default
error handler that invokes the debugger directly (using break).
(error-handler
(lambda (who msg . args)
(fprintf (console-output-port)
"~%Error~a: ~a.~%"
(if who (format " in ~s" who) "")
(parameterize ([print-level 3] [print-length 6])
(apply format msg args)))
(break)))
同じふるまいをする「やっつけ」の対案としては、単にbreakするerrorハンド
ラをセットすることである。
以下のバージョンは非ゼロのエラーステータスでシェルに即脱出する。makeファ
イルからChez Schemeを走らせているときには特に便利である。
(error-handler
(lambda (who msg . args)
(fprintf (console-output-port)
"~%Error~a: ~a.~%"
(if who (format " in ~s" who) "")
(parameterize ([print-level 3] [print-length 6])
(apply format msg args)))
(abort)))
0563デフォルトの名無しさん
NGNG例外を捕捉する手続きをセットしておき、それから処理を開始する。
例外を発生する個所で、errorを使う。errorの引数が
error-handlerに設定された手続きに渡されるからしかるべき処理
をする。これで例外処理は全部できるでしょ。
0564556
NGNGいや、再定義で良いんでヒントだけでも教えて下さい。
やろうとしてることはR4RSな処理系をR5RSに引き上げる様な感じです。
0565556
NGNG(set! call-with-current-continuation
(let ((old/cc call-with-current-continuation))
(lambda (proc)
〜
(proc cont) ;継続の引き渡し(contをこれから定義する)
〜
)))
0566556
NGNG(dynamic-wind
(lambda()(display "before1\n"))
(lambda()
(display "thunk1\n")
(dynamic-wind
(lambda()(display "before2\n"))
(lambda() (display "thunk2\n") (cont #t))
(lambda()(display "after2\n")))
)
(lambda()(display "after1\n"))
))))
(test)
としたとき、
before1
thunk1
before2
thunk2
after2
after1
=>#t
とならなくてはならない。
0567556
NGNG(cont #t)について考える。
呼び出し時、contは
・before1->2についての呼び出しは完了している事を知っている。
・継続切り替え前後にafter2->1を呼び出さなければいけない事を知っている。
よって、cont毎にスタックの様な形式でbefore/after呼び出し履歴が必要。
0568556
NGNGcont毎にbefore/afterを持ち回るとそれらが複数回呼び出される
可能性があるので、どうにかして情報を共有化しなくてはならない。
親継続aの中で取り出された子継続x,yは親継続aを共有する。
(call/cc (lambda(親継続a)
(call/cc (lambda(子継続x)〜))
(call/cc (lambda(子継続y)〜))
))
親継続a <- 子継続x
親継続a <- 子継続y
0569556
NGNG(define *current-continuation* '())
これはcall/ccで現在の継続が取り出されると、その継続がpushされ、
call/ccから抜けるとpopされる。
*current-continuation*には、old/ccで得た継続、その継続に属する
before/afterがセットで格納される。
0570556
NGNGを考えてたら頭がパンクしました。
call/ccとdynamic-windの連携が、、、、
(unwind-protectエミュレートの時は、巻き戻しだけなので
結構すんなりうまく行った)
0571デフォルトの名無しさん
NGNG0572556
NGNGみんな頭いいなあ。
でも考え方としてはだいたい有ってたので良かった。
次はcall-with-valuesかな。
0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGhttp://www.accesscom.com/~darius/writings/scheme-for-lispers.html
http://sources.redhat.com/ml/guile/2000-02/msg00303.html
http://www.red-bean.com/guile/guile/new/msg00230.html
どれも完全では無い様で・・
0575デフォルトの名無しさん
NGNGhttp://www.angelfire.com/tx4/cus/shapes/scheme.html
この行数でこれだけのことができるなら
別に OO パッケージなんていらない気がするね
(define (make-str . strs)
(let ((str (if (null? strs) "" (apply string-append strs)))) ;; member
;; methods
(define (get) str)
(define (set strs)
(if (null? strs) #f
(set! str (apply string-append strs))))
(define (ref k)
(and (not (null? k)) (<= 0 (car k)) (< (car k) (string-length str))
(string-ref str (car k))))
;; dispacher
(lambda params
(cond ((null? params) (get))
((eq? (car params) 'get) (get))
((eq? (car params) 'set) (set (cdr params)))
((string? (car params)) (set params))
((eq? (car params) 'ref) (ref (cdr params)))
((number? (car params)) (ref params))))))
(define s (make-str))
=> #<void>
(s 'set "abc")
=> #<void>
(s 'get)
=> "abc"
(s 'ref 1)
=> #\b
(s "ABC")
=> #<void>
(s)
=> "ABC"
(s 1)
=> #\B
0576575
NGNGdispacher → dispatcher
0577575
NGNG(define (make-upcase-string . strs)
(let ((super #f)) ;; member
;; private method
(define (string-upcase str)
(list->string (map char-upcase (string->list str))))
;; public methods
(define (set strs)
(if (null? strs) #f
(super 'set (string-upcase (apply string-append strs)))))
(define (append strs)
(if (null? strs) #f
(set (list (apply string-append (super 'get) strs)))))
;; constructor
(set! super (apply make-str strs))
(super 'set (string-upcase (super 'get)))
;; dispatcher
(lambda params
(cond ((null? params) (super 'get))
((eq? (car params) 'set) (set (cdr params)))
((string? (car params)) (set params))
((eq? (car params) 'append) (append (cdr params)))
(else (apply super params))))))
(define s (make-upcase-string))
=> #<void>
(s 'set "abc")
=> #<void>
(s 'get)
=> "ABC"
(s 'append "def")
=> #<void>
(s 'get)
=> "ABCDEF"
(s 'ref 5)
=> #\F
0578デフォルトの名無しさん
NGNGおれなんかは古代祐三の曲で一躍有名になったスキームというゲーム
知ってたおかげか、初めから読めたけど。
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNGスケム
0582デフォルトの名無しさん
NGNGスケジュールと柔軟に読めるならそれは詐欺だ
おれなんか最初スチェズレと読んだど?
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNGschemeしぇーめ、scheduleしぇじゅーる(中途半端に混じってる)
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNGシェルとして実装した場合、括弧付けないとevalれない点は
どうなんだろうね。
0590デフォルトの名無しさん
NGNGClispのページに書かれていたな。たしかに必要なこと
はすべてできるんだけど、正直すげえな、と。
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG人類が作った変態言語の極みダヨ
0593デフォルトの名無しさん
NGNGCommon Lispの場合、関数はdefun、変数はsetqで定義して名前空間も別。
俺はSchemeの流儀の方が好きなんだけど?
0594デフォルトの名無しさん
NGNGエライ人にはそれが判らんのです
0595デフォルトの名無しさん
NGNG#<void>返すところはself返したらいいかもしんない
((obj1 'set (obj2 'get)) 'draw)
んで括弧が見にくいと思ったらコマンド列にしてみるとか。
((make-telnet)
'open '(host "####" port 23)
'wait "login: "
'send "####"
'wait "Password: "
'send "####"
'wait "}%"
'with-append-open "telnet.log"
)
0596デフォルトの名無しさん
NGNGはぁ?
お前はアホか?
Lisp なんざ変態言語としてはカスみたいなもんなんだよ。
お前みたいな奴は Brainfuck で HelloWorld でも書いてから出直してこい。
http://www.muppetlabs.com/~breadbox/bf/
0597デフォルトの名無しさん
NGNGなにこれ?バイトコード?
0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNGこれ、すごい小さい処理系(?)だけど、もうちょっと読みやすくならないかな。
あのままじゃさっぱり意味わからないよ。
0600デフォルトの名無しさん
NGNGいいドキュメントは何でしょうか?
いままで、「リスト遊び」と「初めての人のための LISP」を読みました。
犬飼さんの本はとっつきやすそうだけど、末尾再帰すら載ってないみたい。
ttp://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/
これなんか、わりと良さげな気がしてるのですが…。
0601デフォルトの名無しさん
NGNG評価が分かれるけど>>2にあるSICPがいいと思うよ。
0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNGSICPはSchemeを勉強する本じゃない、ってSICPに書いてあるの
知らないのかな?
0604デフォルトの名無しさん
NGNGそれSteeleもCommon Lispの反省点として上げてたよ。
0605デフォルトの名無しさん
NGNGSteelはSchemeの設計者だからね…
0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNGR4RS-R5RSの規格書50ページと>>2以降にあるリンクのサンプルで勉強したよ。
あとは@niftyのプログラミングランゲージフォーラム(FPL)に上がってる、
昔のログや処理系の解析。結局、処理系の解析が一番役に立った気がする。
結局通信費除けばほとんどタダだった。
cltl2やSICPの訳本とか買ったのはかなり後。
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNGそうなんだ。良かった。
0611デフォルトの名無しさん
NGNGScheme って R5RS で用意されている標準手続き
が厳選されているところがいいと思う。
Common-Lisp だと例えば、
find, find-if, find-if-not, remove, remove-if, remove-if-not
なんて似たような関数がやたらとたくさんあるけど、
Scheme だと for-each だけしかない。でもこれで十分。
0612デフォルトの名無しさん
NGNG同意。
ただねえ、Schemeでコードを書いていると
「動けばいいや」という気持ちにならないんだよね。
「もっと美しく(抽象的に)書けるよな……」
とか思っちゃう。
んで、いつまでもコードと戯れて時間を潰しちゃうんだ。
その方が結果的に品質の高いコードができるんだけど、
ついつい楽しくて時間を浪費しちゃうところがあって、
急いでいるときはSchemeには近付けない気分だったり。
; 俺だけ?
0613デフォルトの名無しさん
NGNGSchemeはSteelがゼロから設計したんだよ。でもCLは違う。
どっちかっていうとSteelは各方面からの意見をとりまとめた、って
感じじゃないかな。
0614デフォルトの名無しさん
NGNG僕もです。でも、他の言語に同じような処理を行わせようと
したとき、Scheme ならサラッと出来るものに時間が取られたり
するので、結局は Scheme の方が良かったりします。
0615デフォルトの名無しさん
NGNGUnix 板に uudecode 使って
直接バイナリ吐く開発法が提示されてたよ。
言語じゃないけどわらった。
0616デフォルトの名無しさん
NGNGnavi2chの機能のことか?
0617デフォルトの名無しさん
NGNGそれはバイナリというか、単に読めないだけでは?
0618デフォルトの名無しさん
NGNGそれってcatでuuencode形式のファイルを書くアレのことかな?
……ここで言うのも何だけど、gzipはタイプ量が減っても開発効率は悪くなると思う……。
0619デフォルトの名無しさん
NGNG0621名無しさん@Emacs
NGNGって書いて実行させることできますか?
今やってみたけどできなかった。何か違うやり方があるんでしょうか。
man 見ようとしたらなかったし(鬱
0622デフォルトの名無しさん
NGNG試した方が速くないっすか?
0623デフォルトの名無しさん
NGNGGNUものは大体infoをさきにみるといいよ
#!/usr/local/bin/guile -s
!#
(display "Hello, world!")
(newline)
0624名無しさん@Emacs
NGNGなるほど。ありがとう。
これからいろいろ勉強します。elisp とは結構違いますね。
;; なぜか info もなかったので探しに逝ってきます。
0625デフォルトの名無しさん
NGNGscshというschemeのshellは
#<<END
〜
END
という構文が用意されているらしい。
他の処理系でも'#'みたいな特殊文字を読みこんだ時に、
登録したフック関数が呼べる様な機能があれば似たような事が
可能でしょう。readそのものを書きかえるって手もあるけど。
0626デフォルトの名無しさん
NGNG>>619
scshというschemeのshellは
#<<END
〜
END
という構文が用意されているらしい。*END*)
>here-document
=>">>619 \nscshというschemeのshellは \n#<<END \n〜 \nEND \nという構文が用意されているらしい。"
0627デフォルトの名無しさん
NGNGそれは変数展開してくれるの?
おれはいつもこんな感じで書いてるけど。
(string-append
"...
... " foo " ...
...
")
0628デフォルトの名無しさん
NGNG>#!$ここからここまで$
"ここからここまで"
(この場合'$'が区切り文字。)
guileにもある様です。#q<文字>〜<文字>
>>627
変数展開なんてしないでしょう。
0629デフォルトの名無しさん
NGNGに載ってるクイックソートのscheme版
誰かリファクタリングしてください。
;;lst(l-r)を値vで分割 分割地点を返す
(define (divide! lst v l r)
(define (divide-internal l r)
(define (search-from-left l) ;;リストの前から
(cond
((>= (nth lst l) v) l)
(else (search-from-left (+ l 1)))))
(define (search-from-right r) ;;リストの後ろから
(cond
((>= l r) r)
((< (nth lst r) v) r)
(else (search-from-right (- r 1)))))
(set! l (search-from-left l))
(set! r (search-from-right r))
(cond
((>= l r) l)
(else
(swap lst l r)
(divide-internal (+ l 1) (+ r 1)))))
(divide-internal l r))
(define (divide-and-swap lst l r)
(cond
((null? lst) #f)
((< l 0) #f)
((< (atoms lst) r) #f)
(else (let ((p-index (divide! lst (nth lst r) l r)))
(swap lst p-index r)
p-index
))))
(define (qsort lst)
(define (qsort-internal l r)
(cond
((>= l r) lst)
(else (let ((v (divide-and-swap lst l r)))
(qsort-internal l (- v 1))
(qsort-internal (+ v 1) r)))))
(cond
((null? lst) #f)
(else (qsort-internal 0 (- (length lst) 1)))))
0630デフォルトの名無しさん
NGNGそちらのコードはよく読んでないけど
何でそんなに長くなるの?
(define (sort p lst)
(define (filter p a lst)
(let loop ((lst lst) (r '()))
(if (null? lst) (reverse r)
(loop (cdr lst) (if (p a (car lst)) (cons (car lst) r) r)))))
(define (not-p x y)
(not (p x y)))
(if (null? lst) lst
(append (sort p (filter not-p (car lst) (cdr lst)))
(list (car lst))
(sort p (filter p (car lst) (cdr lst))))))
> (sort < '(3 5 2 4 6 3))
(2 3 3 4 5 6)
> (sort char<? (string->list "Scheme"))
(#\S #\c #\e #\e #\h #\m)
0631デフォルトの名無しさん
NGNGそれじゃクイックソートじゃないジャン。
0632630
NGNGというかもろアルゴリズムそのままジャン
ttp://lecture.ecc.u-tokyo.ac.jp/~yamaguch/pub/cp1-3/quick-sort.html
> ・データの集まりから1つデータを選び、それより小さいデータの
> 集まりと、それより大きなデータの集まりに分ける.
> ・それぞれの集まりに対してクイックソートを適用する.(再帰的)
> ・以上を繰り返すと、ソートするデータの個数が減っていき、最後
> にデータの個数が1以下となって終る.
0633受験生
NGNGhttp://school.2ch.net/test/read.cgi/kouri/1014220418/l50
こんなスレがあった…。
lambda 使って遊んでばっかいるとホントにこういうハメになりそ…。
0634デフォルトの名無しさん
NGNG計算量って言葉知ってる?
0635(not 632)
NGNG効率を求めるなら、Scheme インタプリタ組み込みの手続きにすれば
良いんでないの? そうでなくても、まずは理解しやすいのを書いてから
議論を進めても悪くないでしょ。
0637デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNG0641デフォルトの名無しさん
NGNGフランス語読みだったですね。
スペイン語だったら、チェズかな?
0642デフォルトの名無しさん
NGNG> スペイン語だったら、チェズかな?
チェスだろ。
0643630
NGNGあえて Scheme っぽく書いたんだけど...
ついでに他の関数型言語のクイックソート。
Haskell が一番かっこいいかな?
SML
ttp://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node81.html
Haskell
ttp://www.teu.ac.jp/kougi/koshida/Prog6/text06.html
0644デフォルトの名無しさん
NGNGどういった関係でしょうか?
0645ひまだから書く
NGNG範疇に入る方言の一種で、それぞれくせがある。
正当な lisp の後継者としては Common lisp というのがある。
ただ scheme の方が言語的にすっきりした仕様になっているので、
こちらを好む人も多い。
0646デフォルトの名無しさん
NGNG(define (sort! p seq)
(define (seq-sort! p seq seq-ref seq-set! seq-length)
(define (swap! seq i j)
(let ((tmp (seq-ref seq i)))
(seq-set! seq i (seq-ref seq j))
(seq-set! seq j tmp)))
(define (divide! p seq start end)
(let ((a (seq-ref seq start)))
(let loop ((i (+ start 1)) (mid start))
(cond ((> i end) (swap! seq start mid) mid)
(else (cond ((p (seq-ref seq i) a)
(set! mid (+ mid 1))
(swap! seq i mid)))
(loop (+ i 1) mid))))))
(let loop ((start 0) (end (- (seq-length seq) 1)))
(cond ((>= start end) seq)
(else (let ((mid (divide! p seq start end)))
(loop start (- mid 1))
(loop (+ mid 1) end))))))
(define (list-set! lst k obj)
(set-car! (list-tail lst k) obj))
(cond ((list? seq) (seq-sort! p seq list-ref list-set! length))
((string? seq) (seq-sort! p seq string-ref string-set! string-length))
((vector? seq) (seq-sort! p seq vector-ref vector-set! vector-length))
(else seq)))
> (sort! < '(3 4 1 9 2))
(1 2 3 4 9)
> (sort! < '#(3 4 1 9 2))
#(1 2 3 4 9)
> (sort! char<? "34192")
"12349"
0647デフォルトの名無しさん
NGNG最近覚えたんだけど、結構 lisp っぽい所が多くて
結構面白いと思うんだけど。
0648デフォルトの名無しさん
NGNGruby狂信者が嫌われているだけです。
しかし、そういう人達ってrubyのこと本当に好きなのかな?
本当にrubyを使っているのかな?
0649デフォルトの名無しさん
NGNG0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNG関数xxxの例
>(xxx nil)
NIL
>(xxx '(a))
(A)
>(xxx '(a b))
(A B)
>(xxx '(a (b) c))
(A B C)
>(xxx '((a (b (c (d)) (((e)))))))
(A B C D E)
0652こうか?
NGNG(cond ((null? x) x)
((symbol? x) (list x))
(else (apply append (map xxx x)))))
; テストしてないけど
0653こっちのがもろ再帰って感じしない?
NGNG(define (xxx lst)
(cond ((null? lst) lst)
((atom? lst) (list lst))
(else (append (xxx (car lst)) (xxx (cdr lst))))))
0654デフォルトの名無しさん
NGNG(defun xxx (xxx)
(cond ((null xxx) xxx)
((atom xxx) (list xxx))
(t (mapcan #'(lambda (xxx) (if (null xxx) (list xxx) (xxx xxx))) xxx))))
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG反省しる!
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG(cond ((null xxx) xxx)
((atom xxx) (list xxx))
(t (append (xxx (car xxx)) (xxx (cdr xxx))))))
これSchemeで書けないね。
0659デフォルトの名無しさん
NGNG(setq x 'x)
(x x)
0660デフォルトの名無しさん
NGNGほとんどそのままよ
0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNG(defun x (x) x)
(setq x 'x)
(describe x)
X is a SYMBOL.
Its value is X
It is INTERNAL in the COMMON-LISP-USER package.
Its function binding is #<Interpreted Function X>
The function takes arguments (X)
そういえば属性リストというのもあったね。最近あまり使わないけど。
(get 'x 'foo) ==> NIL
(setf (get 'x 'foo) 1)
(get 'x 'foo) ==> 1
0663デフォルトの名無しさん
NGNGLispMe!ってSECDマシンなのね。
Sスタック
E環境
Cコード
Dダンプ
だっけ。
0664デフォルトの名無しさん
NGNG(put 'x 'foo 1)
じゃないの?
いや、良く知らないんだけど。
0665デフォルトの名無しさん
NGNGじゃあ
(setf (get 'x 'foo) 1)
の値って何?
C言語だと式の結果は右辺値だよね?
関数の場合は特定できないけど。
0666デフォルトの名無しさん
NGNGが=>1返すなら、
(setf (get 'x 'foo) 1)
で'xに値が設定できるのって変じゃない?
C++のリファレンス値に代入してるのと同じ気持ち悪さがある。
get(x,foo).set(1)
0667デフォルトの名無しさん
NGNGsetfはマクロだからなあ
0668651
NGNGありがとうございました!!
0669デフォルトの名無しさん
NGNGなぜ?
x, x[n] に対する x = val, x[n] = val と
x, (aref x n) に対する (setf x val), (setf (aref x n) val) は
どこが違う?
0670デフォルトの名無しさん
NGNG(aref x n)
で
=>1が返るなら
(setf (aref x n) val)
は
(setf 1 val)
に見えてキモイ、ってことでしょ?>666
0671元リスーパ
NGNGsetf で必要な三要素、とかいうの載ってましたよね。(懐
(1) 値設定する場所を表すS式表現 (aref x n)
(2) (1)のS式を解釈して、値設定をする関数 (defun setf-aref ...)とか
(3) よく覚えていないが、 setf へ (1) と (2)を設定する仕組みとかなんとか
現役リスーパな方、正解プリーズ
0673not 672
NGNG// これが気持ち悪くないなら
int a[10];
a[5] = 1;
// これも気持ち悪くないはず
map<string, string> m;
m[key] = value; // m.operator[](key).operator=(value);
と >>669 は主張しているのではないの?
0674673
NGNG// これが気持ち悪くないなら
int i = 0;
printf("%d\n", i); // (print i)
i = 1; // (setf i 1) ;; (setf 0 1) ではない
// これも気持ち悪くないはず
int a[10] = {0};
printf("%d\n", a[5]); // (print (aref a 5))
a[5] = 1; // (setf (aref a 5) 1) ;; (setf 0 1) ではない
と >>669 は主張しているのではないの?
0675673
NGNG#define SETF(field, value) \
do { \
(field) = (value); \
} while(0)
とほぼ一緒。だから
int i = 0;
int a[10] = {0};
map<char*, int> m;
SETF(i, 1);
SETF(a[5], 1);
SETF(m["key"], 1);
0676デフォルトの名無しさん
NGNG読んでるんですが、この本で使われてる loop() の仕様が
よく分らず、後半で苦しんでます。どんなのかというと、
例えば
(defun get (symbol property)
(let ((plist (symbol-plist symbol)))
(loop (while plist nil)
(until (eq (car plist) property) (cadr plist))
(setq plist (cddr plist)))))
こんな使われかたしてます。until が複数回出てくる事もあります。
誰か教えてくださいませ。
# ところで3月には ANSI Common Lisp の翻訳本出ますね。楽しみ。
0677デフォルトの名無しさん
NGNGloop の仕様ならこの辺にあるよ
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node235.html
http://www.franz.com/support/documentation/6.1/ansicl/dictentr/loop.htm
でもややこしいので、俺はほとんど使えない。
0678デフォルトの名無しさん
NGNGScheme の活用例が載っている書籍で、お勧めの物ありませんか?
実装自体よりも活用分野が紹介されているような文献をお願いします。
0679デフォルトの名無しさん
NGNG「湯けむり温泉Scheme殺人事件
Lambda式と末尾再帰に隠された謎
カッコの付け忘れに刻まれた32年前の悲劇」
0680デフォルトの名無しさん
NGNGありがとん。面白そうやねそれ。
32 年前の括弧にどんな秘密が?!
それより、32 年間も scheme のコードを書き続けたのか??
0681デフォルトの名無しさん
NGNG0682681
NGNG0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNG閉じ忘れたまま保存しようとすると「カッコ閉じてません」とか
警告ダイアログだしてくれたり。
0685デフォルトの名無しさん
NGNGANSI Common Lisp入門
Paul Graham著 久野 雅樹+須賀 哲夫訳 B5変 約500頁
ISBN 4-89471-433-7
ANSI Common Lispに準拠した入門書。 Common Lisp Object Sys
tem (CLOS)を使ってオブジェクト指向プログラ ミングを解説している。
Lispと言えば、人工知能か記号処理の例が多かったが、本書は、さ
まざな分野への応用 例を取り上げている:コンピュータグラフィクス、
テキスト生成、HTML生成、並び替え・探索、ファイル入出力、デ ータ
圧縮、数値計算。もちろん人工知能向けの話題もある:パターンマッ
チ、論理推論。
3,900円
0687デフォルトの名無しさん
NGNGSECD は Stack, Environment, Control and Dump ですね。
http://www.lispme.de/lispme/doc/lm_hood.htm
0688デフォルトの名無しさん
NGNGやっぱ、Schemeコードの中にダイイングメッセージが?
しがないPGが温泉旅行に行ってなんか知らんが殺人事件に巻き込まれる。
コンパイルできないSchemeコード。
被害者が最後に打ったと思われるSchemeコードのインデントが
いつものTabではなくSpaceだったことに気づいたPG。
この最後のSchemeコードは果たして被害者が打ったものなのだろうか?
そして、32年前の同様な殺人事件に気付き…。
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNG刑事は藤田まことか古谷一行か?
とりあえず定番の怪しいおばちゃん弁護士は登場させとくか。
0691デフォルトの名無しさん
NGNGこういう処理系って結構多いのかも。
0692デフォルトの名無しさん
NGNGアフォですか?
0694デフォルトの名無しさん
NGNGあぁあ、残念。
LispだのMLだのHaskellだのなんてやってると、Cがとても鬱陶しくなります。
Cは先にやっておくべきだったんでは無いんかと、とか言ってみるテスト。
0695デフォルトの名無しさん
NGNG文系に多い
0696692
NGNGイェイ!!
>>694
自分もそう思いました。というか、
C で書くような事態がないから覚えないのかも知れないけど。
perl とかはテキスト処理によく使いますが。
>>695
ズバリ的中です。アルゴリズムはわかっても
結局コンピュータの動作の基礎がわかってないってことかな。
アセンブリ言語になると、もうちんぷんかんぷん。
0697閑話休題
NGNG普段使ってる処理系でそういう制限があるのは辛くないですか?
このスレの人達だと自作の処理系使ってたりするのかな?
0698●
NGNG0699デフォルトの名無しさん
NGNGコードをEUCで書いて、SJISで入出力する関数を書けばOK。
0700デフォルトの名無しさん
NGNGndbm のあたりで何故か引っかかる。
gdbm 入れて再度挑戦してみようかな。
0701デフォルトの名無しさん
NGNGhttp://mail.gnu.org/pipermail/guile-user/2002-February/002554.html
> XML is very close to S-expressions, and if the Lisp community it been in
> the right place at the right time, perhaps the world would be using
> S-expressions insteda of XML. But it wasn't and it isn't.
もし S 式だったら XSLT なんかいらなかったのにね。
0702デフォルトの名無しさん
NGNG何故 S 式を使わないのか、不思議で仕方がない。
パース楽だし、eval もできるし。
0703デフォルトの名無しさん
NGNGでも「XML World」とかの雑誌が「S式World」とかだったら
きっと売れないだろうな。(おれは買うけど)
0704デフォルトの名無しさん
NGNG"S-expressions World"とかは?
0705デフォルトの名無しさん
NGNGS-XMLとか
XML-LISPとか
適当に名前をでっち上げて、我々で流行らせよう。
0706デフォルトの名無しさん
NGNGXMLだけではなく、XMLSchemaとかXSLTとかも
LISPで乗っ取ってしまおう。
乗っ取って「こんなに便利なんですよ」
そして流行らせれば、一気に我々は時代の最先端。
0707デフォルトの名無しさん
NGNGちょっと長すぎ。「SEXP World」がいいかな、
勘違いして買う奴がいそうだし。
0708デフォルトの名無しさん
NGNGそれって「結局lispの連中は好機を逃してしまうだろう」ってゆってんだよな
皮肉なのかハッパかけてんのか馬鹿にしてんのか絶望してんのか藁ってんのか
0709●
NGNGその点は XML のいいところを取り入れるとイイ
0710デフォルトの名無しさん
NGNGXMLは
<tag>にょろ</tag>
でLISPでは直ぐにはわからない、
「どのカッコが閉じられたか」がすぐわかる。
HTMLの様に終了タグ自体を省略できる可能性がある。
かたやLISPでは
(tag にょり) ;car=>tag cadr=>にょり
表現をS式として取り出せる。けどカッコ読みにくい。
そこでLISPに、カッコの他に
<tag>にょろ</tag> => (tag にょろ)
と変換するロジックをデフォで組み込んでみたらどうか。
<car><cdr>S 式 に 革命 を</car>
=>式
0711デフォルトの名無しさん
NGNG<tag></tag>で囲まれたフィールド(operand)はquoteまたはquasiquoteが
暗黙に掛けられた状態とする。
<car><cdr>S ,式 に 革命 を</car>
は(cadr `(S ,式 に 革命 を))
で「式」を評価したリストがcadrに渡される
0712デフォルトの名無しさん
NGNGたしかにLispでは構文木を直接的に記述することがデータの表現と
プログラムの表現を区別しないという武器につながっているけど、
そんなLispにも具象表現と内部表現の区別はあるわけじゃないですか。
XMLは所詮、具象表現の一種に過ぎないわけで、XML的なコーディング
を要求するなり、受け付けるなりするLispの処理系があっても別にお
かしなことではない。つーか、Lispの本質はそんなところにはないと
思う。
S式ってのはかっこだらけの式のことじゃないと思うんだがね。
0713デフォルトの名無しさん
NGNG言ってることが難しくて理解できなかった
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG0716無名λ式
NGNGhttp://www.jclark.com/
0717デフォルトの名無しさん
NGNG0719無名λ式
NGNG> Sが沢山あると何がうれしいですか
って、>>716の「D"SSS"L」について言っているのかな?
DSSSLは、『Schemeで』SGML documentの変換や整形を行うための規格です。
XML版もあります。ってマジレスでよかったですか?
DSSSL Onlineってのがweb用のsubsetだったはずです。
0720デフォルトの名無しさん
NGNG0721やほー
NGNG具象表現と内部表現ってなに?
勉強します、スマソ。
0722デフォルトの名無しさん
NGNG字面のコードと実際の処理の事じゃないでしょうか?
コード自体は<xml>タグ括り</xml>でも(lisp 括弧括り)でも良いけど、
それを処理系がどう解釈するかに Lisp の本質があると言う事では?
しかしながら、その本質がどういう事なのかは私には分かりません。
誰か詳しい人お願いします。
0723デフォルトの名無しさん
NGNG1-b. XML もデータの記述と関数の記述を、同じ記法で記述できる(?)。
2-a. Lisp は木構造を簡単に表現できる。
2-b. XML も木構造を簡単に表現できる。
0724デフォルトの名無しさん
NGNGXML よく知らないんではずしてるかも知れないけど。
0725712
NGNGCでもPascalでもBASICでもLispでも、その処理系は
ソースコードを構文解析して構文木を作るんだよ。
ただ、Lispの場合、構文木とソースコードの対応が
非常に密というか、ソースコードは構文木を一定の
記法で書き下ろしたものとなっているわけ。リスト
は木構造を表現するだけの力をもっているので、す
べてをリストで表現できている。これがLispの強み。
CやPascalのような言語は、構文解析した後に内部
的に生成された構文木に触れることはできない。
Lispはできる。それこそがLispの強み。
構文解析して構文木を作ること、構文木を直接一定
の記法で書き下ろすこと、という観点からすると、
その一定の記法がXMLの文法でもいっこうにかまわ
ない。つーか、XMLの文法で書かれたLispのコード
を評価するLispプログラムを書くことは簡単でしょ?
そういうことが簡単にできること自体がLispの力。
CやPascalではこうはいかない。
0726デフォルトの名無しさん
NGNG一般化すんじゃねーよ。馬鹿。
0727無名λ式
NGNG> 具象表現
Lispの言うところの印字表現でしょ。
>>723
> 1-b. XML もデータの記述と関数の記述を、同じ記法で記述できる(?)。
関数ってXSLTとか? あれ不自由すぎない?
0728無名λ式
NGNG> ただ、Lispの場合、構文木とソースコードの対応が
> 非常に密というか、ソースコードは構文木を一定の
> 記法で書き下ろしたものとなっているわけ。
なってない言語があったら教えて欲しい、と小一時間問いつめたい
;「Lispの場合」は、この次の文に修飾した方がいい。
;; まあ、perlはaliasがありすぎて駄目だし、
;; Lispも'とquoteの区別は苦手だが。(TAO以外は)
0729701
NGNGそういう意味での Lisp の優位性はわかるよ。
XML 関連の技術って、 XML の構文を使って
その機能を表現するというのがよくあるけど
(XSLT, XML Schema 等)、多少プログラムちっく
なこと表現しようとすると、やっぱり XML は冗長
すぎてだるいよね。
そういうところで Lisp が XML に食い込んでいく
余地ってないかな?
Lisp <--> XML(HTML)
http://opensource.franz.com/aserve/aserve-dist/doc/htmlgen.html
http://www.graco.c.u-tokyo.ac.jp/~kamina/xmltools/
http://opensource.franz.com/xmlutils/xmlutils-dist/pxml.htm
0730デフォルトの名無しさん
NGNG725の言ってることわかってないじゃないの?BNFとかで定義された
構文と、ソースコードが対応してるってな話じゃないよ。
要はlispにはパーサがいらない、ってことなんだよ。CでもPascal
でもソースをパースして構文木つくるでしょ?S式はそれ自体が木構造
になってるってことでしょ。
0732無名λ式
NGNGそれが分かった上で、(分からないlisperがいるのか?)
指摘している文章「が」おかしいと言っているのです。
>>725全体を否定した覚えはまるでありません。
「お前ら、マジでそんなレベルなの?」と高飛車(wだったので、
おかしいところを指摘したい衝動に駆られただけです。
0733デフォルトの名無しさん
NGNGよくは知らんが
そのLispの強みといわれているものは、
Lispの強みというより、それの準拠する計算モデルの強みだ
そしてやはりXMLとそれとの親和性は否定できない
それは、XMLが階層的構造を持っているためだ
しかし、データ構造は一般的に、そういう構造を持っているものが多い。
別にXMLに限られるわけではない
それにもかかわらず、結局の所は命令型が主流であるという事実は、
ある種の推測をもたらすだろう
0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNG712の説明がまわりくどくてややこしいだけ、に一票。
0736デフォルトの名無しさん
NGNGLISPのquote相当のものはあるの?
0737デフォルトの名無しさん
NGNGじゃないじゃん。自己記述的ではあるから、規則を決めれば
Lisp的に評価可能だけど。
0738デフォルトの名無しさん
NGNGそれは逆で、(DTDも含めて)データ表現の方法しかない。
お友達のXSLTの計算能力は貧弱。万能計算器どころの話じゃない。
0739デフォルトの名無しさん
NGNGXSLT について。
http://www.w3.org/TR/xslt#section-Examples
http://www.graco.c.u-tokyo.ac.jp/~kamina/xmltools/transformations.html
をみくらべるとよくわかるね。ま XSLT は変換が目的だから
単純に比べるのはどうかとおもうけど。
0740デフォルトの名無しさん
NGNG0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNGそういうのを頻繁に使うのはあまり感心できない。
単なる式で足りる。
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNG0748教えて
NGNGMFCWIZARD(DLL)で、クラスを持ったDLLを作りました。
次にMFCWIZARD(EXE)でDLLのクラスを使用し、ビルドをしたのですが、
クラスのコンストラクタとデストラクタが(LNK2001外部シンボルが未解決)
と、なってしまいます。
0749デフォルトの名無しさん
NGNG0750デフォルトの名無しさん
NGNGhttp://www-6.ibm.com/jp/developerworks/xml/010914/j_x-xslt.html
XML と Lisp/Scheme な話題って何処でも出てるのね。
検索したらかなりの量がヒットした。
あ、750 ?!
0751デフォルトの名無しさん
NGNGGUI が作れたら、もう他の処理系はいらない。
後は、簡単な rdbms 相当の機能が欲しいかな。
0752デフォルトの名無しさん
NGNGDLLアクセス機能があれば直APIでGUIとODBC程度は使える様になりますが、
recordset相当は自分で書く必要はあるかも
0753デフォルトの名無しさん
NGNGSLIB に Relational Database パッケージみたいのがありましたよ。
使ったことないので、詳しくは分かりませんが。
0754デフォルトの名無しさん
NGNGACL
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNGgauche> (substring "あいうえお" 0 3)
"あいう"
ACL> (subseq "あいうえお" 0 3)
"あ\202"
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGgaucheのページ読みなよ、質問君。
http://www.shiro.dreamhost.com/scheme/gauche/features-j.html
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNGありがとう。
rdms.scm と dbxxx.scm という一連のファイルを見つけました。
これからゆっくりいじってみます。
0761デフォルトの名無しさん
NGNGatom
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG有料版のChez Schemeはインタプリタじゃないよ。中でコンパイルしてる。SML/NJとかと一緒。
http://www.scheme.com/csug/system.html#g2240
0764デフォルトの名無しさん
NGNGはい。
atomは文字aで始まる文字列ですから。
0765デフォルトの名無しさん
NGNG単体でも car と cdr があるので結局 list になるように
思うんだけど。
0766デフォルトの名無しさん
NGNG0767765
NGNGどおりで変な訳だ。
0768678
NGNG上記の本で、状態空間の探索まで読み進めました。
Lisp 系は初めてなのですが、面白くてサクサク進めます。
ところで、>>725 の以下の部分にはどういう時にメリットがあるのでしょうか?
>CやPascalのような言語は、構文解析した後に内部
>的に生成された構文木に触れることはできない。
>Lispはできる。それこそがLispの強み。
>>728 のこの部分に繋がると思うのですが、
>要はlispにはパーサがいらない、ってことなんだよ。CでもPascal
>でもソースをパースして構文木つくるでしょ?S式はそれ自体が木構造
>になってるってことでしょ。
パーサがいらないというので実装が楽と言う事でしょうか?
あるいは、いちいち解析する必要がないので、他のインタープリタ言語と
比べて処理速度が稼げるということでしょうか。
Lisp がデータの構文木を扱い易いと言うのは理解できますが、>>725 が
おっしゃっているのはその事では無いですよね?
話を蒸し返して済みません。
0769デフォルトの名無しさん
NGNGfirst class object という概念がある
http://www.yuasa.kuis.kyoto-u.ac.jp/~takayama/EoPL/2.3.2.html
0770やほー
NGNG0771753
NGNG個人的に read はあくまで「パーサ」であるように思えるんですが。
字句解析器と一緒になってる実装もあるようです。
0772デフォルトの名無しさん
NGNG字句解析器のみってことじゃないのか?スキャナっていうんだっけ?
パーサは構文解析をするんだよね?
0773デフォルトの名無しさん
NGNGこれはアトムかな?
turkey
0774デフォルトの名無しさん
NGNGx86系でオープンソースで参考になる処理系ないですか?
0775デフォルトの名無しさん
NGNGはい。
文字で始まる文字列ですから。
0776771
NGNG字句解析器の仕事は一般的に、ストリームからトークン切り出しを
行い、それを構文解析器にパスする事だと思うんですが、如何?
ドットペアを解析したり、引用符 (') を受けて quote を cons する
ような作業は、字句解析とは言えないと思います。
一応 The Free On-line Dictionary of Computing (ttp://www.dict.org)
で調べてみたんですけど。
0777デフォルトの名無しさん
NGNGこんなのみつけましたが
http://www.cs.cornell.edu/kozen/ECC/
0778デフォルトの名無しさん
NGNGこれはatom?
0779デフォルトの名無しさん
NGNGこれはアトムかな?
1492
0781774
NGNGこれもatom。
0782デフォルトの名無しさん
NGNGこれどう思う?多少同意できない部分もあるけど。
こんな風にコード書く奴いない?
(if x
(progn
...
)
(progn
...
)
)
0783デフォルトの名無しさん
NGNGはい。
1492は十進数の文字列ですから。
0784デフォルトの名無しさん
NGNGこれはアトムかな?
*abc$
0785デフォルトの名無しさん
NGNGインデントの話?
昔悩んだ。
(progn
長い処理シーケンス
...
)
は普通だと思う。
ただでさえネスト深くなる傾向があるんで、適当なところで落としたりする
(defun
(
(
(
(withなんちゃらとか
(lambda()
(let
(...
結局のところ、transcriptすることが多いし、
見せるのが目的なコードはpretty-printに任せる様になった。
0786678
NGNG有難う御座います。
CやPascalのような言語で、構文解析した後に内部的に生成される
構文木を、Lisp は直に操作する事が出来る。
それは S 式自体が木構造だからである。
その恩恵として、Scheme では手続き等を first class object として
扱える、という事ですよね。
少し違うかも・・・。
C や Pascal がどう構文解析されるか勉強した方が良さそうですね。
0787デフォルトの名無しさん
NGNGんー、 if と progn を使うなら cond を使ってほしいということと、
閉じカッコはまとめてほしいということを言いたかったのよ。
(cond (x ...)
(else ...))
こう書いてほしい。
>>782 みたいなコードを C 言語ユーザが書いてきてキレそう
になることってない?
ところで >>784 等でアトムがどうのこうの言っている奴って、なんか
おもしろいの?最後にすごいオチが待っているならいいけど。
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNG(define y 2)
(define z 3)
みたいなとき、xやyなどの値を使ってC言語のswitch文みたいに
一括で分岐したいんだけど、case文じゃできないよね?
(case n
((x) 'x) ;(= x n)となってくれ
((y) 'y) ;(= y n)となってくれ
((z) 'z) ;(= z n)となってくれ
(else 'unknown))
これじゃ意味違うし(w
ほんとはこういう意味なんだけど、
(cond
((= x n) 'x)
((= y n) 'y)
((= z n) 'z)
(else 'unknown))
condじゃスマートじゃない様なきがするし、
うまい方法ないですか?
0792デフォルトの名無しさん
NGNGそういえば Java では「字上げ」をする人がいるらしい。
class Foo {
void bar() {
...
...
}
}
0793デフォルトの名無しさん
NGNGこんなのとか
(cdr(or (assv n
`((,x . x)
(,y . y)
(,z . z)))
'(それ以外はこれ→ . unknown)))
0794デフォルトの名無しさん
NGNG`(setf (cdr ,pair) ,obj))
(setq x '(1))
(set-cdr! x x)
(listp x) ==> ?
(define x '(1))
(set-cdr! x x)
(list? x) ==> ?
0795デフォルトの名無しさん
NGNGというのは、不必要な一時変数の大盤振る舞いをしなくなると言う事で良い?
逆に括弧や goto が沢山ある解読不能なコードを量産する罠も在りですか?
0796デフォルトの名無しさん
NGNGこんなコードを書いてスタックオーバーさせます:
list* search(list* p, int x) {
return (p == NULL)? p : ((p->x == x)? p : search(p->next, x));
}
0797デフォルトの名無しさん
NGNGはい。
*abc$は左かっこ「(」や右かっこ「)」以外の文字で始まる文字列ですから。
0798デフォルトの名無しさん
NGNGこれはリストかな?
(atom)
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNGところでみんな、common lisp の処理系には何使ってる??
0801デフォルトの名無しさん
NGNG>なんか、これは atom? ってのがノイジーなんだけど...
Little Schemer読んでないんだね。
0802デフォルトの名無しさん
NGNG0803なっちは遠い親戚?(○ ´ ー ` ○)
NGNG0804デフォルトの名無しさん
NGNG放射能漏れが気になるな。
0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNGLittle Schemer の日本語版「Scheme手習い」は絶版らしいけど
Little Schemer 英語で読んだの?
0807デフォルトの名無しさん
NGNGすれ違いで悪いんだけど、最近のコンパイラって
そういうコードを loop にしてくれるのかなっと思って
% gcc -O6 -S >>796
とやってみたけどなんかやってくれないっぽい。
やってくれるんなら気軽に Lisp っぽいコードが
書けるんだけどな。
0808デフォルトの名無しさん
NGNG本業で使うときは ACL。
atomer については、ちょっとウザイけど、
もうちょっと様子をみてみよう、という気分。
0809デフォルトの名無しさん
NGNGよんでみたい本がいろいろでてきたんですが、翻訳情報しりませんか?
"ANSI Common Lisp"
"On Lisp"
"Artificial Inteligence A Modern Approach"
"Paradigms of Artificial Inteligence Programming: Case Study in Common Lisp"
どれもまともにやると社会人には時間がかかりそうなので、
ちかいうちに和訳でそうなやつがあれば、それは後回しにして、
翻訳でそうにないやつから読もうかな、なんて
考えてマス
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG(defclass a ())
(defmethod foo ((x a)))
(defmethod bar ((x a)))
(pcl:specializer-direct-methods (find-class 'a))
でエラーになるんだよな。
0813デフォルトの名無しさん
NGNG原書より高かったと思うけど。でも原書もそんなに難しくないよ。
0814デフォルトの名無しさん
NGNGrandom seed の与え方がよくわかりません。
(random 10
(seed->random-state (current-time)))
こんな風に random() に seed->random-state() を与えるんですけど、
seed に current-time() とか与えても何かランダムじゃないような
結果が出てしまって。
例えば
guile -c "(display (random 10 (seed->random-state (current-time))))(newline)"
こうやってもなぜか出力がランダムじゃありません。
seed->random-state の使い方に問題があると思うんですが、
わかる方教えて下さい。
0815デフォルトの名無しさん
NGNG> guile -c "(display (random 10 (seed->random-state (current-time))))(newline)"
> こうやってもなぜか出力がランダムじゃありません。
乱数は乱数系列として初めて意味があることはご存じでしょうか。
上のprogramを複数回実行して比べても意味はありません。
0816814
NGNGするとプログラムの初めの実行でまばらな乱数を得る
にはどうしたらいいんでしょうか。
seed->random-state が hash みたいになっていると
思ったんですが、違うようです。
0817デフォルトの名無しさん
NGNG(current-time) って一秒単位だからそれをもうちっと細かくするとか、
libguile/random.c の
void scm_i_init_rstate (scm_t_i_rstate *state, char *seed, int n)
関数を読んで、 seed の値を工夫してみてはどうでしょうか?
0818デフォルトの名無しさん
NGNGACL だけど
(clos:specializer-direct-methods (find-class 'a))
==> (#<STANDARD-METHOD BAR (A)> #<STANDARD-METHOD FOO (A)>)
となったよ。ちなみに (defclass a ()) は ACL でエラーになるよ。
0819814
NGNGアドバイスありがとうございます。
seed の値に何らかの hash されたものを与えるように
すればよさそうですね。
# しかし均一に hash するものを作るとなると
# 結局自分で乱数発生関数を作るのとかわらないな。
0820デフォルトの名無しさん
NGNGhash は MD5 でいいんじゃない? RFC にリファレンスコードがあるし。
(system "echo hello | md5sum") とズルしてもいいし。
0821814
NGNG> (system "echo hello | md5sum") とズルしてもいいし。
その線でいきます (w
どうせ大したことするプログラム作ってる訳でもないので。
0822デフォルトの名無しさん
NGNGhttp://www.corman.net/index.html
これどうですか?
0823デフォルトの名無しさん
NGNGCreateFileA -> create-file
CreateFileMappingA -> create-file-mapping
CloseHandle -> close-handle
MapViewOfFile -> map-view-of-file
UnmapViewOfFile -> unmap-view-of-file
GetCommandLineA -> get-command-line
CreateFontIndirectA -> create-font-indirect
SQLConfigDataSource -> sql-config-data-source
SQLAllocHandle -> sql-alloc-handle
SQLFreeHandle -> sql-free-handle
0825デフォルトの名無しさん
NGNGDSSSL -> dsssl
GetDC -> get-dc
ReleaseDC -> release-dc
自分で作るしかないでしょうか?
0826デフォルトの名無しさん
NGNG要するにWindowsやJavaで使われる名前から
lisp,scheme用の名前に自動生成するプログラムなんですが。
(VBなんかだとAliasに相当するはず)
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNGべてもあまり情報が見つからないです。guile がインストールされているよう
なので guile を覚えたいのですが、参考になる page とか本とかあったら教
えてください。
emacs-lisp とは結構違うところが多いので難しいです。
0829通行人
NGNGたぶん、Win32 API だと思うけど、名前変換する必要性は?
自分は allegro を使っているのでこんなのを参考にしている。
http://www.franz.com/support/documentation/5.0.1/doc/cl/foreign_functions.htm#A.3%20The%20Lisp%20side%20of%20foreign%20functions
0830デフォルトの名無しさん
NGNG知らん。それに結局、納得のいくものは自分で作るしかない。
>>828
まずschemeの規格書(邦訳有り)を読んで、その薄っぺらさに驚いてから、
SICP(邦訳本:計算機プログラムの構造と解釈)で基本を覚えた後、
Scheme入門(絶版)でSLIBを学習する。
全部webで手に入る。
0831デフォルトの名無しさん
NGNG僕も emacs-lisp から入った口だけど、
lisp のアイデアの主要な所はあんまりかわらないよ。
0832デフォルトの名無しさん
NGNGそんなの lisp 使う必要あるんですか?
sed でも perl でも数行でできることを。
0833すれちがいだけど
NGNG0834デフォルトの名無しさん
NGNG大文字省略単語は一つ一つ記述。
trの部分を列挙して記述すればsedでも可能。
Lisp, Schemeで書かない限り、この話題終了。
0835デフォルトの名無しさん
NGNGhttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#perl.scm
こんなん書いた。これで Scheme で書く。
0836デフォルトの名無しさん
NGNGモードを使っているんですけど、変数名の補完、ヒストリ
等がないためイマイチなんですけど、皆さんどんなの
使ってますか?
0837デフォルトの名無しさん
NGNGあんた、神!
0838デフォルトの名無しさん
NGNGはい。
(atom)はかっこに囲まれてますから。
0839デフォルトの名無しさん
NGNGうんこ
0840デフォルトの名無しさん
NGNG(atom turkey or)
0841デフォルトの名無しさん
NGNGはい。
かっこに囲まれたアトムの集まりですから。
0842デフォルトの名無しさん
NGNGこれはリストかな?
(atom turkey) or
0843デフォルトの名無しさん
NGNGいいえ。
これは実のところかっこに囲まれていない2つのS式です。
1つ目のS式は2個のアトムを格納しているリストであり、
2つ目のS式はアトムです。
0844デフォルトの名無しさん
NGNGこれはリストかな?
((atom turkey) or)
0845デフォルトの名無しさん
NGNGはい。
今度は2つのS式がかっこに囲まれていますから。
0846デフォルトの名無しさん
NGNGこれはS式かな?
xyz
0847デフォルトの名無しさん
NGNGはい。
すべてのアトムはS式ですから。
0848デフォルトの名無しさん
NGNGこれはS式かな?
(x y z)
0849デフォルトの名無しさん
NGNGはい。
リストですから。
0850デフォルトの名無しさん
NGNGこれはS式かな?
((x y) z)
0851デフォルトの名無しさん
NGNGはい。
すべてのリストはS式ですから。
0852デフォルトの名無しさん
NGNGこれはS式かな?
(how are you doing so far)
0853デフォルトの名無しさん
NGNGはい。
かっこに囲まれたS式の集まりですから。
0854デフォルトの名無しさん
NGNGリストの中にあるS式は何個かな?
(how are you doing so far)
それから、それは何?
0855デフォルトの名無しさん
NGNG6個です。
how、are、you、doing、so、そしてfarですね。
0856デフォルトの名無しさん
NGNGこれはリストかな?
(((how) are) ((you) (doing so)) far)
0857デフォルトの名無しさん
NGNGはい。
かっこに囲まれたS式の集まりですから。
0858デフォルトの名無しさん
NGNGリストの中にあるS式は何個かな?
(((how) are) ((you) (doing so)) far)
それから、それは何?
0859デフォルトの名無しさん
NGNG3個です。
((how) are)、((you) (doing so))、
それからfarですね。
0860デフォルトの名無しさん
NGNGこれはリストかな?
()
0861デフォルトの名無しさん
NGNGはい。
かっこに囲まれたゼロ個のS式ですから。
この特殊なS式はヌルリスト、空リストと呼ばれます。
0862デフォルトの名無しさん
NGNGこれはアトムかな?
()
0863デフォルトの名無しさん
NGNGいいえ。
()はリストであるだけです。
0864デフォルトの名無しさん
NGNGこれはリストかな?
(() () () ())
0865デフォルトの名無しさん
NGNGはい。
かっこに囲まれたS式の集まりですから。
0866デフォルトの名無しさん
NGNGlが引数
(a b c)
であるとき、lのcarは何かな?
0867デフォルトの名無しさん
NGNGaです。
このリストの最初のアトムがaですから。
0868デフォルトの名無しさん
NGNGlが
((a b c) x y z)
であるとき、lのcarは何かな?
0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG同意。3日に1個くらいなら我慢できる。
>>862
(atom ()) ==> T
0871デフォルトの名無しさん
NGNG>>870
なるほど、
(atom? ())
は#tを返すね。
名著なのに、バグが残っているとは...
0872デフォルトの名無しさん
NGNG君たちがやっているのは >>839 と同じレベルだぞ。
0873デフォルトの名無しさん
NGNGじゃあ、面白くなってから書き込んでくれ。
0874デフォルトの名無しさん
NGNGバグじゃねーよ
あほか。
いくらネタが無いからといっても、お前の様な書きこみは必要としていない。
自分でスレ立てしてそっちでやってろ。
0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNG0877デフォルトの名無しさん
NGNG0878デフォルトの名無しさん
NGNGそういうの面白いと思うけど、
ここでやることじゃないと思う。
どっかにページ作ってくれたら見にいくよ。
0879デフォルトの名無しさん
NGNGhttp://paming.s7.xrea.com/ykwk166_kai/yukiwiki.cgi?mycmd=read&mypage=IdeaMemo
0880デフォルトの名無しさん
NGNGあのさあ、
(define (atom? x)(not(pair? x)))
なわけよ。
じゃあlist?はどうやって定義する?
0882881
NGNG(adios)
0883デフォルトの名無しさん
NGNG(set! nameA nameB) はセルへの参照(束縛)をコピーする、で合ってますか?
(set! nameA valueA)
(set! nameA nameB) した後で
(set-cdr! nameA valueB) や
(set! nameA valueC) した場合、nameB が参照しているセルの中身はどうなる
のでしょうか?
nameA と nameB が参照している物は常に同じになると思っていたのですが、
実験してみると異なる値が帰ってくるようです。
Scheme を勉強していていきなりつまづいてしまいました。
どなたかご教示下さい。お願いします。
0884デフォルトの名無しさん
NGNG変数の格納場所とは違うんじゃないですか?
0885デフォルトの名無しさん
NGNG;
(define nameA '())
(define nameB '())
;
(set! nameA '(valueA))
(set! nameB nameA)
(set-cdr! nameB '(valueB))
(set! nameB (cdr nameB))
(set-cdr! nameB '(valueC))
(set! nameB (cdr nameB))
(set-cdr! nameB '(valueD))
(set! nameB (cdr nameB))
各行で nameA, nameB を出力してみた結果。
;省略
;省略
;省略
;省略
(valuea) ; nameA のみです。
(valuea)(valuea)
(valuea valueb)(valuea valueb)
(valuea valueb)(valueb)
(valuea valueb valuec)(valueb valuec)
(valuea valueb valuec)(valuec)
(valuea valueb valuec valued)(valuec valued)
(valuea valueb valuec valued)(valued)
何故 nameA のリストの要素数が増加していくのでしょうか?
set! は破壊的な代入ですよね。
0886デフォルトの名無しさん
NGNGstruct Pair {
Object* car;
Object* cdr;
};
void set_cdr(Pair* p, Object* o) {
p->cdr = o;
}
こんな感じででわかる?
0887デフォルトの名無しさん
NGNGvoid set(Symbol* s, Object* o) {
s->value = o;
}
普通の実装はこんな風ではないけど。
0888デフォルトの名無しさん
NGNG済みません。よく判らないです。
C 言語でポインタの操作をしているのですよね?
最初は参照優先で、以下のように考えていました。
(set-cdr! は nameA, nameB 両方に適用されるのに、set! は nameB のみに
適用されているように思えました。)
;; 7 行目から
set-cdr! で nameA, nameB の両方の cdr に valueB を追加する。
set! で nameB の参照先を変更する(この時点で nameA と nameB の参照
は異なる対象に向けられている)。
set-cdr! で nameB の cdr に valueC を追加する。何故か、nameA の cdr
にも valueC が追加されている(何故?)。
リスト優先で以下のように考えると納得がいくような気がします。
;; 5 行目から
set! で nameA の参照先が (valueA) のリスト全体 (car cdr) にセットされる。
set! で nameB の参照先が (valueA) のリスト全体 (car cdr) にセットされる。
set! で '() に valueB が代入される。
set-cdr! で nameB の参照先が (valueA valueB) の cdr になる。 ;; nameA の参照先はリスト全体 (car cdr) で変わらず。
set! で (valueA valueB) の cdr に valueC が代入される。
set-cdr! で nameB の参照先が (valueA valueB valueC) の cdr になる。;; nameA の参照先はリスト全体 (car cdr) で変わらず。
set! で (valueA valueB valueC) の cdr に valueD が代入される。
この解釈で合っているでしょうか?
0889デフォルトの名無しさん
NGNG最初は参照優先で、以下のように考えていました。
(set-cdr! は nameA, nameB 両方に適用されるのに、set! は nameB のみに
適用されているように思えました。)
;; 7 行目から (説明の各行はコードの行に対応)
set-cdr! で nameA, nameB の両方の cdr に valueB を追加する。
set! で nameB の参照先を変更する(この時点で nameA と nameB の参照は異なる対象に向けられている)。
set-cdr! で nameB の cdr に valueC を追加する。何故か、nameA の cdr にも valueC が追加されている(何故?)。
リスト優先で以下のように考えると納得がいくような気がします。
;; 5 行目から (説明の各行はコードの行に対応)
set! で nameA の参照先が (valueA) のリスト全体 (car cdr) にセットされる。
set! で nameB の参照先が (valueA) のリスト全体 (car cdr) にセットされる。
set! で '() に valueB が代入される。
set-cdr! で nameB の参照先が (valueA valueB) の cdr になる。 ;; nameA の参照先はリスト全体 (car cdr) で変わらず。
set! で (valueA valueB) の cdr に valueC が代入される。
set-cdr! で nameB の参照先が (valueA valueB valueC) の cdr になる。;; nameA の参照先はリスト全体 (car cdr) で変わらず。
set! で (valueA valueB valueC) の cdr に valueD が代入される。
この解釈で合っているでしょうか?
0890デフォルトの名無しさん
NGNGset-cdr! で (valueA . ()) の () 部に (valueB . ()) を挿入
set! で nameB の参照先を (valueA . (valueB . ())) の (valueB . ()) に
set-cdr! で (valueB . ()) の () 部に (valueC . ()) を挿入。リストとしては (valueA . (valueB . (valueC . ()))) となる。
set! で nameB の参照先を (valueA . (valueB . (valueC . ()))) の (valueC . ()) に
以下、繰り返し。
要は、変数名(束縛)に注目しすぎて、リスト本来の動きが見れていなかったという事でした。
基本中の基本でしょうか?
885 は某所のサンプルコードを元に、実験コードを作成した物です(実際は再帰を使って書かれています)。
リスト全体と、リストの最後の要素を保持する方法を説明したサンプルでした。
スレッドを無駄に消費してしまって済みません。しかも非常につたない文章でご迷惑おかけしました。
0891デフォルトの名無しさん
NGNG一見してシンプルな問題だけど、結構ハマる所だと思いますよ。
なんか迷ったら、実際の処理系のソースコードを読んでみると良いかも。
0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG(set! x y)
;; x は評価される(Lisp の rplacd)
(set-cdr! x y)
0894デフォルトの名無しさん
NGNG>>2 に書いてある、
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/listproc.html
のセルの絵をみたら多少わかるかも。
0895デフォルトの名無しさん
NGNGただし、symbolと値は環境というテーブルによって関連付ける事ができる。
それが見かけ上、変数としての役割を果たす。
(define symbol 値)
は環境への追加、すでにsymbolが関連付けされていれば更新。また
(set! symbol 値)
はすでに関連付けされた環境の更新。
「symbolを評価する」ということは、
環境テーブルを読みに行ってその値を取り出すこと。
対してset-car!/set-cdr!はcons構造を書きかえる関数。
関数なので全ての引数が評価される。
(set-car! (cons 1 2) 3)
=>(3 . 2)
(define num 10)
(set-car! (cons num 2) 3)
=>(3 . 2)
0896デフォルトの名無しさん
NGNG=>10
環境テーブルの構造は言語によって定義されていないが、
ほとんどの教科書には(擬似的に)alistとして表現される。
((num . 10)
(cons . #<primitive>)
(set-car! . #<primitive>)
(set-cdr! . #<primitive>)
(名前 . 値)...)
set!やdefineはこのテーブルの書き換えを行っている。
0897デフォルトの名無しさん
NGNGそれを実践してる本を参照するのが早い。(有名なのでSICPとか)
0898OLEさん ◆l/oKiJ62
NGNGだいたい名前付きで無い引数でのinvokeが動く、程度です。
実装してるインターフェースは
(win32ole:create Name)
(win32ole:invoke obj wFlags method_name arg...)
(win32ole:uninitialize)
のみです。
0899OLEさん ◆l/oKiJ62
NGNG(win32ole:invoke obj wFlag (arg1 arg2..) ((name1 val1) (name2 val2) ...))
という感じにinvokeを変更して、
(win32ole:WithEvent obj func event_name)
という感じにwitheventを実装するつもりです。
どうしたらいいか良くわからないのがイベントループ回り。
こういうのはScheme的にはどう実装する物なんでしょうか?
ほかに、ここのインターフェースはまずい、とかありますか?
現状ではこんなのが動いてます。
(define ie (win32ole:create "InternetExplorer.Application"))
(win32ole:invoke ie *win32ole:DISPATCH_PROPERTYPUT* "visible" t)
(win32ole:invoke ie *win32ole:DISPATCH_METHOD* "GoHome")
(win32ole:invoke ie *win32ole:DISPATCH_METHOD* "Quit")
(win32ole:uninitialize)
0900デフォルトの名無しさん
NGNG> (define ie (win32ole:create "InternetExplorer.Application"))
> (win32ole:invoke ie *win32ole:DISPATCH_PROPERTYPUT* "visible" t)
(略)
symbolの方がLisp/Scheme的じゃない? どうせ文字列に蛙の簡単だし。
0901デフォルトの名無しさん
NGNGぜひexcel1.pl excel2.plのscheme版を作ってほしい(w
私も作りかけのやつ抱えてますが、なかなか面倒なのでほったらかし・・。
他にもそういう人がいたって事でまた再開しようかな。
自分的にはエクセルで帳票が作れれば十分なんだけど、
まだ起動して表示するまでしかやってない。(VARIANTで一旦挫折)
イベントループは自分で回すやつとVBのDoEvent相当があれば良いと思いますが。
あとコールバック関数の継続の入出力は無理っぽいですね。
再度read-eval-loop相当をコールバック関数上で回す必要がある筈。
SCMだとどうなるんだろ。
0902デフォルトの名無しさん
NGNG大文字小文字が区別されるモードがある処理系じゃないとシンボルで使えないけど、
こんな風にできれば便利かもね
(define excel (create-oleinstance "Excel.Application"))
(excel 'visible #t)
(excel 'destroy)
0903デフォルトの名無しさん
NGNG(define sheet1 (workbook1 'Worksheets 1))
こんな感じでしょうか。
やっぱ戻値の振り分けが大変だなあ・・
wtypes.hのVT_*の部分。
0904デフォルトの名無しさん
NGNGttp://page5.auctions.yahoo.co.jp/jp/auction/e7970908
0905デフォルトの名無しさん
NGNG帯も保存してあるなんてかなり貴重かも・・。
独自仕様なんだよね。
しかしなんで3だけ売りに出すのか気になる。
0906デフォルトの名無しさん
NGNGここ参考にしてがんばってくれ
ttp://www.asahi-net.or.jp/~kv8s-yjm/another/yjamain.htm
0907デフォルトの名無しさん
NGNG(((lambda (x) (lambda (x) (* x 3))) 4) 5)
は、何故 5 が評価され、4 が評価されないのでしょうか?
((lambda (x) (lambda (x) (* x 3))) 4)
のところで (* 4 3) になると思うのですが。
0908OLEさん ◆l/oKiJ62
NGNGうーん。
シンボルでもいいかな、と最初は思ったんだけど、
コアの部分はCでの処理がすけて見える方がいいかな?と
思ってなるべく素のままにしてます。
シンボルにしたりとか、そういう事は上の層で皆が
勝手にやる方がScheme的かなぁ、と思ったので。
>>901
excel1,2ともすでに出来てるんだけど、ちょいと長い。
ここに貼ってもいいかな?とは思うけど、、、
あとVB知らないのでDoEvent相当、と言われても良くわかりません(w
Scheme的に書くとどんな感じか、とか言ってくれると嬉しい。
>(excel 'visible #t)
クロージャを返すのか。
invokeとPropertyputの区別さえ出来れば
そう難しくも無い気もするけど。
上の層で組むのは面倒かな?
(define create-oleinstance
(define obj (win32ole:create "Excel.Application"))
(define (propertyput name value)
(win32ole:invoke obj *win32ole:DISPATCH_PROPERTYPUT* name '(#value)))
(define (invoke-method name args)
(win32ole:invoke obj
(+ *win32ole:DISPATCH_PROPERTYGET* *win32ole:DISPATCH_METHOD*)
name args))
(define (dispatch m)
(cond ((eq? 'propertyput) propertyput)
((eq? 'invoke) invoke-method)))
dispatch)
で、
(define excel (create-oleinstance "Excel.Application"))
((excel 'propertyput) "visible" t)
((excel 'invoke) "destroy")
とかの方がSchemeっぽい気が私はするのですが。
Rubyは=だったらpropertyput、という区別があるけど、
Schemeだとそういう事も出来ないと思うし。
>>906
そこも見たけど、文字列変換とか逃げてるので
むしろ面倒に見えました。
結局海外のサイトで適当なサンプルコード見ながら
書きました。
0909OLEさん ◆l/oKiJ62
NGNG終わった所です。
この次に進むには、
1、ループ周りのインターフェース
2、定数周りのインターフェース
3、処理系
を決めてからの方が良さそうなのでサスペンドしてます。
3は今の所SCMだけど、WinのSchemeって何がメジャーなのか
良く知らないので、皆の意見をききたいと思います。
VC++でコンパイルしやすい処理系の方が、
後のActiveScript化(やる人がいるかは知りませんが)等
との関係からいい気もしますが、そういう事も良くしら
ないので。
定数周りはRubyの実装しか見た事無いのでScheme的には
どうしたらいいのか良くわかりませんでした。
Rubyはクラスにロードしていました。
0910デフォルトの名無しさん
NGNG((lambda (x) (lambda (x) (* x 3))) 4)
この最初のxは何にも使われて無い気が。
((lambda (x) (lambda () (* x 3))) 4)
こういうつもり?
0911デフォルトの名無しさん
NGNGScheme のテキストで、lambda 式の解説にあったのを殆どそのまま
写したものです。
自由変数と束縛変数と言う概念を交えて説明してあるのですが、さらっと
説明してあるだけで、良く分かりません。
最終的にその式はこのように変換され、解が 15 になるらしいのですが、
((lambda (x) (* x 3)) 5)
その過程が良く分かりません。
0912デフォルトの名無しさん
NGNG((lambda (x) (lambda (x) (* x 3))) 4)
この時点で始めの lambda 式の x に 4 が入るが、
この関数はその x の値を無視して
(lambda (x) (* x 3)) こういう procedure を返す。
で、この (lambda (x) (* x 3)) に 5 がわたされるから
15 になる。
始めの x はひっかけ。
0913901
NGNGVBのDoEventはMFCのPumpMessagesや昔のYieldなんとかと役割は同じです。
ところでOLEのイベントってhook関数のことですか?
まだイベントまで考えが及ばないです。
>(define excel (create-oleinstance "Excel.Application"))
>((excel 'propertyput) "visible" t)
>((excel 'invoke) "destroy")
そうそう、こんなのがいいです。
デフォでclosureを返して呼び出しはユーザーに任せると。
インスタンス独自の専用メソッド作って、
(excel-visible #t)とかやるのはユーザーの責任と言うことで。
もし移植を考えるなら、DLLかなんかでFFIの部分だけ作って、
処理系毎の初期化スクリプトやなんかで差分吸収するしかない気がします。
とりあえず比較的メジャーなGuile/SCMで使えれば問題ないと思います。
DrSchemeにはすでにMysterX?というモジュールがあるみたいだけど詳細不明。
cygwinで動作する処理系もいくつかある様なので
最低限、DLLさえ見えれば使用可能って形になるといいと思います。
自分はまだこんなの作ってExcelが表示できたと喜んでる状態です・・
(co-initialize 0)
(define excel (ole-create-instance "Excel.Application"))
(ole-invoke excel "Visible" DISPATCH_PROPERTYPUT 1 (ole-object->variant #t) (ole-make-variant))
(ole-destroy-instance excel)
(co-uninitialize)
0914901
NGNG自分はOLE2/COM関係の本が一冊も手元に無いのが痛い・・
google「Invoke VT_DISPATCH」で検索
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q141759
http://www.microsoft.com/japan/developer/library/dsmsdn/drgui032999.htm
http://www.microsoft.com/japan/developer/library/dsmsdn/DrGUI021099.htm
http://choices.cs.uiuc.edu/gaia/doc/src/OSDependent/html/OLE_8h-source.html
http://choices.cs.uiuc.edu/gaia/doc/src/OSDependent/html/OLE_8cpp-source.html
ttp://www.hcn.zaq.ne.jp/no-ji/reseach/990905.htm
ttp://www.hcn.zaq.ne.jp/no-ji/reseach/991003.htm
ttp://www.hcn.zaq.ne.jp/no-ji/reseach/991007.htm
0915901
NGNGttp://homepage1.nifty.com/markey/ruby/win32ole/index.html
0916デフォルトの名無しさん
NGNG成る程。内側の (lambda (x) (* x 3)) がそのまま返されるのですね。
解説どうもありがとう御座いました。
0917OLEさん ◆l/oKiJ62
NGNGいろいろ調べたんですが、ソースだけコピペして周ってたので、
リンク残ってません。すみません。
現在win32oleのコードとインストール手順を
http://nanasidayomon.hoops.ne.jp/
に置いときました。かなり手抜きですが(^^;
サンプルもie.rbとexcel1.rb,excel2.rb,excel3.rb
の移植版が入ってます。
0918OLEさん ◆l/oKiJ62
NGNGお、そっちも結構似た所まで来てますね。
dll化は結局、
SCMのオブジェクト<->VARIANT
の変換が肝になるのに、これが処理系依存なので
いまいちな気がするんですが。
イベントは、たぶんhook関数の事だと思います。
Ruby版のソースしか読んで無いので良くしりませんが(^^;
イベント周りを考えてる所です。
0919デフォルトの名無しさん
NGNGmacro 活用法を学べる、良い本やサイトを教えれ。
0920名無しさん@Meadow
NGNG>>919 は気になる。「普通のやつらの上を逝け」だっけ?にも lisp といえば
macro だ。みたいなこと書いてありましたね。いろいろ調べてるけど今いち分
からない。でも elisp のパッケージで関数の定義見ようとしたら実はマクロ
だったっていうの発見してちょっと感動した(w
0921デフォルトの名無しさん
NGNG構文を自分で作るってことだよ。
(if (a) (b) (c))
(a) が真で (c) が無限ループするような時、
if が special form かどうかでこの文の動作がかわる。
他にも macro の使い道はあるけど。
0922デフォルトの名無しさん
NGNGPaul Graham の On Lisp
0923901
NGNGうまくまとまってますね。(build.scmが凄すぎ)
>(define get_and_inv
> (+ *win32ole:DISPATCH_METHOD* *win32ole:DISPATCH_PROPERTYGET*))
この辺のフラグの組み合わせ法則がよくわかりませんでした・・
本買ってこないとだめかも。
こちらはなんとかセルに値を設定するまではできる様になりました。
あとはページ設定や罫線が引けたら自分としては満足です(w
VARIANTについてですが、include/oleauto.hに定義されてる、
VariantChangeType()や
VarXXXFromYYY() (YYY型からXXXへ)
で都合の良い型(Date->Stringなど)に変換できるみたいなんで、
VARIANTをほぼそのままscheme-objectにして
oleaut32.dllをdynloadしてapiを直呼びって手もあるなと思いました。
参照変数を引数に渡したい場合とか。(そんな要求があるのか不明ですが)
あと、ここ見たら
http://member.nifty.ne.jp/hippo2000/perltips/index.htm
定数を読みこむ手段がある様ですね。
メリットは自分で使う定数を再定義する必要が無い事?
namespaceの無い言語だとそのまま環境に展開するのは抵抗があるから、
(ole-const->value "xlThin")みたいなことする必要ありかも。
0924919
NGNG「special form でしかできないような構文を自分で作る」てのはわかります。
でも単にそれだけじゃ、そんなにすごくないような気がします。
感動や悟りまではいかないような。。。
「他の macro の使い道」というのが気になるので教えてくだされ。
>>922
情報、サンクスです。
というか、以前から読みはじめてはいたんですけど、
英語っちゅうせいもあって、なかなか読み進まないんですよ。
だからこそ、macro の魔力を理解して、読み進む動機づけにしたい。
(macro に期待しすぎかなあ)
0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG本探すより、
処理系の拡張構文の実装のほとんどはマクロだから参考になるよ
0927922
NGNGそうでしたか。自分も読み切ってはいないんですけど。
自分は、コードをより handy にしたい場合によくマクロを使います。
例えばプログラムのあらゆる箇所で同じ様な処理を行う場合とか、
コードの見た目が美しくない時などですね。
いずれにせよ、関数 (手続き) でできる事は関数で済ませますし、
そうでない場合はマクロを使います。無理にマクロを使う必要は
ないと思いますよ。関数だけでもかなりの魔力を持ってますからね。
0928デフォルトの名無しさん
NGNGemacs で elisp をいじるみたいな環境が理想なんですが、guile emacs 使う
のがてっとり早いですかね。guile + emacs で M-x run-scheme はいまいち使
いにくいんですが。あと windows 環境についてもできたら聞きたいです。
;; 今 SICP のオンライン版を解読しつつ勉強中です。
0929デフォルトの名無しさん
NGNGゴーチエ、ゴーシェ、ガウチョ、と色々悩んだ末だったので、もうガウチェとしか
読めない頭になってしまった。
>>928
要はエディタのマクロを scheme で書きたいって事ですか?
scheme のフロントエンドにエディタを使いたいなら emacs 使えば良いよね。
あと、NGSCM は、使った事無いけどちょっと興味あり。
http://aten.aial.hiroshima-u.ac.jp/Reprints/NGSCM/ngscm.html
>>705
XSCML きぼん。
0930928
NGNGエディタのマクロを書きたいというわけではなくて、scheme の勉強をしたい
んです。M-x run-scheme はちょっと使いにくいんで他にいい方法がないかな
と。emacs 上で elisp 動かすみたいに scheme が動いてくれたら嬉しいんで
すけど、それをやるなら guile-emacs ですかね。NGSCM というのをちょっと
調べに逝ってきます。
0932836
NGNG836 で同様の質問をした者ですが
>>352 で紹介されているやつはすごくいいです。
lisp-interaction-mode とほぼ同様の感覚で
Scheme が使えます。例えば S 式を書いて
[C-j] で評価することができます。さらに
M-tab で補完もできるようになります。
0933836
NGNGちなみに当方の環境は
Windows-2000 + cygwin + guile-1.5.4 + Meadow + emacs-guile
でかなり快適に使えています。
0934928
NGNGあ、禿げしく外出だったんですね。すみません。
でも guile1.4 が make できない。version1.4 以上じゃないといけないんで
すよね...
$ ./configure
$ make
$ su
$ make install
でできないとお手あげな厨房なんですが...
0935928
NGNG0936デフォルトの名無しさん
NGNG環境が書いてないのでなんともいえないけど、
Linux なら rpm か deb がどっかにあるんじゃないの?
Windows なら cygwin 用の rpm が Project HeavyMoon
か >>835 にあるよ。
0937928
NGNG環境は Redhat7.2 と windows2000 + cygwin です。
FAQ にあったとおり ibguile/net_db.c, line 85 をコメントアウトして
guile の make は成功しました。
rpm も探したんですがいろいろあってわけわかんなかったのと src.rpm のイ
ンストール方法がわからなかったので(汗
emacs-guile もすごくよさそうですね。これから遊んでみます。
みなさんいろいろと情報ありがとうございました。
既出の質問をしてしまってすみませんでした。
0938928
NGNGすみません。libguile/net_db.c, line 85 です。
コピペしたら 1文字抜けました。
>>931さん、>>932さんが書かれている通りすごく便利そうですよ :-)
0939デフォルトの名無しさん
NGNG例えばファイルや DB などで
「オープン - 読み書き - クローズ」
みたいなコードは頻繁に現れるけど、
マクロがあれば以下のようなコードを
(setq stream (open "foo.txt"))
;; stream に読み書き
(close stream)
下のみたいに書くことができるようになるけど
(with-open-file (stream "foo.txt")
;; stream に読み書き
)
こう書けると便利だよね?
クローズし忘れもなくせるし。
(ちなみに実際の with-open-file の定義は上とは違うよ)
0940939
NGNG処理系によってはもっと下のレベルで実装され
ているかもしれないけどね。
(defmacro with-open-file ((var &rest open-params) &body body)
`(let (,var)
(unwind-protect
(progn
(setf ,var (open ,@open-params))
,@body)
(close ,var))))
0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNGそれが既に読めないよ・・・。
vi 遣いに優しい scheme 実行環境は無い物か。
シェルのラインエディティングは emacs 互換モードを使ってるから、別に良いけど。
0943デフォルトの名無しさん
NGNG辞書に載ってた。ゴーシュ。
0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNGじゃあemacsみたいにschemeでvi作ってよ
LISP対scheme(=emacs対vi)
みたいでおもしろいじゃん
0947デフォルトの名無しさん
NGNGSCMで実行している環境の持っている環境変数の一覧を得る方法を
探しています。ご存じの方がいらっしゃればよろしくお願いします。
Unix環境で使っています。
0948デフォルトの名無しさん
NGNGgetenvじゃだめなの?
0949デフォルトの名無しさん
NGNG(system "env")
でどう?
0950947
NGNG想定していない分も表示できる方法はないでしょうか。
0951947
NGNGありがとうございます。
これをリストに直せるか試してみます。
0952947
NGNG何度もすみません。
0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNG#\newline で split すればいいじゃん
0955デフォルトの名無しさん
NGNG是非作ってみたいんだけど、Gauche に curses とか readline みたいな
ライブラリってあったっけ? slib にならあるかな。
0956947
NGNGあまりSchemeから出たくないですが、それしかないでしょうかね。。。
( ("TERM" . "kterm") ("PWD" . "home/hoge") ......)のように連想リストの形にしたい
と思っています。Guileも入れてみたので、こっちでも試してみます。
>>955
すでにご存じだと思いますがどうぞ。
http://tanaka-www.cs.titech.ac.jp/~euske/scm/oldindex.html
0957953
NGNGGuile だとこんな感じかな。もっと良いの書けそうだけど。
(map (lambda (str)
(call-with-input-string str
(lambda (port)
(let* ((key (read-delimited "=" port))
(val (read-delimited "" port)))
(cons key val)))))
(environ))
0958デフォルトの名無しさん
NGNG描画部分はviから奪ってくればよし
0959デフォルトの名無しさん
NGNG(define fact
(lambda (n) (if (= n 0) 1
(* (fact (- n 1)) n))))
は末尾再帰を使うと
(define fact-tail
(lambda (n x) (if (= n 0) x
(fact-tail (- n 1) (* n x)))))
のようになるらしいのですが、どのように考えたら下の式のようなものが書け
るようになりますか?
末尾再帰って禿げしく便利そうだということをよく見かけますが、実際に自分
では書けそうな気がしません。
;; 末尾再帰が「引数つき goto」っていうのも、再帰と goto がどう結びつく
;; のかよくわからないんですが。
|⊂ ダレモイナイオドルナライマノウチ
|
Å
♪ / \
♪ ヽ(´Д`;)ノ ランタ ランタ
( ヘ) ランタ タン
く ランタ タンタ
タン
Å
♪ / \
ヽ(;´Д`)ノ ランタ ランタ
♪ (へ ) ランタ タン
> ランタ タンタ
タン
0962デフォルトの名無しさん
NGNGhttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/recursive.html
これとか読んでわからなかったら死にましょう。
0963デフォルトの名無しさん
NGNG( ゚д゚)ポカーン
0964デフォルトの名無しさん
NGNGemacs の lisp-interaction-mode に近くなるよ。
あと mit scheme だけでできてる emacs like editor も
面白いかも。elisp と scheme が入れかわったような感じ。
emacs ほどボリュームはないけど拡張性は同じくらいある。
0965デフォルトの名無しさん
NGNGguile> (use-modules (ice-9 readline))
ERROR: In procedure dynamic-link:
ERROR: file: "libguilereadline", message: "file not found"
ABORT: (misc-error)
となってしまいます。/usr/local/lib の下に libguilereadline.a や .so な
どのファイルがあるのですが、何か設定しなければならないのでしょうか。
Info にはとくに何も書いていないのですが。
0966デフォルトの名無しさん
NGNGvimにschemeを組み込むってアプローチもあると思う。
vim-perl - Vi IMproved - with perl support
vim-python - Vi IMproved - with python support
vim-tcl - Vi IMproved - with tcl support
好きな言語ないから素のvim script使ってるけど、schemeがあれば使う。
0967デフォルトの名無しさん
NGNGreadline は rpm で入ってたけど regex がなかったので、
regex-0.12.tar.gz 入れたけどやっぱりだめだ。。。
0968デフォルトの名無しさん
NGNGまずエラーの原因を特定する。メッセージのとおりなのか、それとも誤報なのか
コード公開されてんだからわかるっしょ。デバッガもあるし、
truss/strace/ltrace系のツール使ってもわかるだろうし。
メッセージのとおりの原因だったら何でダイナミックリンク失敗するか考えてみ。
ld.so.confとか確認したか?
0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGただでさえviなんだからさ(w
0971965
NGNGエラーの原因ですか、、
strace と ltrace というのを今初めて使って調べてみましたが何だかよくわ
からないです。
とりあえず分かる範囲で、/etc/ld.so.conf に /usr/local/lib と
/usr/local/include/libguile を追加して /slib/ldconfig してみましたが状
況は変わりませんでした。続きはまた明日調べてみます。
0972デフォルトの名無しさん
NGNGこれでも歌ってれ!
http://www.gnu.org/fun/jokes/eternal-flame.html
0973953
NGNG閉じ括弧だけの行を作ったり、タブ文字でインデントするような
人達だから。Haskell でも使ってなさい。
0974デバッグスレにすんな
NGNGldd -V guileしてみ
0975vi-lisper なめんな
NGNGvi -l してみ
0976965
NGNGレスありがとうございます。でも新しい問題が発生しました。
$ ldd -V guile
ldd: unrecognized option `-V'
Try `ldd --help' for more information.
となってしまいます。man ldd には確かに -V オプションの説明があるのですが。
$ ldd --help
Usage: ldd [OPTION]... FILE...
--help print this help and exit
--version print version information and exit
-d, --data-relocs process data relocations
-r, --function-relocs process data and function relocations
-v, --verbose print all information
Report bugs using the `glibcbug' script to <[email protected]>
となっています。ldd なんていじってないのになぁ。man とバージョンが違う
なんてことはないですよねぇ。OS は Redhat7.2 です。
;; 板違いになってしまってすみません。
0977デフォルトの名無しさん
NGNGあのさ、>>965のエラーって、
ld.soじゃなくて、guileがlibdlを使って、(dlopen(3)ね)
moduleが必要になったときにやるdynamic linkingだよ。
libguilereadline.so*があるか、
あるならdynamic-linkが使うpathがあってるか調べなよ。
readline.scm:
(dynamic-call "scm_init_readline" (dynamic-link "libguilereadline.so"))
こういうことになってるから。
0978965
NGNG(use-modules (ice-9 readline))
(activate-readline)
This doesn't work in guile-1.5.x out of the box because the default
curent module for the repl is now (guile-user). The workaround is to
place in your .guile file:
(define-module (guile-user))
See NEWS for more info.
もしかして、1.7 では使えないってことでしょうか。
今 windwos2000 + cygwin + guile-1.5.4 なんですが、同じエラーが出ます。
cygwin だからだめなんだと思って昨日はあきらめてたんですが。
LD_LIBRARY_PATH=/usr/local/lib
と libguilereadline.a と libguilereadline.la がある場所を指定してみた
んですがこれは関係ないようですね...
0979965
NGNGら readline 使えるようになった。よかったぁ。
0980デフォルトの名無しさん
NGNGcygwin では "guile" コマンドの make 時に libguilereadline.a
を一緒にリンクしてしまえば readline が使えるようになるよ。
0981デフォルトの名無しさん
NGNGでできるのね。
>>973
tput 等使ってムフフなスクリプトを書いていますよん。
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNGLISP Scheme Part4
http://pc.2ch.net/test/read.cgi/tech/1016211619/
0984
NGNG0985デフォルトの名無しさん
NGNG次スレあるのに。
あまのじゃくさん?
0986デフォルトの名無しさん
NGNGnil でなければ t にするのに適当なのありますか?
(not (null hoge)) ってのはチトカコワルイ
0987デフォルトの名無しさん
NGNGnilでなければtにするのがnotだと思うんですけど……。
ifの代わりならunless、とか?
0988デフォルトの名無しさん
NGNG( ・∀・) ニヤニヤ
( 1000 )
| | |
(__)_)
0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG)彡
10001000 ◆h.gHK9LE
NGNGΛ_Λ < コソーリ
(´∀` ) \__________
∧ ∧ (___,,)_
(.,゚Д゚)/ ̄ ̄ ̄ ̄ /|
│ /∧ ∧ //||
(/___( ,,) _// / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|| ,,/ つ ||/ < 1000!!
|| (__丿 || \__________
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。