トップページ⇒tech
1001コメント328KB

LISP Scheme Part3

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
過去スレ
Part1: 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デフォルトの名無しさんNGNG
□仕様書関係□

Common 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デフォルトの名無しさんNGNG
□その他□

Schemeで書かれた正規表現ライブラリ
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デフォルトの名無しさんNGNG
>>6
CommonLispにはある筈。
たしか+
詳しくは仕様書参照して。
0008デフォルトの名無しさんNGNG
*, **, *** だよ >>7
0009無名λ式NGNG
前スレの>>949
http://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
>>9
すげえな。でも、何の意味が?
シンボルってアトムじゃないの?
0011デフォルトの名無しさんNGNG
>>10
質問の意味がワカラン
0012関数プログラマNGNG
昔はLispではシンボル(アトム)を文字列代りに使っていたので,
シンボルを簡単に分解できるexplode/implodeが重宝がられたそう
です.
001310NGNG
>>11
atomって用語は「それ以上分解できない原子」って意味じゃない?
なのに分解できちゃうのか、みたいな疑問。

>>12
納得。それならわかります。
0014関数プログラマNGNG
HyperLispではatomもリストも同じような構造をしていて,atomの
car/cdrを取ることもできます.

これとは関係ないのですが,昔のマイコン上のLisp処理系では,
atomのcarだかcdrだかを取るとproperty listがぞろぞろと取れ
てしまうものがありました.atomのメモリ上の表現がconsセルと
同じだったからなんですね.実際それを使ったプログラムもあり
ました.うーむ.
0015デフォルトの名無しさんNGNG
>>13
symbol の字面の文字を解析して別の symbol の list を返す
というのは, atom の分解できないという定義とは矛盾しないと
思うけど.
0016デフォルトの名無しさんNGNG
schemeだとこんな感じかな
(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
>(inplode(explode 'abcde))
=>abcde
0018デフォルトの名無しさんNGNG
>>16
s/flatten/apply append/
0019 NGNG
問題

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
>>19
(defun member (item list &rest rest &key test test-not key)
(nthcdr (or (apply #'position item list rest) (return-from member)) list))
0022 NGNG
正解 >> 21
比較的、lisp primitive に精通していると見た。
0023デフォルトの名無しさんNGNG
>>20
consじゃなくてbeginつかえよ。
0024デフォルトの名無しさんNGNG
procの結果をletで受けて評価順序をコントロールすれば良いかと。>20
(let ((r (proc (string-ref s pos)))) (cons r (loop (+ pos 1))))
0025デフォルトの名無しさんNGNG
なんでこんなことになるかというと、関数の引数の評価順序は
特に規定が無いからなんだけど。
副作用のある処理でこの辺気をつけて書かないと
大量のバグを抱え込むことになる。
0026デフォルトの名無しさんNGNG
副作用のあるやつはシーケンスの中に置くべきだけど、
これ間違えたら警告出す様にできない?
0027デフォルトの名無しさんNGNG
ftp://publications.ai.mit.edu/ai-publications/pdf/AITR-474.pdf
0028デフォルトの名無しさんNGNG
>>26
Schemeの場合,任意の式が副作用を持つか持たないかは静的には
(実行する前には)わからないので難しいと思います.
0029デフォルトの名無しさんNGNG
>>27
またなつかしい論文を…

まあ,それにしても G. Steele って天才だと思います.
彼のこの分野への影響力は半端ではない.
0030デフォルトの名無しさんNGNG
>>27
これWeb翻訳しようとしたら、全部画像じゃん。アホか。
PDF使えねー
0031デフォルトの名無しさんNGNG
>>20
コンパイルすると大抵の処理系では右から左への評価順序に
なるんじゃないかと。(理由はCと同じだと思う。)
インンタプリタなら左から右ってのも珍しくないけど。
過去スレに無理矢理評価順序を変えるマクロがあった。
0032 NGNG
Common Lisp でバイナリストリーム扱いたいのですが、
詳しい情報があるページとか教えてください。
0033デフォルトの名無しさんNGNG
検索した?>32
0034 NGNG
考えられる限り検索したんですけど、駄目ですね。
やっぱり、Lisp は バイナリ処理には向いてないのですかね? >> 33
0035デフォルトの名無しさんNGNG
>>30
いったいいつの論文だと思ってるんだか…
スキャンしてオンラインで読めるようにしてくれているだけでも十分ありがたいのに.
0036デフォルトの名無しさんNGNG
>>35
なんだと?この論文オナニー野郎
OCRにぶち込めば済む話だろうが?
0037デフォルトの名無しさんNGNG
>>36
じゃオマエがやれやヴォケ
0038デフォルトの名無しさんNGNG
λなカッチョいいアイコンない?
0039デフォルトの名無しさんNGNG
LISPっていう言語、このスレではじめて知ったんだけど
何する言語?
みなさんどんなことに使ってるんですか?

単に興味持っただけなんですが、教えてくらさいませ・・・・
0040>39NGNG
AIなどでよく使われる,データをリストに変換する高級言語.
0041デフォルトの名無しさんNGNG
汎用言語だよ。
俺はパースなんかに使ってる。
0042デフォルトの名無しさんNGNG
39ではないですが、
僕も最近lispを知って、面白そうだったのでxyzzyでいろいろ
いじってます。

lispだけしかやらない人は少ないと思うのですが
lispをやって得た知識が、他の言語でのプログラム
に役立ったってことはありますか?
0043デフォルトの名無しさんNGNG
リスト操作ライブラリかなんかはLISPの名前参考にしてる。
0044デフォルトの名無しさんNGNG
A Little Schemer 学生のころ読んで感動したなぁ。
あの本たのしいね。

25才を越えてしまったいま、「普通の奴ラの上を行け」を読んで
今年はSchemeきわめようかな、と思うこのごろ。でもRubyもSqueakも
極めたい。
0045 NGNG
Closure とか Macro とか C にはない機能が盛りだくさん >> 42
0046デフォルトの名無しさんNGNG
CにもMacroはあるかモナー
0047デフォルトの名無しさんNGNG
>>46
でもCのマクロとschemeのマクロは全然違う機能だと思うけど。
0048デフォルトの名無しさんNGNG
schemeのコードをパースしたいんだけど、
エレガントな方法ある?
SICPの4章みたいなのが一般的?
004942NGNG
>>45
僕は培風館のLISP(原書3版)というのを使ってやってますが、
そこでクロージャーでジェネレーターを作っているのがありました。
確かにこんな機能はCにはないですねえ。

ただ、ジェネレータを作るたびにそれぞれのレキシカルな環境が生まれるっていうのは
なんだか、クラス作ってインスタンスを作ったみたいな感じがしました。
(って、激しく勘違いしてるのかも知れませんが。)
0050デフォルトの名無しさんNGNG
同じだよ>49
データ付き関数
005142NGNG
よかった。あってて。

しかし、xyzzyでやってるからオブジェクト指向で書けない。
CLOS、おもしろそうなんですが・・・。
0052デフォルトの名無しさんNGNG
>>47
マクロはマクロだけど
lisp の構造上異常に強力になるという
ことだよね。
0053デフォルトの名無しさんNGNG
まあ、Cのは単に文字列置き換えてるのと大差ないし。
0054デフォルトの名無しさんNGNG
Cのマクロは再帰的な展開ができない。
(#defineの中に#ifdefなんかが書けない)
LISPはなんでもあり。
この違いはデカイ
0055デフォルトの名無しさんNGNG
AISTのJava用プリプロセッサーEPPだと、その辺出来るかも。

明日確認しよーっと。
0056デフォルトの名無しさんNGNG
マクロの展開ルールをLISPで書けるのがよいとこかと。
0057デフォルトの名無しさんNGNG
>>15-19 壊滅的な壊れ方ですね。
  データ救助&復旧の予定は?
0058デフォルトの名無しさんNGNG
>>55
できる。あれはLisperの作者がLisp風マクロをJavaでも使いたくて作ったものなので。
0059デフォルトの名無しさん NGNG
>>41

根本的な考え方が身についた。

>>44

どれかを徹底的にやってから次に手を出すのがよいと思われ。

LispとSmalltalkは甲乙つけがたいよさがあるが、Smalltalkは見事な
実アプリはあっても丁寧に内容を説明したないのが欠点。
Lispはいい本がたくさんあるが、"Paradigms of Artificial Intelligence
Programming"を一冊終わらせたらスーパープログラマーになること
間違いなし。
0060デフォルトの名無しさんNGNG
MASMのマクロはなにげに関数型チック
0061デフォルトの名無しさんNGNG
>>20 亀レスだが
mapじゃなくてfor-eachを使えば評価順序は規定されてる。
(ただし値はunspecified。副作用専用。)
0062デフォルトの名無しさんNGNG
OLE使うとかいうハナシはどうなった
0063デフォルトの名無しさんNGNG
>>20
SRFI の map-in-order
0064デフォルトの名無しさんNGNG
ザウルスで動くschemeはないですか?
0065デフォルトの名無しさんNGNG
>>64
ザウルスってCEだっけ?
だったらPocketSchemeで検索
0066デフォルトの名無しさんNGNG
ザウルスってまだあったの?
OSはWindowsですか?
0067デフォルトの名無しさんNGNG
ザウルスはちかぢかLinuxになります。でもWinCEではありません。
独自OSです。
0068デフォルトの名無しさんNGNG
いまどき独自OSが残ってるなんて驚異的だね。
0069デフォルトの名無しさんNGNG
emacsとかxyzzyの様な大作エディタはLISPみたいだけど、
そんなにLISPってすごいの?
0070デフォルトの名無しさんNGNG
>>69
すごいですぅ
0071デフォルトの名無しさんNGNG
LISPは凄いけど、LISPじゃないと大作エディタが出来ない
ってわけでもない。
0072デフォルトの名無しさんNGNG
例えば、vim with perl/python/ruby
0073デフォルトの名無しさんNGNG
パーサーが小さいからだろ?
0074デフォルトの名無しさんNGNG
AutoCADやGIMPもLISPですが。
0075デフォルトの名無しさんNGNG
>>73
そういえば、Omoikane Debian GNU/Linuxのinstallerもschemeでした。
0076デフォルトの名無しさんNGNG
>>74
それってマクロだけじゃ無いの?
本体をLISPで書いている分けではないでしょ?
0077デフォルトの名無しさんNGNG
>>69
LISP も凄いけど、その方言である Scheme はもっと凄い。
これは LISP に環境モデルを加え、言語としてもかなり綺麗。
「環境」をうまく使えば、メッセージ送信、(多重)継承、カプセル化
なども簡単に実現できる。他にも継続なんてものもあるので、
これを使えばバックトラックも可能。Scheme に弱点はあるのかな?
0078デフォルトの名無しさんNGNG
アルゴリズムの実装という点では強いけど,
無敵と考えるのは不遜だよ.
0079デフォルトの名無しさんNGNG
>>77
>Scheme に弱点はあるのかな?

名前空間が1つしかない、とか。
define-publicとかは処理系依存だし。
あとオペレータ操作とかが面倒。
普通の言語ではa:=bと4文字程度で済むのに対し、
(:= a b)とタイプ量が増える。(括弧、セパレータの空白)
独自にリーダー作っちゃえば良いんだけど。
0080デフォルトの名無しさんNGNG
タイプ量ねぇ・・・
Schemeのプログラムはもっと根本的なところで
タイプ量が減ると思うけどね。
008177NGNG
>>79
> 名前空間が1つしかない、とか。
そうですね。これについては拡張 Scheme を使えば良いと思います。
処理系依存になってしまいますが、これは現実的なプログラミング
との妥協点だと思います。Schemeの計算モデルの問題では
ないですね。根本的な問題点で思い付く事ってありますか?
0082デフォルトの名無しさんNGNG
個人的には普通の言語でも空白を入れて欲しいなぁ。
あと、ローカル関数があれば名前空間はなくてたいして困らないと思う。
現実的に一番困るのは動的な型が大きなプログラムではデバグしにくいこと。
0083デフォルトの名無しさんNGNG
そうだね。Schemeの大きな弱点と言ったら、括弧だらけの書式と
静的な型が無いことぐらいだね。
008477NGNG
「動的な型である」というのは、単純に弱点とは言えないと
思います。現実なプログラミングとして「デバグがしにくい」という
のはあると思いますが、それと同時に記号処理の恩恵も受けている
はずですからね。

書式 (括弧だらけ) についても、長所と短所があると思います。
括弧で囲い前置記法にすることで曖昧性がなくなり、つまらない
ミスを減らしているのも事実です。慣れない人とっては奇妙な書式
ですけど。色々なプログラムの設定ファイルを見ると、その長所は
理解してもらえると思います。LISP/Scheme の S 式を使う事で、
書式の統一が出来ますし、混乱することもなくなりますからね。
初心者用には、フロントエンドを用意すれば良いと思います。
0085デフォルトの名無しさんNGNG
長所と短所が同時にでてくるってのは同意だけど、
やっぱりそれでも短所だよ。同時に長所だけどね。(w
0086デフォルトの名無しさんNGNG
今更ですが、、、

>>77 型付ラムダ計算の実習に使えない点
  が弱点かと思います。
0087デフォルトの名無しさんNGNG
>>82
Cは、「Fileローカルな関数/変数があるから、名前空間がない」という流儀で、
バリバリやってきたわけだけど、欲しい…名前空間。
0088デフォルトの名無しさんNGNG
(define hoge::foo (lambda (x) ..
みたいな名前にすると名前空間気分が味わえるよ。
usingのかわりに(define foo hoge::foo)とかする。
0089デフォルトの名無しさんNGNG
>>88
それいただき(w
0090デフォルトの名無しさんNGNG
age
0091 NGNG
問題:
次のようなマクロを Common Lisp で定義しなさい。
> (for x (0 8) (princ x) (princ (+ x 1))
0112233445566778
NIL
0092デフォルトの名無しさんNGNG
>>88
(let ((foo hoge::foo))
...)
で囲んだ方がそれっぽいかも(w
0093デフォルトの名無しさんNGNG
>>91
意味わからん。宿題?
0094デフォルトの名無しさんNGNG
>>19 と同じ人じゃない? 多分宿題じゃないよ.
0095デフォルトの名無しさんNGNG
では聞くがShemeがLispより優れている点は???
009695NGNG
Scheme!! タイプミス スマソ
0097デフォルトの名無しさんNGNG
>>96
シンプルなところ
0098デフォルトの名無しさんNGNG
継続があるところ。
0099名無しさん@EmacsNGNG
Scheme勉強したくなってきたなぁ。Lispより凄いみたいだね。
でも Win じゃまともな処理系が見つからない。DrScheme ってなんか見た目が
好きじゃないし。
0100デフォルトの名無しさんNGNG
>>99
まともな処理系はchezとか、mitとかscmとかbiglooとかたくさん
あるみたいだけど。
なんにせよ見た目で選ぶのはやめたほうが良いよ。
0101前スレに書いたんだけどNGNG
>99
僕もWinのコマンドラインの処理系探し回ったけど
処理系の「アプリ」として一番まともなのはPetite Chez Scheme。
mit,scmはどーもいまいち。
0102デフォルトの名無しさんNGNG
DrSchemeとかSCMは好きだけどなあ。何で駄目なんだろ。
0103デフォルトの名無しさんNGNG
処理系が氾濫してるわりには、使える実装があまり無い気がする。>Scheme
特に実行ファイルで配布できそうなもの。
GUI対応で単体EXEで配布できるようにすれば普及するかもよ?
誰か作らない?
0104デフォルトの名無しさんNGNG
>>103
> 誰か作らない?
そう言われて「じゃあおまえが作れ」という言葉がよく返ってくるのは、
「欲しいけど自分は作れない」人が多いからなんじゃないかと思ったりして。
……という訳で、自分で作ってください……。

Winで実行ファイルが作れる処理系は、わたしはこれしか知りません。
(Cのソースを吐き出す奴だけど)
http://www.kt.rim.or.jp/~qfwfq/rhiz-pi/index.html

UNIXなら、guileなんかが割と使えそうな感じなんですけどね……。
0105103NGNG
>>104
EXEで配布だけ、ってのは自作で持ってる。
やたら遅いのでお蔵入りしたけど。
スキルのある人登場しないかな。
やっぱネイティブにコンパイルしないと駄目だよ。
0106デフォルトの名無しさんNGNG
>>105
それ下さい
0107103NGNG
>>106
仕事で使ってるので公開できない。
おれはコレ作るのに(片手間だが)2年費やしてる。
2年前はLISPなんてまったく知らんかったやつがだ。
キミもそれぐらい苦労すれば作れるだろう。
某スレでは1週間で作ってたやついたし。
0108デフォルトの名無しさんNGNG
一瞬、2chでLISP板ができたのかと思った。
http://pc.2ch.net/cdr/
0109デフォルトの名無しさんNGNG
まさか、と思ったら、やっぱりあった(笑
http://natto.2ch.net/car/
0110デフォルトの名無しさんNGNG
nullとconsはないようですな。残念(w
0111デフォルトの名無しさんNGNG
nilきぼーん
0112デフォルトの名無しさんNGNG
>>108-109の板にネタスレ立てたくなったけど、我慢我慢・・
0113デフォルトの名無しさんNGNG
ソース付きのlispのものすごく小さい処理系無いですか?
リスト、シンボル、整数、apply、eval、gcぐらいでいいんで。
0114CD-R??NGNG
>108 その板とても需要があるとも思えないんだけど...
0115デフォルトの名無しさんNGNG
>>113
パロディー版アスキーにBASICで書いたlispのソースがあります。
0116デフォルトの名無しさんNGNG
BSデジタル放送板よりはうごいてそうだね<cdr
0117名無しさん@EmacsNGNG
>>113
ttp://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
0118デフォルトの名無しさんNGNG
>>117
>小学4年生の時に作った、はじめての Lisp 処理系の名前が CAMPUS LIsP でした。
天才か?

と思ったら、読み間違えでした。
s/小学/大学生/
0119デフォルトの名無しさんNGNG
>>113
昔、アスキーから出てた「Cプログラムブック」の第3巻に
Will'O Lispってのが掲載されてた。
丸々一冊の本でLispインタプリタの最小実装をまず作って
それから少しづつ機能を増やしていくって構成だった。
MS-Cで書かれたたんだけど、それをX68K上で動かすように
いじくった憶えがある。

著者は小西弘一・清水剛

LinuxかFreeBSD用にリファインして再販キボンヌ。
0120デフォルトの名無しさんNGNG
で、配布するに足るexe/dllを生成するWindows向けSchemeコンパイラは?
0121デフォルトの名無しさんNGNG
>>120
ください。
0122デフォルトの名無しさんNGNG
Chez有償版って単に実行時にコンパイルするだけで
exeを作ってくれるわけじゃないんだっけ?
0123あげNGNG
>>122
> Chez有償版
有償版では、作ってくれたような気がします。
0124デフォルトの名無しさんNGNG
つーか、自作したいんだけど、
スタンドアロンでEXEやDLL作るための情報、誰かお願いします。
0125デフォルトの名無しさんNGNG
>>124
winならMSDN
0126デフォルトの名無しさんNGNG
native化って、gcが絡むとむずかしくない?
0127デフォルトの名無しさんNGNG
単にインタプリタとスクリプトexeに押し込むだけじゃないの?
0128デフォルトの名無しさんNGNG
あ、そうなんだ・・。
bytecodeのレベルまでならgc気にしなくても書けるかな。
探索とかの生成が無いコードだとnativeにしても問題ないね。
0129デフォルトの名無しさんNGNG
インストラクションコードに直すまではまあ努力次第として、
一番厄介なのはEXEやDLLのヘッダ部分なんだけど。
MSDNに載ってる?
0130親切な人NGNG

ヤフーオークションで、幻の人気商品、発見!!!

今は無き「コピーガードキャンセラー」↓
http://page3.auctions.yahoo.co.jp/jp/auction/c15158602

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0131デフォルトの名無しさんNGNG
>>129
MSDNに少しだけ載ってたような載っていないような・・
「Windows System Internal」か、そんな感じの名前の
本にPEファイルフォーマットについて詳しく載ってた。
今、手元にその本がないから詳細不明。
0132デフォルトの名無しさんNGNG
LISPのメリットを教えてくれー
Cとか、JavaとかC++みたいな言語と比較してね。
0133デフォルトの名無しさんNGNG
過去ログでも見れ>132
ここや、「型無し言語逝って良し」スレとか。
0134デフォルトの名無しさんNGNG
>>132
emacsのマクロがかける。
0135デフォルトの名無しさんNGNG
>>134
C/C++やJavaだと書けないね。
0136デフォルトの名無しさんNGNG
リンカ&ローダーっていう本が出てる。ま、いちおう
0137Lisp って雲を描いてるみたい(括弧の事ね)。NGNG
Lisp のマクロって何が凄いのでしょうか?
使ってみりゃ分かるみたいな記述が多いですが、初心者には何に使えば良いのか分かりません。
色々読んで、C のマクロと同列に語ると失礼になると言う事は分かりましたが。
0138デフォルトの名無しさんNGNG
>>137
使ってみりゃわかる
0139デフォルトの名無しさんNGNG
>>137
とくべつ使う用途がないなら、ムリに使う必要ないよ。
0140デフォルトの名無しさんNGNG
>>137
知らずに使ってる場合が多い。
0141デフォルトの名無しさんNGNG
拡張構文や、CLOSみたいなオブジェクト指向あたりは、
すべてマクロで作られてる可能性が高い。
実際、Cでいうところのenum列挙子やstruct/union,sizeofなんかは
マクロで書いた。
0142デフォルトの名無しさんNGNG
DrScheme で、ユーザーからの入力を受け付けるような処理はどうやって書くんですか?
scanf() みたいな。
0143デフォルトの名無しさんNGNG
>>142
DrSchemeは知らんけど、SLIBにscanfそのものがあったと思う。
0144デフォルトの名無しさんNGNG
そう、入出力に関してはSLIBを使えばCライクな物が一通り揃うんだよね。
getchとかは無いけど。
0145デフォルトの名無しさんNGNG
http://kyoto.cool.ne.jp/suzakumon/gallery/tactical/gallery-tactical.htm
ここの
X−COM:ALLIANCE
というコーナーに、面白い記事が載ってる。

「中でも一番の特徴は驚異的なAIである。タイプ的にはSWAT3の様なリアルタイム方式なのだ
が、簡単な命令で非常に複雑な行動を地形やシチュエーションに応じて自動的にやってのける能力を持
っているのも同じ。ただしもっとずっと頭が良いという事であり、これがE3のベストに選ばれた最大
の理由だった。AIの作成には世界でTOPクラスのマサチューセッツ工科大学のロボット班が協力してい
るそうで、感情パラメータ導入により人間的な振る舞いを見せてくれるとの事。発売されればPCゲーム
界に革命を起こすとまで言われている期待作である。」
0146デフォルトの名無しさんNGNG
>>145
なんの話?
0147デフォルトの名無しさんNGNG
protable common loopsというのをインストールすると
CLOSになるという話を聞きましたが、PCLというのは
フリーなんでしょうか。
xyzzyにのせられる?そんな話題を聞いたこともないの
で無理なんでしょうが。
0148デフォルトの名無しさんNGNG
私の知る範囲では、Clispには10年位前に Portable Common Loops が移植されてたと思います。
0149148NGNG
ってゆーか、PCLは、Xeroxが出したCLOSの原案だったよーな気がする.

Freeで入手できるCLOSってあるんですか?
0150デフォルトの名無しさんNGNG
SLIB のインストール方法がわからん。
WIZARDRYの謎解きよりも難しいじゃん。
0151デフォルトの名無しさんNGNG
>>150
上手い
0152デフォルトの名無しさんNGNG
>150
たしかrequireをちゃんと設定するんだと思われ
0153デフォルトの名無しさんNGNG
訳そうかと思って諦めた。身代わりキボンヌ。

Lisp 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デフォルトの名無しさんNGNG
滅茶苦茶です……。
exite翻訳以下のところさえあるでしょう。

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デフォルトの名無しさんNGNG
>>150
Winだったら、解凍した後、環境変数SCHEME_LIBRARY_PATHにSLIBフォルダを
設定をして、開発環境に合わせた"〜.init"というファイルがSLIBフォルダに
入ってるので、そのファイルの中身を編集する。
編集の仕方はフォルダの場所の所を適切に変えて、software-typeをMS-DOSにする。
それで、そのinitファイルを開発環境からloadするとrequireが使えるようになる。
もしも開発環境がSCMだったら、はじめからSLIBを前提としてチューニングが
なされてるので、環境変数を設定するだけでいい。
あと、Dr.Schemeは初期化ファイルをSLIBとは別に既に用意してるので、
環境変数設定した後それを使ってもいい。ヘルプデスクで「SLIB」と検索すれば
使い方がわかる。
0156デフォルトの名無しさんNGNG
SCMはインタプリタの中では速いらしいけど、Win2000でMS-DOS版を
使ってると速さを感じないなあ。
Dr.SchemeやScheme48 for Winなんかと大差ないような気がする。
chezが一番速いような気がするんだけどどうかな?
0157デフォルトの名無しさんNGNG
あとMITのインタプリタは激遅い気がする。
0158デフォルトの名無しさんNGNG
mit の学生は mit のもの使ってんのかな.
0159デフォルトの名無しさんNGNG
リンカ&ローダにはGuy Steeleという名前の人がコメント寄せてるけど、
これはあのビット別冊の人ですかね。
0160デフォルトの名無しさんNGNG
Guy Steeleってそんなに無名かな。
Lisp界隈では最大級の有名人だと思うけど。
0161デフォルトの名無しさんNGNG
Lisp→HPF→Java と渡り歩いてきた私は、
自称当社の Guy L. Steel Jr.担当 です.

他社にも Steel担当者って結構居るらしいです.
0162デフォルトの名無しさんNGNG
Wirth程度には有名だよね。
0163デフォルトの名無しさんNGNG
Steeleのことを萩谷先生が天才と言ってたような気が。
0164デフォルトの名無しさんNGNG
http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-jp&rank=+salesrank&field-keywords=Scheme&bq=1/ref=sr_aps_allb__/250-7214469-6555423
アマゾン japan で Scheme と入れて検索。
5件ヒット。
そのうち、4件は入手不可で、実質一つしか選択肢が無い。泣き笑
0165デフォルトの名無しさんNGNG
>>164
1.プログラミング言語SCHEME
 R.ケント ディヴィグ (著), その他 単行本 (2000/05/01) ピアソン・エデュケーション
↑これね。今時めずらしい本、と思っていたら、他はほとんど入手不可なんだ...

(中略)
4.FD ソフトウェアライブラリ Scheme
 湯浅 太
    〜〜ふとしってだれだぁ? 太一せんせーか(笑)
0166デフォルトの名無しさんNGNG
http://www.amazon.co.jp/exec/obidos/ASIN/4879669547/qid=1010341084/sr=1-3/ref=sr_1_0_3/250-7214469-6555423
は結構新しい本でしたよね……。
0167デフォルトの名無しさんNGNG
どうして入手不可なんだろぅ...
0168デフォルトの名無しさんNGNG
>>167
『入門SCHEME』は絶版らしい。
いまは著者のページで公開されてるよ。
0169デフォルトの名無しさんNGNG
http://www4.ocn.ne.jp/~inukai/artificial_j.html
ほんとに。
0170デフォルトの名無しさんNGNG
おばかな >>435 はほっておくとして、、、

高階関数 と 高階論理 の (類似性) を
誰か説明してくませんか?
0171デフォルトの名無しさんNGNG
>>170
http://pc.2ch.net/test/read.cgi/tech/1007387924/
もしかして、ここに書きたかった?
0172デフォルトの名無しさんNGNG
https://www.honya-town.co.jp/servlet/jp.co.honya_town.p3.HSsearchServlet?ipg=1&iqm=2&isc=999999&ici=ZB01&ibo=scheme&itm=0&ib1=1&ib2=2&ib3=4&ib4=8&ipu=&iop=0&iau=&ioa=0&isy=&ism=&iey=&iem=&ifr=&ifm=0&iol=20&ipr=0&ibt=0&iis=&x=0&y=0
>>164
ここだともうちょっと増えます。
0173デフォルトの名無しさんNGNG
うはっ。。直リン禁止。
http://www.honya-town.co.jp/ で、↓サテライトトップページへ↓から
「Scheme」で検索。
0174ごNGNG
どなたか、Gauche を cygwin 環境で使っているひといませんか?
0175デフォルトの名無しさんNGNG
↑前にソース落としてビルドを試みたけど結局失敗
その後chezの存在を知り今に至る(藁
0176デフォルトの名無しさんNGNG
>>172-173
ありがとうございます。
0177ごNGNG
>175
ふむー、chez ってマルチバイト文字対応はいかがですか?
0178not 175NGNG
> (display "表表表表")
_
↑うまくいきません。
> (display "あいうえお")
あいうえお>
     ↑これはプロンプト
>>177
7ビットで切ってあるという事は無いようですけど、Shift-jisの問題が……。
0179ごNGNG
>178
ありがとうございます。
そうですか、やはりマルチバイトは……
0180デフォルトの名無しさんNGNG
>>178
一応(display "表\表\表\表\")で回避。
0181デフォルトの名無しさんNGNG
>>180
そりゃちょっと厳しい。2バイト目が「\」の字なんて「表」以外知りませんから……。
工夫が必要か。
0182デフォルトの名無しさんNGNG
>>162
Wirthの方が有名だし権威だろ。
比較の対象がちがってないか?
0183Steele <NGNG
>>182 スレ違いで恐縮だが


「さよならファインマン」ちう本に写真が載ってて、

中央には椅子に座った、冗談物理学者のファインマン先生、
その横に立って談笑しているのは、数式処理ソフトMathematicaのウルフラム氏が、
背景には、シンキング・マシン社の超並列コンピュータ CM-1 (by ダニエル・ヒルズ)
が写っていた。従って、

  ファインマン > ウルフラム > ダニエル・ヒルズ > Guy Steele

  量子電磁気学 > 数式処理ソフト > 超並列機 > プログラム言語

なのは確か。
   
0184デフォルトの名無しさんNGNG
これ、メチャクチャワロタ
【オカルト】   λ..........トボトボ
http://curry.2ch.net/test/read.cgi/occult/1010105764/l50
0185デフォルトの名無しさんNGNG
>>181
SJIS駄目ならEUC使えば?
0186181NGNG
>>185
で、表示の時には変換?
……それが楽そうです。
0187すたすたNGNG
lisp 系の言語をつかっていて(正確には最近 emacs をゴリゴリカスタマイズしたいと思って勉強し始めて)おもったんですが、
括弧が激しく入れ子になるのをみてるとなんか forth のようなスタックマシンを連想します。
コンピュータサイエンス的に見て、この感覚って、あってます?
あんまり学問の人じゃないんで、感覚で、としか言えないんですが…
0188名無しさん@EmacsNGNG
http://www.amazon.co.jp/exec/obidos/ASIN/4756118054/qid=1010545785/sr=1-5/ref=sr_1_0_5/250-8508605-3661811
アスキーの青い本は Info で読める elisp-manual を訳しただけのものだって
読んだ気がするけど本当?買おうにも近くの本屋に置いてないし。
Info で読めるなら買うの迷うんだけど。
0189デフォルトの名無しさんNGNG
>>187
あってません。
0190デフォルトの名無しさんNGNG
>>188
あれはFSFへの募金と思って購入するものです。
0191デフォルトの名無しさんNGNG
>>182>>183

訳分かんね…
0192名無しさん@EmacsNGNG
>>190
ということはやっぱり elisp-manual と中身はいっしょなんですね?
日本語版読んだけどあんまり分からないから買うのやめよかな(w
とりあえず立読みするために本屋探します。
0193192NGNG
前ちょっと本読んだら対応する括弧に飛ぶ関数が書いてあったような気がする
んだけど Info 見てもそれらしいのがないな。どの辺にある?
0194すたすたNGNG
>189
そうでしたか。
なんとなくスタックにリストが積まれていってるような気がしたものですから。
0195デフォルトの名無しさんNGNG
>>194
Lispでいうリストは連結リスト(linked list)ですから、
スタックには積みません。
car、cdr、consの仕組みを学べば、すぐにわかることです
(というかLispの基本中の基本です)。
0196デフォルトの名無しさんNGNG
>>193
何をしたいの? カーソルを一番内側のかっこの先頭に移動させたいとか?
あるいは、カーソルの直前にある閉じかっこに対応するかっこの先頭に移動したいとか?
いずれにせよ、search-backword-regexpを使えば一発だと思えますが。
0197182NGNG
>>191
おいおい、183が分からないとしても、
182は分かるだろ
Wirthの方が有名だってことだよ。
それ以外のことは云ってないぞ。
0198デフォルトの名無しさんNGNG
>>197
> Wirthの方が有名だってことだよ。
> それ以外のことは云ってないぞ。

比較の対象(>>182)違わないでしょ。
プログラミング言語の実際的なことが中心の人でしょ、両方。
Oberonのタイプシステムの研究に相当するようなやや理論的なこと、Steeleはやってないけど。

それにWirthが圧倒的により有名なのは、昔の話でしょ。
0199デフォルトの名無しさんNGNG
>>196
>カーソルの直前にある閉じかっこに対応するかっこの先頭に移動したい
って isearch-backward-regexp(?) でできます?
0200デフォルトの名無しさんNGNG
>195
リストを構成する要素の順番を逆転してみれば、
>194 の感覚もあながち完全な間違いとはいえないかもね。
でもそれはすでに lisp とはいわないかも。
0201デフォルトの名無しさんNGNG
>>199
backward-sexp でどう?
0202デフォルトの名無しさんNGNG
>>200
linked listがメモリ上でどう表現されるか知っててそういう発言?
0203デフォルトの名無しさんNGNG
>>198
そんな君に
http://www.acm.org/awards/taward.html
0204アホにアホレスNGNG
>>183
feynman が死んだのは 1988年。
mathematica が世に出たのも同じ頃。

wolfram が feynman と談笑してたのは mathematica がすごいのでなく
wolfram がすごかったからです。

参考URI:
http://www.apple.co.jp/solution/education/hed/success/mathmobile/
0205デフォルトの名無しさんNGNG
>202
スタックって双方向リンクリストで実現できるかなーと。
0206デフォルトの名無しさんNGNG
>>205
スタックってFILOでしょ。トップ以外をポイントできないじゃんよ。
リストは任意の要素をポイントできるでしょ?
0207デフォルトの名無しさんNGNG
>>205
双方向でなくてもええんちゃう?
ちなみにスタック2つあれば、リストも表現できるよ。
0208デフォルトの名無しさんNGNG
lispのputpropを
common lispに移植してください。
おながいします。
0209ついでにイタチ買いレスNGNG
>>204
WolframってCaltechだったんだー。ひょっとして
Feynmanのアドバイジーなんじゃないの?
Hillsは、たしか「さようなら[...]」にFeynmanが
TMIに首突っ込んだ話をHills自身が書いてた気がする。

まぁ、183はアホだけど。
0210デフォルトの名無しさんNGNG
>>208
putpropって何?つーかどのlisp?
put/getみたいなもん?
0211デフォルトの名無しさんNGNG
スタックはトップから相対アクセスできてこそ使い物になると思うんだが、どうか。
0212デフォルトの名無しさんNGNG
>>208です。

>>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デフォルトの名無しさんNGNG
183ですが何か?

s/電磁気/麻雀/
0214デフォルトの名無しさんNGNG
Gauche,やっとFreeBSDでまともにビルドできたーよ。
なかなかよいので age

http://www.shiro.dreamhost.com/scheme/gauche/index-j.html
0215デフォルトの名無しさんNGNG
>>211
え? pushとpopしかできないのがスタックなんじゃないの?
0216 NGNG
質問:
CLISPでUnicode対応でcatを作ろうとしたんだけど、
日本語コードが入ってるとエラーがでるんだが、ここらへん詳しい人いないかな?
0217デフォルトの名無しさんNGNG
質問の意味がまったくわかりません。
catは標準入力を標準出力に書き出すコマンドでしょ?
Unicode対応もクソもないと思うのだが。
0218デフォルトの名無しさんNGNG
>216
catならCで作った方がいいだろ。
0219216NGNG
説明不十分で申し訳ない。この場合はファイルを入力して、単に表示するだけ。
> (cat "hoge.txt") ;; hoge.txt は Unicode ファイル

やはり、open()で :external-format とか指定するのかな?
0220216NGNG
いちお、ソース

(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
>>221
気のせいれす。
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
>>215
アセンブラのSP+nとかBP+nの様なことだと思われ。
0225デフォルトの名無しさんNGNG
>>223
(try
  <try-sequence>
 finally
  <finally-sequence>)
↓
(unwind-protect
 (begin try-sequence...)
 (begin finally-sequence))
みたいなのもあるといいな
これぐらいはすぐ組めそうだけど。
0226デフォルトの名無しさんNGNG
>224
いつのまにかデータ構造の話になっているようだけど。
最初に >187 が受けた印象や >200 の逝っていることは、
リストの評価はは主記憶に保持されている各リストたちへのポインタを
スタック push, pop しながら進行する、ということなのだとオモワレ。

リストへのポインタを push, pop しながら動作するスタックマシン、これでいいんじゃないの?

あと、>211 が逝ってる(そして >215 が突っ込んで >224 がフォローしてる)スタックはアセンブラレベルで見ての話ね。
C 言語の関数呼び出しのときなんか、引数+戻り先PCをひとまとまりでかんがえたら >215 が正しくて(そしてスタックの定義から言えばこちらが正しい)、
積まれた複数の引数のそれぞれにアクセスする必要があることを考えれば >211 が正しい。
Lisp に関係ないので sage。
0227デフォルトの名無しさんNGNG
>>223
頭の体操がてらに作ってみた。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
>>228の式を展開するとこうなるはず。
(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
>>220
コンソールはUnicodeを表示できるコンソールなの?
僕の知る限り、Unicodeを表示できるコンソールって、
Mule-UCSをインストールしたEmacsのShellモードくらい
なのだけれど。
0231デフォルトの名無しさんNGNG
>230
コンソールとは限らないだろ
0232216NGNG
その前に read-line() 自体が UCS-2 に対応しているかどうかも不明です。
UNICODE から MBCS への変換関数とか知らないですか?
もしないなら、バイナリオープンして自前で実装するしかないのかな >> 230, 231
0233216NGNG
補足:
Cで言うところの fgetws() と wctomb() みたいたもの LISP にないかな?
0234デフォルトの名無しさんNGNG
>>225
(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
>>233
だからさ、8bitストリームを読み込んで8bitストリームに書き出せば
いいだけじゃないの? catなんでしょ?

文字単位で何かの処理をするわけじゃないんだから、wcstomb()なんか
何に使うのよ。
0236デフォルトの名無しさんNGNG
UCS-2だったら、16bitの固定長だよね。
いよいよwcstomb()なんか要らないと思うけど。
0237216NGNG
read-line 自体が 0x0D 0x00 0x0A 0x00 (改行)を認識できるわけ? >> 236
それから 8bitストリームにしても Unicode 文字を出力するわけだから
プリント関数自体が ワイドバージョンじゃないとまずいじゃないの? >> 235
0238デフォルトの名無しさんNGNG
>>227の連続let->let*変換plus版
(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
>>228のtest展開結果
(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))))
0240223NGNG
>>227は神!
ホントに作ってくれる人が現れるとは...
感謝!
0241デフォルトの名無しさんNGNG
カッコを減らす試みつーのはなかなか面白いもんだね
0242デフォルトの名無しさんNGNG
最近知ったんだけど、
=>
の使い方をおしえてください
0243デフォルトの名無しさんNGNG
condで使うんじゃないの?>242
0244デフォルトの名無しさんNGNG
今日はじめてSICPの日本語訳を読んだ。
あまりの訳の下手さに絶句した。
あのクソ訳に4000円も払う「まぬけX」「金持ちO」がいると考えると「笑えてX」「畏敬の念が湧き上がってきたO」
気の利いた大学生の方がもっとよっぽど良い訳をすると思われ。
少なくとも、あのレベルでは、翻訳事務所のトライアルも通らないのは確実。
0245デフォルトの名無しさんNGNG
同意。なんとかしてくれ>244
0246デフォルトの名無しさんNGNG
(define (call/fopen filename mode proc)
 (var fp (fopen filename mode)
  (and fp
   (try (proc fp)
    finally (fclose fp)))))
悪くないかも
0247デフォルトの名無しさんNGNG
>>244
でも技術系の翻訳って難しいよね.日本語として流暢な訳にしてしまうと,
「原文とは違う表現だ,これは誤訳だ」と言って騒ぐ人も多いし.
一字一句逐語的につき合わせができないと,訳が間違ってると思ってるみたい.
もともとそんなことできないのに,違う言語なんだから.
0248デフォルトの名無しさんNGNG
>247
原書で読めってことだね。
0249デフォルトの名無しさんNGNG
>>244
I am MANUKE! HA!(T_T)
0250249NGNG
> MANUKE
a MANUKE
0251デフォルトの名無しさんNGNG
>>237
何が問題なのかわからないので、自分でもCLISPをインストールしてみるわ。

# プリント関数がワイドバージョンじゃないと困るとはまったく思えないん
# だけどね。
0252デフォルトの名無しさんNGNG
SICP は web で原文が公開されているから,
意味がよくわからない所は原文にあたると
すんなりわかったりする.

かといって全部原文で読むよりはやはり日本語の方が
わかりやすいんだよな.
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デフォルトの名無しさんNGNG
>>253
lispは使ったことあんま無いけど、それって

(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デフォルトの名無しさんNGNG
(apply max lst)
0257デフォルトの名無しさんNGNG
>>255
与えられたリストが空の場合、0が帰るのでいいの?
候補がないんだから、最大値は得られるべきではないのでは?
0258デフォルトの名無しさんNGNG
>>37
Cでcatを実装するとして、ワイド文字が必要とか思ってたりしませんよね?
0259デフォルトの名無しさんNGNG
>258
cat だからね。 wc じゃないからね。
単純にバイトごとに読んで書く、これでいいんじゃないの?
0260デフォルトの名無しさんNGNG
CLISPコンパイル中。時間かかるねえ。イヤになっちゃうよ。
0261デフォルトの名無しさんNGNG
>260
バイナリ拾ってくれば?
0262デフォルトの名無しさんNGNG
http://clisp.cons.org/
0263デフォルトの名無しさんNGNG
ためしてみたけど、日本語は問題ない。
ただ、cygwin上では改行コードのところで動作がおかしい。
UCS-2の場合、CRは\0\r、LFは\0\nになるんで、そこがダメだ。
cygwinの場合、改行コードの扱いをUNIX互換にするために操作するので、
そこでうまくいかなくなる。UTF-8なら、期待通り問題はない。
でも、この問題はcygwin特有の問題だよな。
バイナリストリームを利用すれば問題ないよ。
ちなみにformatではなくwrite-lineを使った。
0264デフォルトの名無しさんNGNG
失礼。
CLISPの拡張機能で文字のエンコーディングや改行コード問題は全然解決できるわ。
UCS-2からSHIFT-JISの変換とか、最初から持ってるじゃん。
0265デフォルトの名無しさんNGNG
>263
(cygwinじゃない)windowsバイナリあるみたいだけど。
0266デフォルトの名無しさんNGNG
たぶん、216氏は
(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))
    ))
0267216NGNG
ご協力感謝します。早速動かして見ます。>> 266氏

疑問なんだが、C で Win32 API で WriteConsoleW()で UNICODE 文字を引数に
してきちんと出力できるのは API 内で UCS-2 -> S-JIS 変換してるのかな?
0268デフォルトの名無しさんNGNG
Win の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?
Win の Scheme で日本語 OK なのって無いですよね?

あったら教えて下さい。
0269デフォルトの名無しさんNGNG
>>268
Chez&EUC
0270デフォルトの名無しさんNGNG
>>269
ありがとう、っておい!

# 御免なさい。つい興奮してしまいました。
# Win/Scheme のお手軽日本語環境なんぞ無いって事で良いですか?
0271デフォルトの名無しさんNGNG
>>270
Kawaはどうですか?
0272デフォルトの名無しさんNGNG
>>271
ありがとうございます。
Java VM で Unicode が使えるという事ですよね。
今 ftp からゲット中です。

;; Gauche が Cygwin で使えたら・・・
0273デフォルトの名無しさんNGNG
>272
> ;; Gauche が Cygwin で使えたら・・・
同意………
今後に期待age
0274デフォルトの名無しさんNGNG
>272
>;; Gauche が Cygwin で使えたら・・・
でもさ、無理やりコンパイルすればつかえるようにならないかな?
gcの辺りがネックっぽいね。
暇ができたら試してみるよ。
0275デフォルトの名無しさんNGNG
>271
kawaいいかもね
0276デフォルトの名無しさんNGNG
一応.
cat っていうのは文字コードとは関係ないものですよね.
ファイルのバイナリのシーケンスをただ標準出力にはき出すだけの.
0277デフォルトの名無しさんNGNG
>>276
同意。>>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デフォルトの名無しさんNGNG
Guile Emacsってどう? 日本語通る?
0279デフォルトの名無しさんNGNG
kawa なんだけど、DOS consoleへ の表示がおかしくない?
リアルタイムで表示されない。
0280デフォルトの名無しさんNGNG
>279
そうなんだよね。
対話的に使いたいときはGUI版を使いなさい。
コンソール版はファイルに書いたコードを実行するときに使うなり。
0281デフォルトの名無しさんNGNG
JEmacs...遅そうだけど、面白そう。
0282デフォルトの名無しさんNGNG
Cygwin で Gauche インストール完了。

configure, make, make install だけで何やらちゃんと動いている模様。
DOS 窓から直接日本語の入力は出来なかった。

make test しなかったけど、とりあえずと言う事で。
0283デフォルトの名無しさんNGNG
Lisp = 某開発者の気まぐれ言語
・・・まぁ使えるんなら出自などどーでも良いのかも知れソが
やや鬱
0284デフォルトの名無しさんNGNG
>>282
NT系OSなら日本語入力できるんじゃない?
0285デフォルトの名無しさんNGNG
>>268
clispが日本語つかえるんだったら、
pseudo-scheme試してみるとか。
・・・まどろっこしすぎるか。
0286デフォルトの名無しさんNGNG
>>283
ほらそこ!negativeな発言すんな!(w
つくりが単純なのは十分なメリットだぞ
0287268, 282, etc.NGNG
>>284
Me なんですよ。Linux 入れようかなと思っていた所でした。

>>285
とりあえずファイルに書いたコードを実行する分には日本語が使える
ようになったので、しばらくこれで逝きます。

(display "表表表表") も OK でした(当然か・・・)。
実はこれが初めての Scheme です。
0288デフォルトの名無しさんNGNG
記号って、名前だけなの?
値なし?

強引に宣言するなら、
int foo = 1;
symbol bar;
ってことなのかな・・・。
0289デフォルトの名無しさんNGNG
記号に値を束縛することはできますが、それが何か?
0290デフォルトの名無しさんNGNG
>>283
> Lisp = 某開発者の気まぐれ言語

当時はFORTRANのリスト処理ライブラリがたくさんあった。
Lispの源はその中の一つで、他のライブラリの影響も受けて発展した。
一人の気まぐれじゃないよ。
0291デフォルトの名無しさんNGNG
>290
Lisp と C++ とアセンブラぜんぶてばなせない。
まぁアセンブラはいいとして Lisp と C++ ケコーンしたプログラム書きたい。
Gauche てのはいいですか?
0292290NGNG
なんで御指名なんか分からんが、SWIG/guile/libguileもなかなかいいよ。

source取得してexampleでも見てね。
Debianなら、apt-get install swig-examples libguile6-devだな。
0293デフォルトの名無しさんNGNG
>292
> なんで御指名なんか分からんが、
なんとなく(笑

Debian なんで、apt-get します。
0294 NGNG
Common LispからPostgresSQL使いたいんだけど、
Implementation何使ったらいいの。情報求む。
0295デフォルトの名無しさんNGNG
むーん。>>266はバイナリ版だとうまく動かない。
どうもコンソールがCP932対応と決めうちされている。
日本語版のVisualC++かBCCでコンパイルしたバイナリ
があればいいんだが……。

# cygwinでソースからコンパイルしたので間に合ってはいるけれど。
# 他人に勧めるのはバイナリ版のが楽なんだがなあ。
0296デフォルトの名無しさんNGNG
>>294
Common 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=
0297290NGNG
>>293
> なんとなく(笑

あっそ。ま、俺もC++マンセーなんでいいや。

>>294
Debian使いですか(w
http://ww.telent.net/cliki/Debianにあるapt-lineを入れて、
apt-get intall uncommonsql-postgresql
0298デフォルトの名無しさんNGNG
ttp://village.infoweb.ne.jp/~fwhw5892/cygwin/index1.html

Cygwin で guile の make に成功している人がいました。
patch も公開して下さっているようです。
0299デフォルトの名無しさんNGNG
guile の make 失敗。

>tarball の解凍でエラー; and-let*.scm というファイル
>(アスタリスクを持ったファイル) を含むため。

これって何とかならんのかね。
0300デフォルトの名無しさんNGNG
win版のguileって無かった?
0301デフォルトの名無しさんNGNG
つーか手元にguile-1.4.zipてファイルがあるんで間違いはないかと
0302デフォルトの名無しさんNGNG
>>tarball の解凍でエラー; and-let*.scm というファイル
>>(アスタリスクを持ったファイル) を含むため。
>
>これって何とかならんのかね。
既に,CVSの方ではand-let-star.scmになってたと思う.
次のリリースくらいには直ってるんじゃない?
0303デフォルトの名無しさんNGNG
状態の保存/復帰ができるlisp or scheme処理系ってない?
0304デフォルトの名無しさんNGNG
あ、状態の保存/復帰というのは、インタプリタを終了したら、
そのときの状態をファイルに書き出しておいて、次回起動したら
そのファイルを読みこんで高速に復帰できるという意味です。
0305デフォルトの名無しさんNGNG
transcriptについて言っているのなら、みんな持っているんじゃないの?
0306デフォルトの名無しさんNGNG
guile って Mingw 版もあるのね。バイナリ落ちてたよ。
ところでこれって単体で GUI は作れないのでしょうか?
0307デフォルトの名無しさんNGNG
>>303
smalltalk の image ファイルみたいなのかな?
Python で言うと pickle 見たいな関数が欲しいんだよね??
0308デフォルトの名無しさんNGNG
おい、最新の情報処理学会論文誌にTAOが乗ってるぞ!
bitで連載してたころからもう15年近くたってるんだけど…。
0309デフォルトの名無しさんNGNG
guile を組み込んだ win のアプリってあるのか?
というか、そもそも作れんの?
0310デフォルトの名無しさんNGNG
>>309
GPLに汚染されるのでは……。
0311デフォルトの名無しさんNGNG
>310
そういう話ではないのでは…。
0312303NGNG
>>305
transcriptみたいのじゃなくて、
Object指向で言う、シリアライズや永続化インスタンスの様なものです。
多分>>307さんの言ってるイメージが正しいと思います。
あったら面白い運用ができそうな気がするんですが。
0313デフォルトの名無しさんNGNG
>>312
CLISPの場合、saveinitmem関数でメモリイメージを保存できる。
http://clisp.cons.org/impnotes.html#image

で、起動時に-Mオプションでメモリイメージを保存したファイルを
指定する。

たぶん、これで期待通りだと思うけど。
0314303NGNG
>>313
まさにそれです。
ありがとうございます。
0315デフォルトの名無しさんNGNG
汚染という用語を使う会社といえば、、、
0316デフォルトの名無しさんNGNG
schemeもう飽きた。C#やろっと
0317デフォルトの名無しさんNGNG
そろそろ春かなあ・・
0318デフォルトの名無しさんNGNG
んがとっと
 (んが とっ と)

0319デフォルトの名無しさんNGNG
>>318
これ?
((lambda (x)
(list x (list (quote quote) x)))
(quote
(lambda (x)
(list x (list (quote quote) x)))))
0320デフォルトの名無しさんNGNG
'lambdaも長いから記号化できないかなあ
'λだと2バイトだし。
0321デフォルトの名無しさんNGNG
>>320
マクロ定義一発でわ。
0322デフォルトの名無しさんNGNG
>321
いや、それはそうなんだけど
quoteの'みたいな、しっくりくる略記号ないかなと。
0323デフォルトの名無しさんNGNG
あ、半角キャラクタ文字で
0324デフォルトの名無しさんNGNG
意味が通じる範囲で、今は'lam'使ってるんだけど
0325デフォルトの名無しさんNGNG
>>320
\
0326デフォルトの名無しさんNGNG
大文字のLなんてどうですかね。
Schemeでは大文字のシンボルを使う慣習はないし。
0327デフォルトの名無しさんNGNG
>326
大文字小文字区別されないんじゃなかった?
guileはそうでもないみたいだけど
lはすでにlistの変数名で良く使うし
0328デフォルトの名無しさんNGNG
((lam x x) 1 2 3)
=>(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
>>329
値という意味なら同じだけど、評価のステップ数?という意味ならちがうかも。
0331デフォルトの名無しさんNGNG
>>313
それだ、自作のschemeに組み込んだけど、確かに起動はめちゃめちゃ
速くなる。これはgc使う処理系にはお勧めかも。
イメージをEXEに結合すればそのまま配布もできそうだしね。
だけど、単純な状態退避/復帰だけでは色々な問題が発生するんだよ。
ファイルや、gcで管理されてないメモリなどの外部リソースのことをちゃんと
考えてやらんと・・・。
suspend前に外部リソース用の復帰用関数を登録して、
resume直後に呼び出す様にして解決したけど。結構しんどいかも。
0332デフォルトの名無しさんNGNG
へ?、どうやって保存するの?
0333デフォルトの名無しさんNGNG
>>329
list関数は、各要素を評価した上でリストの要素とする場合に使うよね。
(list
  (car '(1 2 3))
  (car (car '(1 2 3)))
  (car (car (car '(1 2 3)))))

0334デフォルトの名無しさんNGNG
誰か、コピーgcを再帰呼び出しやスタック使わないで実装する方法教えてくり
consのcdrはループに出来たんだけど、carがなあ・・
0335デフォルトの名無しさんNGNG
Mingw 版の guile で Windows でも日本語入力・処理がばっちり。
GUI が気軽に作ればもっと良いんだけど。
0336名無しさん@EmacsNGNG
正規表現などをそなえた、
テキスト処理向きのscheme処理系は何ですか?
0337デフォルトの名無しさんNGNG
Gauche は開発者自身がテキスト処理等を手軽に出来るようにという目的で
作成されたそうです。
Guile でも正規表現は扱えたと思います。
日本語が扱える、大抵の Scheme なら可能なのではないでしょうか。
あとはプラットフォーム等の、別の要件によると思います。
0338名無しさん@EmacsNGNG
>>336です。
Guileに正規表現あったんですね。regexpさえあれが満足なんです。
参考にした邦訳が古かったのかな。
http://www.kt.rim.or.jp/~kbk/guile/guile_toc.html
>>337 さん どうもありがとうございました。
0339デフォルトの名無しさんNGNG
>>338
guile は使った事が無いのですが、ここには
>Guile は正規表現によるパターンマッチングをサポートしている
と書いてありました。

http://www.unixuser.org/~euske/doc/scm-sd7/
0340名無しさん@EmacsNGNG
>>336です。今日からguileプログラマになりました。
しかし、作業がはかどりません。
Emacs Lisp の lisp-interaction-mode や describe-function の
ようなものはありませんか? あとシンボル名補間もほしい。


0341デフォルトの名無しさんNGNG
>340
Emacsでやってた作業なら、そのままEmacsでやりゃいいじゃん
つーか
>lisp-interaction-mode や describe-function
って何?知らん奴は無視か?
0342デフォルトの名無しさんNGNG
scheme-mode とか使うんでは?
ただ、対話性や補完がどの程度あるのか疑問。
0343デフォルトの名無しさんNGNG
素のscheme
対話性:標準入出力以外無し。コマンドをS式で用意してる処理系はあるだろうけど。
補完:無し。
guileはreadline組み込んでるんじゃなかった?
bash程度の補完機能は望めるかと。
0344デフォルトの名無しさんNGNG
GNU kernelはともかくとして、、、
LispMachineみたいなシステム作るんだって逝ってたんだから、
Emacs位は LispMachineやInterLisp並の便利環境 (VBぽいかも)
を揃えて下さい>>rms方面
0345デフォルトの名無しさんNGNG
Emacs なら
(setq scheme-program-name "guile")
して M-x run-scheme するといいよ.
0346デフォルトの名無しさんNGNG
guileは真のschemeじゃないみたいだけど、
実際それで困ることってあるかな
0347デフォルトの名無しさんNGNG
>>340
~/.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デフォルトの名無しさんNGNG
guileって1.4から上がった?
0349名無しさん@EmacsNGNG
>>347 (・∀・)イイ!!
補間も履歴も効いて快適です。

>>346
まじですか! 真ではないのはどこですか?
0350デフォルトの名無しさんNGNG
>>348
guile> (begin (write (version))
... (newline))
"1.7.0"
guile>
去年の夏にCVSから取て来たまま。いまどこまで行ってるか確認したらまた来ます。
0351デフォルトの名無しさんNGNG
>真のscheme
カコイイ
0352名無しさん@EmacsNGNG
Guile Emacs のWeb に行ったら、びっくりするほど便利なもの見つけました。

http://prdownloads.sourceforge.net/gemacs/emacs-guile-0.2.tar.gz

西田さんが作った emacs-guile です。 Guile Emacs ではありません。
scheme-interaction-mode が (・∀・)イイ!!
guile-scheme-mode では M-Tab で補間も効く、これすごすぎ。
0353デフォルトの名無しさんNGNG
emacsってWindows環境でつかえるの?
0354デフォルトの名無しさんNGNG
>>353
スレ違いの上に、googleあたりで検索すれば一発の質問だな。
0355デフォルトの名無しさんNGNG
>>353
君には無理だ YO!!
0356名無しさん@XEmacsNGNG
>>353
MeadowかXEmacsだな。http://www.xemacs.org
0357デフォルトの名無しさんNGNG
>>352
(・∀・)イイ!!
0358名無しさん@EmacsNGNG
Guile って多言語化の計画ある?
多言語化された scheme ってありますか?
0359デフォルトの名無しさんNGNG
>>358
多言語化って何?
unicode使えたら多言語化っていうの?
0360デフォルトの名無しさんNGNG
>>359
unicodeと多言語化は、近似値としてはイーコールだろ?
unicode1.0に欠点は多くあるが、unicocdeは存在すること自体に意義がある

気に入らないなら、自分で作れ
0361デフォルトの名無しさんNGNG
>>360
多言語化ってのは色々な意味があるよな。
localeに対応してエラーメッセージが変化するとかな。

Unicodeが使えればいいなら、Kawaがあるし、
Gaucheなんかも英語と日本語に対応しているから多言語ではあるね。
マルチバイト文字を文字として認識するかどうかって話をしてるんなら、
この辺がそうだよ。
0362名無しさん@EmacsNGNG
>>358です。
多言語化、言われてみれば曖昧な質問でした。
私が考えていたのは。

正規表現で
"あ.い+う*"

文字定数として
#\あ

が、理想です。
別に同等のことができれば、満足です。


0363デフォルトの名無しさんNGNG
>>362
Gauche
0364名無しさん@EmacsNGNG
>>348
> guileって1.4から上がった?

>>350
"1.7.0"

本当? 今日のスナップショット見たら、1.5.4だった。
NEWS によると、これからはLinux的Version番号らしく、
奇数の1.5.4は開発版。安定版は偶数の1.4らしい。
0365350NGNG
$ pwd
/..(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 の近況が知りたい也。
0366sageNGNG
シマタ id host サラシテシマタヨ(^^;
0367デフォルトの名無しさんNGNG
正規表現って、リストに対してもできるの?
0368デフォルトの名無しさんNGNG
これ考えたやつ天才?
http://www.csl.sony.co.jp/person/masui/papers/JSSSTDmacro/dmacro.el
0369デフォルトの名無しさんNGNG
>>367
文字列を対象としたものでは無理でしょう。
SICP の 4 章の、非決定性計算を参照すると良いと思います。
0370デフォルトの名無しさんNGNG
clならsequenceとして同じ様に使えるんじゃない?
0371デフォルトの名無しさんNGNG
今仕事上Winなので、とりあえずDrSchemeを落としてみた。
Lispはかじったことがあったけど、微妙に構文が違うんだね。
さて、遊んでみよう。
0372デフォルトの名無しさんNGNG

newlisp っていうのがあるが、どうよ。

http://www.newlisp.org/
0373デフォルトの名無しさんNGNG
>>371
一応。
ちゃんとFull Schemeに設定しましたか?
Language->Choose Language
0374デフォルトの名無しさんNGNG
それにしてもLispな人たちって、どうして新しい処理系を作りたがるかね。
中途半端な処理系ばっかりではないか。

もっと団結して一つの処理系とその開発環境をつくって欲しいと願うものであるがいかがよ?
0375デフォルトの名無しさんNGNG
>>374
お前は何系ですか?
0376デフォルトの名無しさんNGNG
Lispは実装が簡単だから、自分のやりたいことに特化した実装が
作られるってのはあるよな。

でも、Common LISPの制定作業は「団結して一つの処理系」を作
る作業だったと思うけどね。

開発環境にしたって、金を出せば相当なものが手に入るし。

C言語において「団結して一つの処理系とその開発環境」が
つくられたことってあるのかね、フリーなもので。

# GNU Stepはいつまでたっても完成しないし、
# GNOMEやKDEあたりも、まだまだでしょう。
0377デフォルトの名無しさんNGNG
>>374
Emacsはしっかりした処理系・開発環境だと思われ。
Schemeじゃないけどね。
0378デフォルトの名無しさんNGNG
誰かマルチスレッドで scheme 実装,
しかも過去の elisp を全て利用できる
emacs 使ってくれ.
0379デフォルトの名無しさんNGNG
使ってくれ → 作ってくれ
0380名無しさん@EmacsNGNG
elisp 勉強中なんですが scheme ってそんなにいいの? elisp と具体的にどこ
が違うんですか?
0381名無しさん@EmacsNGNG
>>378
> 誰かマルチスレッドで scheme 実装,
> しかも過去の elisp を全て利用できる emacs

Guile はマルチスレッド対応しているようだし、
Guile Emacs は elisp が動作することが前提なので。
Guile Emacs か?
0382デフォルトの名無しさんNGNG
>>380
elispと比較したときのschemeの最大のアドバンテージは、
俺にとってはレキシカルスコーピングだってところだなあ。

elispは名前空間の汚染を避けるためにパッケージ名を変
数名のprefixにしないと仕方ないので、ついつい変数名が
長くなる。その点、schemeはレキシカルスコーピングだか
ら、安心してローカル変数に短い名前を使える。
そこがイイ。

あと末尾再帰を繰り返しとして評価してくれるところか。

elispの場合、本質的には再帰で書ける処理を、実用上の
理由からループで書かないといけないことがあるのがダサ
い。これがschemeだと末尾再帰を繰り返しに最適化して
くれるので、そこもイイ。
0383デフォルトの名無しさんNGNG
関数の中で一時的に関数を定義したい時とかに
scheme の方が自然にできるのがいいね.
cl 使えばいろいろ便利にはなるけど.

変数と関数を変に区別しない方が
いろいろすっきり書けるような気がする.
0384378NGNG
>>381
Guile Emacs ってどのくらい使えるんかな.
使えるとしても, あんまりマイナー過ぎて
五年後に消えてたりするようなら使うの躊躇するね.
0385デフォルトの名無しさんNGNG
Schemeを知ってから、elispを書いてるときでも
「ここで継続があれば一撃なのに!」とか感じるようになった。

elispに○○がほしい、と思ったことはあまりなかった。
それもそうだ。どんな強力なアイデアでも、その存在を
知らなければ、「この機能が足りない」と考えるわけない。
0386名無しさん@EmacsNGNG
>>382
> elispは名前空間の汚染を避けるためにパッケージ名を変
> 数名のprefixにしないと仕方ないので、ついつい変数名が
> 長くなる。その点、schemeはレキシカルスコーピングだか
> ら、安心してローカル変数に短い名前を使える。

間違っていますよ。
0387デフォルトの名無しさんNGNG
>>386
え? elispってダイナミックスコーピングじゃなかったっけ?
0388デフォルトの名無しさんNGNG
ダイナミックスコーピングだよ。でも、だからといってローカル変数に短い名
前を使えないってことになならないんじゃない?
0389デフォルトの名無しさんNGNG
>>388
ダイナミックスコーピングの場合、
ある関数の中から、その関数で定義したローカル変数を
破壊するような別の関数を呼ぶことが可能じゃない?
0390デフォルトの名無しさんNGNG
>>389
それはダイナミックスコーピングなんだから当然。
でも、elispでのプログラミングスタイルでは一時変数を使う場合は必ずletで
束縛してから使うということになってる(バイトコンパイラも警告を出す)から
他の関数を呼び出す際もローカル変数を破壊しないと期待していい。
あくまでもお約束でしかないけど、Emacsの標準ライブラリもそれを前提に短
い名前使いまくりで書かれてるわけだし。
0391名無しさん@EmacsNGNG
>>386です。
>>389
なるほど、そういうことですか。
そんな弊害は気が付きませんでした。

しかし、この問題を避けるために局所変数にまでパッケージ名の
prefix を付けるとは完璧主義者ですね。
0392デフォルトの名無しさんNGNG
>>390
そっか。警告出してくれるんだ。
ダイナミックスコーピングだって話を知った瞬間から
警戒しまくってたよ。thanx。
0393デフォルトの名無しさんNGNG
でも、だったらレキシカルスコーピングにしてくれればいいのに。
ダイナミックスコーピングであることを利用しているパッケージが
存在するってことなのかなー。
0394デフォルトの名無しさんNGNG
>>392
警告を出すのはあくまでもバイトコンパイラであって、評価時ではないので気
をつけてね。あと、elintなんてパッケージもあるです。

>>393
(let ((global-variable 'hoge))
(hokano-kansuu))
みたいなのは多用されてる。
0395デフォルトの名無しさんNGNG
>>394
elispのletって、schemeのfluid-letみたいなやつだっけ?
0396デフォルトの名無しさんNGNG
大学ノートの裏表紙にー♪
0397デフォルトの名無しさんNGNG
さなえちゃんを書いたのー♪

って、これ何?誤爆?
0398デフォルトの名無しさんNGNG
>>395
ダイナミックスコーピングなんでletはSchemeのfluid-letと同じだと思う。
一つのletでグローバル変数とローカル変数を同時に束縛したりすることも
多いから、そのままレキシカルスコーピングに移行するわけにもいかないのかも。
lexical-letとか新しいspecial formを用意すればいいのかな。
0399デフォルトの名無しさんNGNG
>>396=397
ご苦労さま

0400デフォルトの名無しさんNGNG
>>376
処理系と仕様を勘違いしている、と一応つっこんでおく。
0401デフォルトの名無しさんNGNG
lexical-let って cl にそのままありますよ.
0402デフォルトの名無しさんNGNG
>>397
>fluid
0403デフォルトの名無しさんNGNG
>>401
知らんかった。thanx。
レキシカルスコーピングな defun は無いのかなあ。
0404名無しさん@EmacsNGNG
scheme の set! は納得がいかん。

(define x '#(1))

てして、長さ1のベクタへ x をバインドしておきながら、

(set! x '#(1 2))

どうして、そこに長さ2のベクタを代入できるんだ?
その点 string-set! は納得がいく。
0405デフォルトの名無しさんNGNG
set! は cons cell 自体の書き換えだからね。
(define x "hoge")
して、長さ4の文字列に
(set! x "hogehoge")
できるでしょ。

中身を書き換えるのは
vector-set!
0406名無しさん@EmacsNGNG
>>404 です。
挙げ足とりですが、scheme では コンスセル は ペア というらしいです。

(define x "hoge")
(set! x "hogehoge")

これができるということは、私としては set! は代入ではなくて、
バインドしているようにしか思えないです。

なんで、4文字しか確保してないのに、8文字も入ちゃうの?
そうか、バインドかー。って感じです。

でも、バインドじゃーないんですよねー。set! は代入なのです。

私の感覚と scheme の相性が悪いのでしょう。
みなさんは scheme を勉強した時、すぐに腑に落ちました?
0407 NGNG
「普通のやつらの上をいけ」
http://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
0408デフォルトの名無しさんNGNG
Lisp1.5で、

(defun func1 nil
 (prog (age)
  (setq age 20)
 ))

(defun func2 nil
 (setq age 30))

ってできるの?

ageはfunc1内ローカル変数だと思うんですけど。
0409名無しさん@EmacsNGNG
>>404です。質問の件、理解できました。今思えば何が分かっていなかったのかも
分からない。テキトーにインタプリタで遊んでたら、腑に落ちちゃいました。

>>407
多言語と比較して Lisp で書けば圧倒時に開発期間が短くなるというのは
おおげさだと思う。ライバル会社が機械語で書いていたのなら別ですが。
0410デフォルトの名無しさんNGNG
404=406
じゃないの?
0411デフォルトの名無しさんNGNG
>405
>set! は cons cell 自体の書き換えだからね。
はぁ?
0412名無しさん@EmacsNGNG
>>410
そうです、404,406,409は私です。

>>411
set-car! set-cdr! の間違いでしょう。
0413405NGNG
>>410
>>411
アホなことを書いてました。
set!は代入ですね。
0414デフォルトの名無しさんNGNG
>>409
>多言語と比較して Lisp で書けば圧倒時に開発期間が短くなるというのは
>おおげさだと思う。ライバル会社が機械語で書いていたのなら別ですが。

LISPマトモに使ったことないんだろな。
まぁ日本語も正しく入力できない奴は以下略。
0415デフォルトの名無しさんNGNG
>>414
でもやる仕事によると思うよ.
単純なテキスト処理なんかはやっぱり perl の方が楽だよ.
書いて楽しいのは lisp だけど.
0416デフォルトの名無しさんNGNG
>>415
でも機械語と比べるのはどうかなあ。
これだと「LispなんてC/Java/アセンブリ以下だ」と言っているのと同じような気がしますけど。
まあ、それはともかく。
>>409
「なる」ではなく「なった」です。
>>406
> でも、バインドじゃーないんですよねー。set! は代入なのです。
どっちでも良いんじゃないかなあ、と思います。
「既にdefineされた記号に値をバインドし直す」でも「代入」でも、自分がわかればそれで良いのでは?
(勿論、他の人と話が合うようにはすべきですけど)
そんなことに拘っていては、分かるものも分からなくなるかもしれませんよぅ。
もう一つ、揚げ足取り。
> scheme では コンスセル は ペア というらしいです。
この2つは別物では。
リストは「コンスセルの集まり」ですが、「ペアの集まり」とは言わなかったような。
「ペア」はコンスセル単体( '(hoge . fuga)など)のことを指します。多分。
0417297NGNG
list?とpair?が別々に用意されていることがデザイナーの意図を示している
と思うね。
(list? '(a . b)) ⇒ #f
(pair? '(a . b)) ⇒ #t

要するにコンスセルの最後がヌルであればlistであり、さもなくばpairだよな。


0418417NGNG
スマソ。297ってのは無視して。別のスレでの番号だわ。
0419デフォルトの名無しさんNGNG
schemeでSQL使いたいんだけど
良いのないですか?
0420デフォルトの名無しさんNGNG
guileでmysqlとかかね。
なんか日本語も楽に使いたいとか言い出しそうだな。
だったらkawa+JDBCってところかな。
0421416NGNG
ペアというのは 「コンスセル、あるいはその集まりであるリスト(なので、空リストは除く)」 リストというのは 「空リスト、単体のコンスセルを除くペア」 みたい。 >>417 list?は「行儀の良いリスト」にだけ#tを返す物なんだそうです(循環リストも#fです)
0422421NGNG
改行が消えてる……。
0423デフォルトの名無しさんNGNG
改
行
が
消
え
る
な
ん
て
こ
と
が
あ
る
の
か
?
0424デフォルトの名無しさんNGNG
Mozillaで書き込むとタマーに消えますよ
0425419NGNG
せめてODBCが使えるやつ無いですか?
0426デフォルトの名無しさんNGNG
JDBCが使えればODBCなんか要らんと思うが...RDBMSは何を使っているの?

; 俺はPetite Chez SchemeからSQL操作専門のRubyスクリプトを呼び出す
; というバカなことを試してみたよ。割といける。標準入力からSQL文を読
; み込んで、標準出力に結果を書くの。
0427419NGNG
主に使ってるのはAccessとOracleです。
今までVBでやってた作業をschemeでもやりたいなと思いまして。
0428デフォルトの名無しさんNGNG
(define (hanoi n from to spare)
 (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デフォルトの名無しさんNGNG
>>427
AllegroCLにしなさい。
それで万事解決。
0430デフォルトの名無しさんNGNG
高いんだお。
0431名無しさん@EmacsNGNG
>>428 に全角スペースが含まれているのに気付かず、3分悩んだ。
ソースに全角スペース 含めるなや (゚Д゚)ゴルァ
0432デフォルトの名無しさんNGNG
>>431
半角スペース2個を全角スペース1個に置換するのは
ソースうpするときの定説でしょ。
0433デフォルトの名無しさんNGNG
半角スペースを&nbsp;に置換するのが定説。
&nbsp;に半角スペースを織り交ぜ
出きるだけ&nbsp;を使わないのが最強。
0434testNGNG
&amp;
0435デフォルトの名無しさんNGNG
つ−か誰も428の質問に答えられるやつはいないのか。
おれもわからんけど。
0436デフォルトの名無しさんNGNG
自前でスタック実装すりゃ末尾再帰に直せるだろう。
が、べつに面白くもないのでやってあげない。
0437デフォルトの名無しさんNGNG
>>427
なぜJDBCではダメなの?
あとAccess使ってるならVBで良いんじゃないの。
Accessには論理的な美しさなんかないんだし。

0438デフォルトの名無しさんNGNG
だから、AllegroCLにしなさい。
それで万事解決。
0439デフォルトの名無しさんNGNG
DrSchemeの.plt形式のファイルってどうやってみるんですか?
0440デフォルトの名無しさんNGNG
>>439
念写
0441デフォルトの名無しさんNGNG
>>439
伝書鳩
0442デフォルトの名無しさんNGNG
>>439
のろし
0443デフォルトの名無しさんNGNG
copy-gcを再帰呼び出し無しでやってる処理系教えて
0444デフォルトの名無しさんNGNG
>>443
copy gc を再帰呼び出しでやってる処理系を教えてくれ。
てか copy gc の利点の一つは gc 時に必要なメモリがコンスタントに押えられる
ところだと思うが。
0445デフォルトの名無しさんNGNG
>>428
Schemeだからする必要ないけど…
0446デフォルトの名無しさんNGNG
>>444
コピーGCて2倍のメモリ使うんじゃないの?
0447デフォルトの名無しさんNGNG
最近 Scheme の勉強をしようと思ってどの実装を使おうかなぁと思ってたんですが、guile と gauche を使ってみようかと。
で、僕は Debian GNU/Linux を使ってるんでパッケージを探してみたら guile はあるけど gauche は古いバージョンのやつしかない、と。
で、gauche の最新バージョンを Debian 用にパッケージ化してみました。
で、気づいた。
Scheme を使ったことないやつでも Scheme 処理系のパッケージングができることに。
でもさすがに Scheme 使ったことないやつが作ったパッケージなんて、だれも使いたくないだろうなぁ…(笑
0448デフォルトの名無しさんNGNG
>>447
>Scheme 使ったことないやつが

改行の仕方を解らない人が作ったパッケージも
どっちかというと嫌です。
0449デフォルトの名無しさんNGNG
>>444
学生とかが作った奴はほとんど再帰呼び出し形式だよ
0450デフォルトの名無しさんNGNG
こういうのとか。
http://www.isc.meiji.ac.jp/~ce11731/work/tscm/
0451デフォルトの名無しさんNGNG
>>448
やらしいつっ込みだなあ。
はっきりいえばいいのに。
0452デフォルトの名無しさんNGNG
>>447
>でもさすがに Scheme 使ったことないやつが作ったパッケージなんて、
>だれも使いたくないだろうなぁ
わざわざ言わなきゃいいのに
0453パッケージャNGNG
…次から改行も頑張ります。
あと、今日 Scheme つかったので、
「Scheme 使ったことのあるやつ」になりました。
0454デフォルトの名無しさんNGNG
それはそうと、いつか(var〜)マクロ作ってた人、サンクスコ。
かなり書きやすくナタヨ
0455パッケージャNGNG
ちなみに、どこを見て遊んでいるかというと…
ttp://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
0456デフォルトの名無しさんNGNG
>>455
sources.list
に何を加えればいいですか?
下さい。
0457パッケージャNGNG
とりあえずパッケージファイルを ftp でもっていって
dpkg -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
あと、C プログラムとリンクさせたりするための
開発環境(ライブラリとヘッダファイル)の場所が
Debian 標準に沿っていません。

たとえばヘッダファイルは

現在 /usr/share/gauche/0.4.12/include/*.h
正しくは /usr/include/gauche/*.h

これはいずれ gauche-dev というパッケージに分離して
Debian 標準にあわせます。

#すみません、age ます
0459デフォルトの名無しさんNGNG
LispMe!
0460パッケージャNGNG
>459
って、コレのことですか?
ttp://www.lispme.de/lispme/
0461459NGNG
>>460
ですよ。

思いの他サクサク動いて気持ち良いです。
思いついた時にサラサラ書けるのが良いですね。
0462デフォルトの名無しさんNGNG
なにこれ、palmで動くの?
入力はどうしてるんだろう
0463デフォルトの名無しさんNGNG
>>425
>せめてODBCが使えるやつ無いですか?
DLL使える処理系ならODBC32.DLLを直接コールするとか。
0464459NGNG
>>462
グラフィティで入力して Eval ボタンで実行。
ライブラリはメモ帳アプリからロードします。
Palm の GUI も作れます。
0465デフォルトの名無しさんNGNG
>>462
http://www.lispme.de/lispme/angif.htm
http://www.lispme.de/lispme/LispMe3.gif
0466デフォルトの名無しさんNGNG
Palm で lisp いじれるとは カコイイ!!
0467パッケージャNGNG
>457
Gauche は 0.5.0 が 1/30 付けでリリースされているようです。
昨日見たときにはまだ出てなかったような気がするんですが…
というわけで、近いうちに 0.5.0 も deb パッケージにします。
0468パッケージャNGNG
Gauche 新バージョン 0.5 リリース
ttp://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デフォルトの名無しさんNGNG
いいなpalmでlisp
LXだと速度的につらい
0470デフォルトの名無しさんNGNG
俺はLispMeを使ってみたいがためにPalmVx買ったよ(wara
0471デフォルトの名無しさんNGNG
Scheme の load に関して、みなさんのやり方を教えてください。

;; fruits は (and apple banana) に、
;; main は (and fruits database weapon) に依存している
(main (fruits apple banana) database (weapon sword))

このような呼出し関係の場合、どう (load FILE) を記述して
いますか? require/provide がある処理系ならそれを使うの
ですが、今回は無い場合と仮定しています。
要は、多重 load を避けたいわけです。

実際に使用している処理系は guile です。
0472デフォルトの名無しさんNGNG
純粋なR5RSだけだと無理ではないか?
0473デフォルトの名無しさんNGNG
Palm で lisp でなくても
超軽量電池長持ちマシンに Emacs でもいいかな.
0474デフォルトの名無しさんNGNG
実は LispMe はその名前とは裏腹に Scheme 処理系であるという罠。
ちゃんと末尾再帰もサポートしている。
0475デフォルトの名無しさんNGNG
>471
loadを上書きするのが簡単。
(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
(push filename *load-list*)
は
(set! *load-list* (cons filename *load-list*))
のマクロ。
0477471NGNG
>>475
なるほど、その手がありましたか。ありがとうございます。
後はその再定義を util.scm なりに書いて、全スクリプトの頭で
(load "util.scm") しておけば良いですね。
0478デフォルトの名無しさんNGNG
>477
上のloadは2回以上読むとおかしなことになると思うよ。
0479デフォルトの名無しさんNGNG
↓これどうですか?
Arc
http://www.paulgraham.com/paulgraham/arc.html

文字列をlistと同一視する機能は便利かも
(CommonLispのsequenceアプローチとは違うみたい)
> (car "abc")
\a
> (cons \a "bc")
"abc"
0480デフォルトの名無しさんNGNG
>>479
http://www.paulgraham.com/paulgraham/arcll1.html
・構文に影響しない不要な括弧は省略できる
・記述的な長い名前を使わない(lambda->fnまで行うのはどうかと思うが)
・シンボルの出力が小文字(大文字シンボルは伝統的なLISPの標準)
・文字列操作の強化
・一時変数it(=>の代替え?)
・macroがFirstClassObject(コンパイルどうするの?)

は良い考えだと思う。
でもインデントに依存する様な構文(cond)があるみたいなのが
少し引っかかるのだが。勘違いかも。
暗黙の変数宣言も好き嫌いが分かれる所。
0481デフォルトの名無しさんNGNG
>("abc" 1)
\b
は型同士のみの位置関係(オペレータが存在しない)で定義する総称関数?
(define-generic (<string> s <number> n)
  (string-ref s n))
0482デフォルトの名無しさんNGNG
ttp://www.paulgraham.com/paulgraham/onlisp.html
やた。On Lispついに公開された。
本屋探してもなくってさー。Arcネタと外れてすまん。
0483名無しさん@EmacsNGNG
guile 1.5 はえーよ。ってゆうか、1.4 遅いよ。
0484 NGNG
Paul Graham の Common Lisp と On Lisp って
具体的にどう違うわけ?
0485デフォルトの名無しさんNGNG
>>482
pdf印刷したら400枚・・厚さ5cmになった(w
両面印刷なんてとても手動じゃできん
(トレイに逆向きに並べ替えるだけで大変な手間。)
せめて縮小2段組で印刷できるようにできないのか
0486482NGNG
psnup -> distiller じゃダメ?
会社でコソーリ 2pages/sheet の両面印刷してくる予定ですが何か(w
0487デフォルトの名無しさんNGNG
質問です
(define (func (a b) c)
 (+ a b c))
(func (1 2) 3)
=>6
ってできませんか?(funcの引数の構造に注目して)
0488デフォルトの名無しさんNGNG
なんか日本人の書いたSCHEMEの本で
無料で公開されてるのってどこでしたっけ?
0489デフォルトの名無しさんNGNG
そんなのあるんだ。
せめて名前がわかれば・・・
0490デフォルトの名無しさんNGNG
>>484
On Lispまだちゃんと読んでないけど、なんかマクロに力入れてるっぽい。
onlisp.lispのサンプルコードの定義の数
defun 157こ
defmacro 107こ
defvar 6こ
つーわけです。
他にもschemeの末尾再帰や継続について触れていたり、なかなか面白そうです。
0491484NGNG
サンクス >> 490
ANSI Common Lisp は本当にできがいい。英語も読みやすいし。
マクロか、呼んでみるか。
0492デフォルトの名無しさんNGNG
(OnLisp266ページから)
20.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
>>488
>>169
0494デフォルトの名無しさんNGNG
>>488
http://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
0495デフォルトの名無しさんNGNG
>493
絶版かあ・・
世知辛い世の中だね。
0496マクロNGNG
>>491
呼んだ?
0497デフォルトの名無しさんNGNG
IS LISP ってどうよ?
あれってどんな具合か知ってる人いない?
0498デフォルトの名無しさんNGNG
>497
どうよ?って、使ってみてよ。
ソースも公開されてるし。
まあ、一言で言えばCommonLISPのサブセット。
0499デフォルトの名無しさんNGNG
>>498
敵はSchemeって感じか?
こいつは流行るのかな?

CLを掃除しただけって言うか、CLとそんなに変わらん気がするが。
ならいままで通りCLが使われてそうな気もする。
ISLISP用の資産、無いし。
0500デフォルトの名無しさんNGNG
LISPには変り種の方言がいっぱいあるから、
あまりにも普通っぽいのは埋もれていく運命なのでは・・・
個人的にはarcの思想みたいな密構文マンセー主義な方言が流行って欲しい。
0501デフォルトの名無しさんNGNG
よいこのHyperLispあげ
0502デフォルトの名無しさんNGNG
Arc が気になるあげ
0503デフォルトの名無しさんNGNG
>>499
>>500
湯浅せんせ〜!
こんなことゆってはるひとがいます〜!
こいつらしばきましょう!

ぶぶってばかりないでIS Lispも活動してください!

(ぶぶってむしろ.NET版が欲しい。ぶぶ.NET)
0504デフォルトの名無しさんNGNG
てめーら括弧つけてんじゃねぇ!
0505デフォルトの名無しさんNGNG
Common Lispの練習がてらに
HTML文書をXHTML文書に加工するプログラムを書き始めた。
処理系はGNU Clisp。
とりあえず、大文字のタグを小文字に変換するところまでは
すぐにできた。
エンコーディングを自動判定にしたりとかも「できそうだ」
という感触はあるな。
機能はとにかく沢山あって、
これだけのものを作ったからには
応用事例が大量にあるんだろうな、と思ったよ。

でも、高機能なのはいいけど、やっぱりいろいろウザいねえ。
構文がいろいろあって。
美しさでは圧倒的にSchemeだねえ。
0506デフォルトの名無しさんNGNG
schemeで例外機構ってどうやって作るの?
call/cc使うって理屈はわかるんだけど
0507デフォルトの名無しさんNGNG
>>506
http://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
Lisp や Scheme での、
オブジェクト指向的なこと(CLOS など)について、
分かりやすく教えてくれる日本語の本や文章ってありますか?
0509デフォルトの名無しさんNGNG
Paul Graham『On Lisp』(Prentice Hall)
の日本語訳って出てます?
0510デフォルトの名無しさんNGNG
>>509
出てなかったと思うけど・・出るには早すぎないかな、
翻訳が終わってなかろうと言う意味で。

読んでてちょっと思ったのは、
日本語版が出たとしても、SICP第一版の悪夢を再現しそうかなと・・
LISPのしかも入門者向けの本じゃないとなれば、
翻訳者も「安」いだろうからねえ
0511デフォルトの名無しさんNGNG
amazon.com によれば、『On Lisp』が出版されたのは、
(September 9, 1993)

ま、原著も絶版らしいんで、
日本語の訳本は存在しない、
ということでいいですか?
0512デフォルトの名無しさんNGNG
>>511
え、そんなに古いの?
もしかして私は「最近絶版になった」を誤解してた?
絶版になった本じゃ、売ろうとはしてくれないだろうね。

日本でも次々と絶版だし。
Lisp系の本って一体何冊残ってるんだろう?

オンライン出版とかでもしてもらわないと。
0513デフォルトの名無しさんNGNG
ANSI Common Lisp の翻訳出るみたい
ttp://www.pearsoned.co.jp/washo/nbindex_mar.html
0514デフォルトの名無しさんNGNG
>>510
SICP 第一版ということは、
第二版が出てるんですか?
0515デフォルトの名無しさんNGNG
SICPの第一版ってそんな訳悪かった?
第二版の方が (訳者は高いだろうに :-)) 悪い訳だった気がするが...

ちなみに第一版って、McGrowhillからでて、絶版になったやつだよね。
0516デフォルトの名無しさんNGNG
>>515
幸いにして読んだことないからしらない。
英語の方がましかも、というできだったと聞いてるが。

第二版は大先生が翻訳したので、用語の間違いなどが全改善されてよくなった
・・と聞いてる。

私個人は英語版を読んでる途中のまま(おい
0517デフォルトの名無しさんNGNG
>>481
("abc" 1)
=>\b
("abc" 1 #\c)
=>"acc"
(("abc" "def") "ghi")
=>"abcdefghi"
クソ長いオペレータ名書かなくて済むから便利かな?
バグの原因になりそうだが。
0518デフォルトの名無しさんNGNG
("abcdef" 0 2) ;substring
=>"bc"
("abcdef" 1 "xyz") ;insert
=>"axyzbcdef"
eval-hookを公開してる処理系なら切り分けできそうだけど、
本来は評価エラーになるはずの部分に埋め込む形だから
処理系自身に手を加えないと難しいかも。
0519デフォルトの名無しさんNGNG
SICP読破したよage
0520名無しさん@EmacsNGNG
>>519
あれ、楽しい?
めちゃくちゃ つまらんかったんだけど。
0521デフォルトの名無しさんNGNG
バカにはつまらないんだよ…

という煽りはやめて,もしSICPがつまらなかったらEoPLをお勧めします.
0522デフォルトの名無しさんNGNG
>>521
禿同。2nd editionも出たし。
あとおすすめできるマニアック本はQueinnecのLISPかな?
0523デフォルトの名無しさんNGNG
>>521
SICPが面白くないのは、よっぽどできるか、
解ってないかのどちらかだと思われる。
原著のアマゾンでの評価の二極化を思い出されたし。

SICPがつまんなかったひとは、もっと簡単な本をするか、
もしくは薀蓄のある世界に全然興味の無い人ならLisp
なんぞ止めてしまうことを薦める。
0524デフォルトの名無しさんNGNG
>>523
よっぽどできる、ってアメリカの大学だとあの本でみんな計算機科学の勉強始めるんだよ。
計算機科学入門、みたいな授業で良く使われてるよ。確かにいい本だと思うけど、あくまで
入門者用って感じじゃないかな。アルゴリズムの授業とかの方が、もっとずっと難しいん
じゃないかな(ずっとためになるけど)。
0525デフォルトの名無しさんNGNG
アメリカの大学がどうかは知らないが、
日本の大学では教科書を理解してる奴はほんの一握りだな。
0526デフォルトの名無しさんNGNG
>>524
誤解されて読まれてしまった。

よっぽどできる、というのはですね、
例えばあの本にツッコミを余裕で入れられるくらいの人なら
「つまらない」かもしれないという前置きです。

解ってない、というのはあれでLISPを1から勉強するには
適していないらしい、という過去の書きこみを汲んだものです。
0527デフォルトの名無しさんNGNG
また大学の話か。
0528デフォルトの名無しさんNGNG
だって大学でしか使われてないし
0529デフォルトの名無しさんNGNG
>521
EoPLって何ですか?
例によってオンラインで読めたりします?
0530デフォルトの名無しさんNGNG
http://www.cs.indiana.edu/eopl/
http://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
>>530
つーか目次だけじゃん
0532デフォルトの名無しさんNGNG
これ、いいなあ・・
http://curry.2ch.net/test/read.cgi/occult/1010105764/
0533デフォルトの名無しさんNGNG
サーバ名がcurryというのがまたいい
0534デフォルトの名無しさんNGNG
ひそかに仕事で使い始めたage
0535519NGNG
うおぅ、しばらく来てなかったら、なんか反応がある(^^;

>>520

俺はそこそこ楽しかったかな。

序盤は「ふーん」って程度だった。
MLとかSchemeは普通に知ってたから、
高階関数とかカリー化とか関数オブジェクト
とか見せられても今更、って感じだったし。
むしろS式とかlambda式とかの数学的定義を
あまり表に出さない所とか、
少し好きではなかった気がする。

でもLogicalProgrammingとか、ambとかは
あんまりしらなかったのでとても面白かった。
SQLとかもあまり詳しくなくて、普通に本で
勉強した事がある、程度だったので、
むしろPrologに近い言語である、というのが
わかった時は驚いた(SQL使いには常識なんだろうが)。
コンパイラもストップアンドコピーは組んだ事無かった
ので、そこはなかなか楽しめた。
どうせならストップアンドコピーとマークアンドスイープ
の定量的な比較をシミュレータ使ってやってみる、
ついでにキャッシュ相当の機能も実装してみて、
ヒット率にどう違いがでるか、とかまでやったら
もっと楽しかったと思うが、そこまで要求するのも酷だろう。
Scheme系のインタプリタ組む時はいつもC使っちゃうから、
末尾再帰とか結構面倒な事になるんだけど、
アセンブリだと楽なんだねぇ、とか学んだ事もあった。
題材としてもゲートとかとの関連が見えたり、
HDLとかが裏に見えたり、副作用の無い関数型言語に
ついてのさわりが見られたり、良く選んでるなぁ、と思った。
全部読んだ感想としては、いろいろな事の基礎が学べて
良い本だと思ったよ。
OS関係が全く触れられてない、っていうのは良いのか
悪いのか良くわからん。あれも一つの選択なのかもしれない。
OOPに触れないのは俺は好感が持てたかな。
余談だが、ニュートン法とか大学受験を思いだして、ちょっと笑えた。
台形公式とかも。

ヘネシー&パターソンとどっち読もうか悩んだんだけど、
一応読んどいて良かった、と今は思ってる。

入門書としてはどうかなぁ?とは思う。
何か具体的に作って動かす、という喜びが
あまり感じられない所が入門書としては
良く無いと思ったよ。
勉強にはなるけど、プログラムの楽しさは
わからない気がする。

>>523

いや、つまらん、面白い、ってのは人それぞれなのでは?
別に理解出来て勉強になるレベルでもつまらん、
と思う人もいそうな本だと思うが。
SchemeとかLisp好きな人は好きそうな本だとも思うけど。
0536デフォルトの名無しさんNGNG
>>535
> コンパイラもストップアンドコピーは組んだ事無かった
GCとコンパイラ、普通混同するかね…
0537デフォルトの名無しさんNGNG
>>535は、ただの知ってる単語自慢だから、しょーがなよ。
0538535NGNG
いや、コンパイラの所でGCが解説されてたからそう
書いただけなんだが、、、
0539デフォルトの名無しさんNGNG
Scheme ってなぜ nil に相当するものが #f と () と #<unspecified>
に分かれているのでしょうか?
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デフォルトの名無しさんNGNG
>539
schemeでは(if #f 'a)が#<unspecified>なんだから
一致しないのはしょうがないのでは?
本来警告ぐらい出すべき部分だと思うけど。
0541539NGNG
>>540
うん、だからなぜ 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
>>541
    (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))))
0543539NGNG
>>542
ごめん、ちょっと例が悪かったみたいなんだけど、
おれが聞きたかったことは
なんでわざわざ #<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
>>543
>(if (define x 1) #t #f) ==> #t
なんでこんなヘンなことしようとするの?
#<unspecified>みたいな特別な値を持ってない処理系だと、
例えば#fを返したりする事もありそうだけど?

#<unspecified>を返すって事は、
C言語とかでも見る関数引数の評価順序の様な「未定義の振るまい」
みたいなもんだと思うけど。(そんなのわかってそうだけど、一応)

警告にすりゃいいのを、なんでわざわざ未定義にしたのかは不明。
トレースで簡単に追えるからか、あるいは仕様書を短くしたいだけか。
0545539NGNG
>>544
> >(if (define x 1) #t #f) ==> #t
> なんでこんなヘンなことしようとするの?

ただ #<unspecified> が真と評価されるか試してみただけ。
別に #<unspecified> を返す式ならなんでもよかったんだけど。

(define unspecified (if #f #t))
(if unspecified "unspecified は真" "unspecified は偽")
==> "unspecified は真"
0546デフォルトの名無しさんNGNG
俺もよくわからないけど、nilを返すのはまずいんじゃないかって
気がする。なぜって、正当な値としてnilを返すifはありそうじゃない?
nilを返す関数はあるわけだから。
R5RSによればunspecifiedを返すのではなく、何を返すか規定されてい
ないと書いてある。おそらく、本来、代替部alternateを省略できるこ
と自体が不適切なんですよ。SML/NJなんかは実際に省略できないわけだ
し。省略できるように「あえて」してあるのは、特定のケースにだけ副
作用を伴う式を評価し、if式全体の評価結果は使用しないようなケース
のためじゃないかな?

# if式全体の評価結果が必要なのであれば、明示的にalternateを記述
# すればいいだけだし。
0547デフォルトの名無しさんNGNG
(if test true)
って副作用のためにあるんじゃないの?
こういうのはシーケンスの途中に置くべきだと思う。
(begin ... (if test true) ...ちゃんとした戻り値)
0548デフォルトの名無しさんNGNG
だれか作って!
(try
 ...
 (if test (throw <tag> <result>))
 ...
catch <tag> <throw-result>
 ...
catch-all <tag-result> <throw-result>
 ...
finally
 ...
)
0549デフォルトの名無しさんNGNG
Chez Schemeには例外機構がありますが、それが何か?
0550デフォルトの名無しさんNGNG
どんな例外機構ですか?
0551539NGNG
>>546>>547
なるほど。ありがとう。
まだ Scheme いじくりはじめて日が浅いのでいまい
ち実感がわかないけど、

Scheme の仕様に #<unspecified> が入っているのは
副作用を伴う式を明示的に示したいような場合に使う
ため、という感じでよいのかな?

つまり、この手続きは副作用のための手続きなので返
す値はどうでもいいよという場合に、あえて #<unspecified>
を返すことによってその手続きの目的を強調するという
ことかな?

例えば

(display 'hello) ==> #<unspecified> (副作用だから)
0552デフォルトの名無しさんNGNG
いまさらですが、lispインタプリタ作るのでだれかanatomy of lisp売ってください。
5千円くらい出します。
あと、cプログラムブック3も。

おながいします。
0553デフォルトの名無しさんNGNG
>>552
ええと、
図書館はご利用なされないのですか?
後者は昔地元の図書館で見かけましたが。
0554デフォルトの名無しさんNGNG
いまさらですが >>552 を消すので、だれか奴のIPを売ってください。
5千円くらい出します。
あと、メールアドレスも。

おながいします。
0555デフォルトの名無しさんNGNG
>>551
僕が調べた限りでは、#<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デフォルトの名無しさんNGNG
dynamic-windって、
call-with-current-continuation
しかない環境で(修正や上書きで)実装できますか?
(define (dynamic-wind before thunk after)
 (before)
 〜
 (thunk)
 〜
 (after)
)
afterはCommonLISPのunwind-protectと同じ解釈で良いですよね?
beforeがよくわからない・・・
0557デフォルトの名無しさんNGNG
うげぇ、酒のみながら考えてたら気持ち悪くなってきた。
0558デフォルトの名無しさんNGNG
>>556
例えばthunkの中で継承をどこかにset!して、あとでいきなりthunkの中に
戻ってくるとかしたときにやりたい処理を書いておく。

例えばthunkがファイルにアクセスする時、ファイルのオープンをbeforeです
るととつぜん継承を使ってファイルのアクセスコードにジャンプしてもファイ
ルがオープンできる。
そんなの無理に使わなくて良い。
0559デフォルトの名無しさんNGNG
#<unspecified>って言葉遊びみたいなものでしょ。
深く考え過ぎ。
値は定められてないって意味で値がunspcifiedだって書いてあるから、
値として#<unspecified>というのを返してるだけ。
別に#fを返そうが'()を返そうがR5RS的には問題ない。
0560デフォルトの名無しさんNGNG
call/ccを再定義しないとできないよ
0561デフォルトの名無しさんNGNG
>>550
手続き: (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-handlerに
例外を捕捉する手続きをセットしておき、それから処理を開始する。
例外を発生する個所で、errorを使う。errorの引数が
error-handlerに設定された手続きに渡されるからしかるべき処理
をする。これで例外処理は全部できるでしょ。
0564556NGNG
>>560
いや、再定義で良いんでヒントだけでも教えて下さい。
やろうとしてることはR4RSな処理系をR5RSに引き上げる様な感じです。
0565556NGNG
とりあえず再定義の出だしはこんな感じですよね?
(set! call-with-current-continuation
 (let ((old/cc call-with-current-continuation))
  (lambda (proc)
   〜
   (proc cont) ;継続の引き渡し(contをこれから定義する)
   〜
  )))
0566556NGNG
(define (test) (call/cc (lambda (cont)
 (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
とならなくてはならない。
0567556NGNG
継続の呼び出し
(cont #t)について考える。
呼び出し時、contは
・before1->2についての呼び出しは完了している事を知っている。
・継続切り替え前後にafter2->1を呼び出さなければいけない事を知っている。
よって、cont毎にスタックの様な形式でbefore/after呼び出し履歴が必要。
0568556NGNG
現在いる継続中に複数の継続の参照がある場合、
cont毎にbefore/afterを持ち回るとそれらが複数回呼び出される
可能性があるので、どうにかして情報を共有化しなくてはならない。
親継続aの中で取り出された子継続x,yは親継続aを共有する。
(call/cc (lambda(親継続a)
 (call/cc (lambda(子継続x)〜))
 (call/cc (lambda(子継続y)〜))
))
親継続a <- 子継続x
親継続a <- 子継続y
0569556NGNG
そこで、現在の(親)継続の参照を保持するグローバル変数を作る。

(define *current-continuation* '())

これはcall/ccで現在の継続が取り出されると、その継続がpushされ、
call/ccから抜けるとpopされる。
*current-continuation*には、old/ccで得た継続、その継続に属する
before/afterがセットで格納される。
0570556NGNG
さて、では実際にどうやって実装するか、
を考えてたら頭がパンクしました。
call/ccとdynamic-windの連携が、、、、
(unwind-protectエミュレートの時は、巻き戻しだけなので
結構すんなりうまく行った)
0571デフォルトの名無しさんNGNG
chez scheme附属の文書にそのものずばりが載ってるよ。
0572556NGNG
検索したら、なんかあっさり見つかってしまった鬱。
みんな頭いいなあ。
でも考え方としてはだいたい有ってたので良かった。
次はcall-with-valuesかな。
0573デフォルトの名無しさんNGNG
call-with-valueは、無理(たしか)。
0574デフォルトの名無しさんNGNG
検索したらいくつか(scheme上での)実装がみつかりました。
http://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デフォルトの名無しさんNGNG
ここを参考にオブジェクト指向してみた
http://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
0576575NGNG
>>575
dispacher → dispatcher
0577575NGNG
>>575 を継承

(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
「Scheme」を読めないという人、結構いるみたいだね。
おれなんかは古代祐三の曲で一躍有名になったスキームというゲーム
知ってたおかげか、初めから読めたけど。
0579デフォルトの名無しさんNGNG
おれも毎日スキームミルク飲んでたから初めから読めたけど。
0580デフォルトの名無しさんNGNG
Schedule読めるならScheme楽勝でしょう
0581デフォルトの名無しさんNGNG
スケジュール
スケム
0582デフォルトの名無しさんNGNG
>>581
スケジュールと柔軟に読めるならそれは詐欺だ
おれなんか最初スチェズレと読んだど?
0583デフォルトの名無しさんNGNG
スケジューるん
0584デフォルトの名無しさんNGNG
"sch"の発音は英語の"sk"より先にドイツ語の"sh"を先に知ってしまったので、ついそう読んでしまう……。
schemeしぇーめ、scheduleしぇじゅーる(中途半端に混じってる)
0585デフォルトの名無しさんNGNG
schというシェルがあった気がする
0586デフォルトの名無しさんNGNG
東工大の実験はshcemeとprologですが、なにか?
0587デフォルトの名無しさんNGNG
shcemeあげ
0588デフォルトの名無しさんNGNG
shceme晒しあげ
0589デフォルトの名無しさんNGNG
>>585
シェルとして実装した場合、括弧付けないとevalれない点は
どうなんだろうね。
0590デフォルトの名無しさんNGNG
Clispをログインシェルとして使うという剛毅な方法が
Clispのページに書かれていたな。たしかに必要なこと
はすべてできるんだけど、正直すげえな、と。
0591デフォルトの名無しさんNGNG
きゃつ等にとって括弧は空気みたいなもんです。
0592デフォルトの名無しさんNGNG
lispはイイ!ネ
人類が作った変態言語の極みダヨ
0593デフォルトの名無しさんNGNG
Schemeの場合、関数も変数もdefineで定義するし、名前空間も一緒。
Common Lispの場合、関数はdefun、変数はsetqで定義して名前空間も別。

俺はSchemeの流儀の方が好きなんだけど?
0594デフォルトの名無しさんNGNG
名前空間なんて飾りですヨ
エライ人にはそれが判らんのです
0595デフォルトの名無しさんNGNG
>>575
#<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
>>592
はぁ?
お前はアホか?
Lisp なんざ変態言語としてはカスみたいなもんなんだよ。
お前みたいな奴は Brainfuck で HelloWorld でも書いてから出直してこい。
http://www.muppetlabs.com/~breadbox/bf/
0597デフォルトの名無しさんNGNG
>576
なにこれ?バイトコード?
0598デフォルトの名無しさんNGNG
それは違う意味の変態言語だと思うが・・・
0599デフォルトの名無しさんNGNG
>>596
これ、すごい小さい処理系(?)だけど、もうちょっと読みやすくならないかな。
あのままじゃさっぱり意味わからないよ。
0600デフォルトの名無しさんNGNG
初心者で申し分けないのですが、scheme を勉強するにあたって
いいドキュメントは何でしょうか?
いままで、「リスト遊び」と「初めての人のための LISP」を読みました。
犬飼さんの本はとっつきやすそうだけど、末尾再帰すら載ってないみたい。
ttp://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/
これなんか、わりと良さげな気がしてるのですが…。
0601デフォルトの名無しさんNGNG
>>600
評価が分かれるけど>>2にあるSICPがいいと思うよ。
0602デフォルトの名無しさんNGNG
Little Schemerだろ。
0603デフォルトの名無しさんNGNG
>>601
SICPはSchemeを勉強する本じゃない、ってSICPに書いてあるの
知らないのかな?
0604デフォルトの名無しさんNGNG
>>593
それSteeleもCommon Lispの反省点として上げてたよ。
0605デフォルトの名無しさんNGNG
>>604
SteelはSchemeの設計者だからね…
0606デフォルトの名無しさんNGNG
先生! >>605 は Steel が Common Lisp の設計者であることを知らなげです!
0607デフォルトの名無しさんNGNG
>>600
R4RS-R5RSの規格書50ページと>>2以降にあるリンクのサンプルで勉強したよ。
あとは@niftyのプログラミングランゲージフォーラム(FPL)に上がってる、
昔のログや処理系の解析。結局、処理系の解析が一番役に立った気がする。
結局通信費除けばほとんどタダだった。
cltl2やSICPの訳本とか買ったのはかなり後。
0608デフォルトの名無しさんNGNG
ケントディヴィッグのプログラミング言語schemeだね。
0609デフォルトの名無しさんNGNG
schemeとlispの違いがわかればlispのコードも大変参考になるかと。
0610デフォルトの名無しさんNGNG
>>604
そうなんだ。良かった。
0611デフォルトの名無しさんNGNG
>>593
Scheme って R5RS で用意されている標準手続き
が厳選されているところがいいと思う。

Common-Lisp だと例えば、
find, find-if, find-if-not, remove, remove-if, remove-if-not
なんて似たような関数がやたらとたくさんあるけど、
Scheme だと for-each だけしかない。でもこれで十分。
0612デフォルトの名無しさんNGNG
>>611
同意。
ただねえ、Schemeでコードを書いていると
「動けばいいや」という気持ちにならないんだよね。
「もっと美しく(抽象的に)書けるよな……」
とか思っちゃう。
んで、いつまでもコードと戯れて時間を潰しちゃうんだ。
その方が結果的に品質の高いコードができるんだけど、
ついつい楽しくて時間を浪費しちゃうところがあって、
急いでいるときはSchemeには近付けない気分だったり。

; 俺だけ?
0613デフォルトの名無しさんNGNG
>>606
SchemeはSteelがゼロから設計したんだよ。でもCLは違う。
どっちかっていうとSteelは各方面からの意見をとりまとめた、って
感じじゃないかな。
0614デフォルトの名無しさんNGNG
>>612
僕もです。でも、他の言語に同じような処理を行わせようと
したとき、Scheme ならサラッと出来るものに時間が取られたり
するので、結局は Scheme の方が良かったりします。
0615デフォルトの名無しさんNGNG
>>596-599
Unix 板に uudecode 使って
直接バイナリ吐く開発法が提示されてたよ。
言語じゃないけどわらった。
0616デフォルトの名無しさんNGNG
>>615
navi2chの機能のことか?
0617デフォルトの名無しさんNGNG
>>615
それはバイナリというか、単に読めないだけでは?
0618デフォルトの名無しさんNGNG
>>615
それってcatでuuencode形式のファイルを書くアレのことかな?
……ここで言うのも何だけど、gzipはタイプ量が減っても開発効率は悪くなると思う……。
0619デフォルトの名無しさんNGNG
lispやschemeはperlのヒアドキュメントみたいな機能はありませんか?
0620615NGNG
>>618
そうそれ。
脳内で uudecode の結果を予測できる人なら
gzip であれ bzip2 であれ何でもこいでしょう。
0621名無しさん@EmacsNGNG
guile って perl みたいにファイルの先頭に #!/usr/local/bin/guile
って書いて実行させることできますか?
今やってみたけどできなかった。何か違うやり方があるんでしょうか。

man 見ようとしたらなかったし(鬱
0622デフォルトの名無しさんNGNG
>>621
試した方が速くないっすか?
0623デフォルトの名無しさんNGNG
>>621
GNUものは大体infoをさきにみるといいよ

#!/usr/local/bin/guile -s
!#
(display "Hello, world!")
(newline)
0624名無しさん@EmacsNGNG
>>623
なるほど。ありがとう。
これからいろいろ勉強します。elisp とは結構違いますね。

;; なぜか info もなかったので探しに逝ってきます。
0625デフォルトの名無しさんNGNG
>>619
scshというschemeのshellは
#<<END
〜
END
という構文が用意されているらしい。
他の処理系でも'#'みたいな特殊文字を読みこんだ時に、
登録したフック関数が呼べる様な機能があれば似たような事が
可能でしょう。readそのものを書きかえるって手もあるけど。
0626デフォルトの名無しさんNGNG
(define here-document #<<*END*
>>619
scshというschemeのshellは
#<<END
〜
END
という構文が用意されているらしい。*END*)

>here-document
=>">>619 \nscshというschemeのshellは \n#<<END \n〜 \nEND \nという構文が用意されているらしい。"
0627デフォルトの名無しさんNGNG
>>625
それは変数展開してくれるの?

おれはいつもこんな感じで書いてるけど。

(string-append
"...
... " foo " ...
...
")
0628デフォルトの名無しさんNGNG
scshは#!<文字>だった。
>#!$ここからここまで$
"ここからここまで"
(この場合'$'が区切り文字。)
guileにもある様です。#q<文字>〜<文字>
>>627
変数展開なんてしないでしょう。
0629デフォルトの名無しさんNGNG
定本Cプログラマのためのアルゴリズムとデータ構造 近藤
に載ってるクイックソートの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
>>629
そちらのコードはよく読んでないけど
何でそんなに長くなるの?

(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
>>630
それじゃクイックソートじゃないジャン。
0632630NGNG
>>631
というかもろアルゴリズムそのままジャン

ttp://lecture.ecc.u-tokyo.ac.jp/~yamaguch/pub/cp1-3/quick-sort.html
> ・データの集まりから1つデータを選び、それより小さいデータの
> 集まりと、それより大きなデータの集まりに分ける.
> ・それぞれの集まりに対してクイックソートを適用する.(再帰的)
> ・以上を繰り返すと、ソートするデータの個数が減っていき、最後
> にデータの個数が1以下となって終る.
0633受験生NGNG
>>184
http://school.2ch.net/test/read.cgi/kouri/1014220418/l50
こんなスレがあった…。
lambda 使って遊んでばっかいるとホントにこういうハメになりそ…。
0634デフォルトの名無しさんNGNG
>>632
計算量って言葉知ってる?
0635(not 632)NGNG
>>634
効率を求めるなら、Scheme インタプリタ組み込みの手続きにすれば
良いんでないの? そうでなくても、まずは理解しやすいのを書いてから
議論を進めても悪くないでしょ。
0636(not 634)NGNG
>>635
クイックソートって平均的には他のソート(オーダは同じ)より早いのが
特徴だから微妙だよね。
0637デフォルトの名無しさんNGNG
みなさん chez ってどう読んでますか? シェ? シェズ?
0638(be 634)NGNG
>>635
実行効率の話じゃない。
関数 p を呼ぶ回数がクイックソートのオーダーと違うでしょ。
0639635NGNG
>>638
失礼しました。出直してきます。
0640デフォルトの名無しさんNGNG
chezはシェでしょ。
0641デフォルトの名無しさんNGNG
>>640
フランス語読みだったですね。

スペイン語だったら、チェズかな?
0642デフォルトの名無しさんNGNG
>>641
> スペイン語だったら、チェズかな?
チェスだろ。
0643630NGNG
>>638
あえて 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
Lisp SchemeってのはEmacs Lispとは違うもんですよね。
どういった関係でしょうか?
0645ひまだから書くNGNG
Emacs Lisp も Scheme も Lisp という言語の
範疇に入る方言の一種で、それぞれくせがある。

正当な lisp の後継者としては Common lisp というのがある。
ただ scheme の方が言語的にすっきりした仕様になっているので、
こちらを好む人も多い。
0646デフォルトの名無しさんNGNG
;; 破壊的 quick sort
(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
なんでこの板では ruby の評判が悪いのですか?
最近覚えたんだけど、結構 lisp っぽい所が多くて
結構面白いと思うんだけど。
0648デフォルトの名無しさんNGNG
>>647
ruby狂信者が嫌われているだけです。
しかし、そういう人達ってrubyのこと本当に好きなのかな?
本当にrubyを使っているのかな?
0649デフォルトの名無しさんNGNG
ここでrubyの話はしないでほしい・・・
0650デフォルトの名無しさんNGNG
LispMe Version 3.1 Release Age!
0651デフォルトの名無しさんNGNG
お前ら、関数xxxを再帰でかけますか?

関数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
(define (xxx x)
 (cond ((null? x) x)
    ((symbol? x) (list x))
    (else (apply append (map xxx x)))))
; テストしてないけど
0653こっちのがもろ再帰って感じしない?NGNG
(define (atom? x) (not (list? x)))

(define (xxx lst)
 (cond ((null? lst) lst)
    ((atom? lst) (list lst))
    (else (append (xxx (car lst)) (xxx (cdr lst))))))
0654デフォルトの名無しさんNGNG
>>651
(defun xxx (xxx)
(cond ((null xxx) xxx)
((atom xxx) (list xxx))
(t (mapcan #'(lambda (xxx) (if (null xxx) (list xxx) (xxx xxx))) xxx))))
0655デフォルトの名無しさんNGNG
しまった、これはもしかすると宿題おしえて君かもしれないぞ。まずいことしちまった。
0656デフォルトの名無しさんNGNG
>>655
反省しる!
0657デフォルトの名無しさんNGNG
そういえば昔教科書でやった気がするよ。
0658デフォルトの名無しさんNGNG
(defun xxx (xxx)
 (cond ((null xxx) xxx)
    ((atom xxx) (list xxx))
    (t (append (xxx (car xxx)) (xxx (cdr xxx))))))
これSchemeで書けないね。
0659デフォルトの名無しさんNGNG
(defun x (x) x)
(setq x 'x)
(x x)
0660デフォルトの名無しさんNGNG
>>658
ほとんどそのままよ
0661デフォルトの名無しさんNGNG
って、関数と引数の名前が同じなのってどうなのよ。
0662デフォルトの名無しさんNGNG
Lisp だと関数と値が別々の場所に束縛されるから >>658 はOK
(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デフォルトの名無しさんNGNG
>650
LispMe!ってSECDマシンなのね。
Sスタック
E環境
Cコード
Dダンプ
だっけ。
0664デフォルトの名無しさんNGNG
>>662
(put 'x 'foo 1)
じゃないの?
いや、良く知らないんだけど。
0665デフォルトの名無しさんNGNG
ていうか、LISPとかって必ず値返すんだよね?
じゃあ
(setf (get 'x 'foo) 1)
の値って何?
C言語だと式の結果は右辺値だよね?
関数の場合は特定できないけど。
0666デフォルトの名無しさんNGNG
(get 'x 'foo)
が=>1返すなら、
(setf (get 'x 'foo) 1)
で'xに値が設定できるのって変じゃない?
C++のリファレンス値に代入してるのと同じ気持ち悪さがある。
get(x,foo).set(1)
0667デフォルトの名無しさんNGNG
>666
setfはマクロだからなあ
0668651NGNG
お前ら!
ありがとうございました!!
0669デフォルトの名無しさんNGNG
>>666
なぜ?
x, x[n] に対する x = val, x[n] = val と
x, (aref x n) に対する (setf x val), (setf (aref x n) val) は
どこが違う?
0670デフォルトの名無しさんNGNG
なにいってるのかわからん>669
(aref x n)
で
=>1が返るなら
(setf (aref x n) val)
は
(setf 1 val)
に見えてキモイ、ってことでしょ?>666
0671元リスーパNGNG
Cltl1,Cltl2 とか 丸善のCommonLisp本あたりに、
setf で必要な三要素、とかいうの載ってましたよね。(懐
(1) 値設定する場所を表すS式表現  (aref x n)
(2) (1)のS式を解釈して、値設定をする関数 (defun setf-aref ...)とか
(3) よく覚えていないが、 setf へ (1) と (2)を設定する仕組みとかなんとか

現役リスーパな方、正解プリーズ
0672not 669NGNG
>>670
でも x[n] が 1 を返すけど x[n] = val は気持ち悪いって言わないのかってことでしょ?
0673not 672NGNG
>>670
// これが気持ち悪くないなら
int a[10];
a[5] = 1;

// これも気持ち悪くないはず
map<string, string> m;
m[key] = value; // m.operator[](key).operator=(value);

と >>669 は主張しているのではないの?
0674673NGNG
まちがった。

// これが気持ち悪くないなら
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 は主張しているのではないの?
0675673NGNG
Lisp における setf は C における

#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
今、「竹内郁雄著: 初めての人のための LISP」を楽しく
読んでるんですが、この本で使われてる 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デフォルトの名無しさんNGNG
>>676
loop の仕様ならこの辺にあるよ
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デフォルトの名無しさんNGNG
ML スレでも書きましたが、『Scheme による記号処理入門』を注文しました。
Scheme の活用例が載っている書籍で、お勧めの物ありませんか?
実装自体よりも活用分野が紹介されているような文献をお願いします。
0679デフォルトの名無しさんNGNG
>>678
「湯けむり温泉Scheme殺人事件
   Lambda式と末尾再帰に隠された謎
     カッコの付け忘れに刻まれた32年前の悲劇」
0680デフォルトの名無しさんNGNG
>>679
ありがとん。面白そうやねそれ。
32 年前の括弧にどんな秘密が?!
それより、32 年間も scheme のコードを書き続けたのか??
0681デフォルトの名無しさんNGNG
(age (plz ref-book))
0682681NGNG
sage てしまった・・・。
0683デフォルトの名無しさんNGNG
(pp '[((((((((schemeができたのは1984年だったはず])
0684デフォルトの名無しさんNGNG
WZ使ってるんですが、カッコの対応を表示してくれるマクロありませんか
閉じ忘れたまま保存しようとすると「カッコ閉じてません」とか
警告ダイアログだしてくれたり。
0685デフォルトの名無しさんNGNG
http://www.pearsoned.co.jp/washo/nbindex_mar.html

ANSI Common Lisp入門 
Paul Graham著 久野 雅樹+須賀 哲夫訳 B5変 約500頁
ISBN 4-89471-433-7
ANSI Common Lispに準拠した入門書。 Common Lisp Object Sys
tem (CLOS)を使ってオブジェクト指向プログラ ミングを解説している。
Lispと言えば、人工知能か記号処理の例が多かったが、本書は、さ
まざな分野への応用 例を取り上げている:コンピュータグラフィクス、
テキスト生成、HTML生成、並び替え・探索、ファイル入出力、デ ータ
圧縮、数値計算。もちろん人工知能向けの話題もある:パターンマッ
チ、論理推論。

3,900円
0686678NGNG
>>685
有難う御座います。
出版されたら読んでみます。
0687デフォルトの名無しさんNGNG
>>663
SECD は Stack, Environment, Control and Dump ですね。

http://www.lispme.de/lispme/doc/lm_hood.htm
0688デフォルトの名無しさんNGNG
>>679
やっぱ、Schemeコードの中にダイイングメッセージが?
しがないPGが温泉旅行に行ってなんか知らんが殺人事件に巻き込まれる。
コンパイルできないSchemeコード。
被害者が最後に打ったと思われるSchemeコードのインデントが
いつものTabではなくSpaceだったことに気づいたPG。
この最後のSchemeコードは果たして被害者が打ったものなのだろうか?
そして、32年前の同様な殺人事件に気付き…。
0689デフォルトの名無しさんNGNG
おもろくないっす
0690デフォルトの名無しさんNGNG
>>688
刑事は藤田まことか古谷一行か?
とりあえず定番の怪しいおばちゃん弁護士は登場させとくか。
0691デフォルトの名無しさんNGNG
LispMe!ってgcを再帰で実装してるね。(store.c)
こういう処理系って結構多いのかも。
0692デフォルトの名無しさんNGNG
lisp わかるけど C がわからないっス。
アフォですか?
0693 NGNG
エライ >> 692
0694デフォルトの名無しさんNGNG
>>692
あぁあ、残念。
LispだのMLだのHaskellだのなんてやってると、Cがとても鬱陶しくなります。
Cは先にやっておくべきだったんでは無いんかと、とか言ってみるテスト。
0695デフォルトの名無しさんNGNG
>>692
文系に多い
0696692NGNG
>>693
イェイ!!

>>694
自分もそう思いました。というか、
C で書くような事態がないから覚えないのかも知れないけど。
perl とかはテキスト処理によく使いますが。

>>695
ズバリ的中です。アルゴリズムはわかっても
結局コンピュータの動作の基礎がわかってないってことかな。
アセンブリ言語になると、もうちんぷんかんぷん。
0697閑話休題NGNG
chez とか MIT とかは日本語扱えないんですよね? Stk も。
普段使ってる処理系でそういう制限があるのは辛くないですか?

このスレの人達だと自作の処理系使ってたりするのかな?
0698●NGNG
>697 Gauche
0699デフォルトの名無しさんNGNG
>>697
コードをEUCで書いて、SJISで入出力する関数を書けばOK。
0700デフォルトの名無しさんNGNG
Gauche 、Solaris/SPARC でコンパイル出来んかった。
ndbm のあたりで何故か引っかかる。
gdbm 入れて再度挑戦してみようかな。
0701デフォルトの名無しさんNGNG
Guile-user ML にこんなことを言っている人がいた。

http://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
>>701
何故 S 式を使わないのか、不思議で仕方がない。
パース楽だし、eval もできるし。
0703デフォルトの名無しさんNGNG
>>701
でも「XML World」とかの雑誌が「S式World」とかだったら
きっと売れないだろうな。(おれは買うけど)
0704デフォルトの名無しさんNGNG
>>703
"S-expressions World"とかは?
0705デフォルトの名無しさんNGNG
XMLは名が売れ過ぎてるので、いっそのこと乗っ取ってしまえ。

S-XMLとか
XML-LISPとか
適当に名前をでっち上げて、我々で流行らせよう。
0706デフォルトの名無しさんNGNG
きちんと規格っぽいことも定めてみたりして、
XMLだけではなく、XMLSchemaとかXSLTとかも
LISPで乗っ取ってしまおう。

乗っ取って「こんなに便利なんですよ」
そして流行らせれば、一気に我々は時代の最先端。
0707デフォルトの名無しさんNGNG
>>704
ちょっと長すぎ。「SEXP World」がいいかな、
勘違いして買う奴がいそうだし。
0708デフォルトの名無しさんNGNG
>>701
それって「結局lispの連中は好機を逃してしまうだろう」ってゆってんだよな
皮肉なのかハッパかけてんのか馬鹿にしてんのか絶望してんのか藁ってんのか
0709●NGNG
国際化についてはいまの LISP 処理系の弱点だと思うので、
その点は XML のいいところを取り入れるとイイ
0710デフォルトの名無しさんNGNG
XMLとLISPのトークンを比べると

XMLは
<tag>にょろ</tag>
でLISPでは直ぐにはわからない、
「どのカッコが閉じられたか」がすぐわかる。
HTMLの様に終了タグ自体を省略できる可能性がある。
かたやLISPでは
(tag にょり) ;car=>tag cadr=>にょり
表現をS式として取り出せる。けどカッコ読みにくい。

そこでLISPに、カッコの他に
<tag>にょろ</tag> => (tag にょろ)
と変換するロジックをデフォで組み込んでみたらどうか。

<car><cdr>S 式 に 革命 を</car>
=>式
0711デフォルトの名無しさんNGNG
<tag>は常にoperatorとなりえるので、
<tag></tag>で囲まれたフィールド(operand)はquoteまたはquasiquoteが
暗黙に掛けられた状態とする。
<car><cdr>S ,式 に 革命 を</car>
は(cadr `(S ,式 に 革命 を))
で「式」を評価したリストがcadrに渡される
0712デフォルトの名無しさんNGNG
なんかXML関係の書き込みってピントがズレてるって思うの、俺だけ?
たしかにLispでは構文木を直接的に記述することがデータの表現と
プログラムの表現を区別しないという武器につながっているけど、
そんなLispにも具象表現と内部表現の区別はあるわけじゃないですか。
XMLは所詮、具象表現の一種に過ぎないわけで、XML的なコーディング
を要求するなり、受け付けるなりするLispの処理系があっても別にお
かしなことではない。つーか、Lispの本質はそんなところにはないと
思う。

S式ってのはかっこだらけの式のことじゃないと思うんだがね。
0713デフォルトの名無しさんNGNG
>>712
言ってることが難しくて理解できなかった
0714デフォルトの名無しさんNGNG
S式も、見た目変更すれば見やすくなるって話?
0715デフォルトの名無しさんNGNG
S式のSってなんれすか
0716無名λ式NGNG
じゃあ、とりあえずDSSSLから始めよう。
http://www.jclark.com/
0717デフォルトの名無しさんNGNG
Sが沢山あると何がうれしいですか
0718無名λ式NGNG
>>715
Symbolic Expressionだったかな。
0719無名λ式NGNG
>>717
> Sが沢山あると何がうれしいですか

って、>>716の「D"SSS"L」について言っているのかな?
DSSSLは、『Schemeで』SGML documentの変換や整形を行うための規格です。
XML版もあります。ってマジレスでよかったですか?

DSSSL Onlineってのがweb用のsubsetだったはずです。
0720デフォルトの名無しさんNGNG
そういやシンボルの存在は、あなどれない。
0721やほーNGNG
>712
具象表現と内部表現ってなに?
勉強します、スマソ。
0722デフォルトの名無しさんNGNG
>>721, >>713
字面のコードと実際の処理の事じゃないでしょうか?

コード自体は<xml>タグ括り</xml>でも(lisp 括弧括り)でも良いけど、
それを処理系がどう解釈するかに Lisp の本質があると言う事では?

しかしながら、その本質がどういう事なのかは私には分かりません。
誰か詳しい人お願いします。
0723デフォルトの名無しさんNGNG
1-a. データの記述と関数の記述を、同じ記法で記述できるといのが Lisp の強み。
1-b. XML もデータの記述と関数の記述を、同じ記法で記述できる(?)。

2-a. Lisp は木構造を簡単に表現できる。
2-b. XML も木構造を簡単に表現できる。
0724デフォルトの名無しさんNGNG
XML と lisp の内部表現は論理的に等価になりうるということですか?
XML よく知らないんではずしてるかも知れないけど。
0725712NGNG
お前ら、マジでそんなレベルなの?

CでもPascalでもBASICでもLispでも、その処理系は
ソースコードを構文解析して構文木を作るんだよ。
ただ、Lispの場合、構文木とソースコードの対応が
非常に密というか、ソースコードは構文木を一定の
記法で書き下ろしたものとなっているわけ。リスト
は木構造を表現するだけの力をもっているので、す
べてをリストで表現できている。これがLispの強み。

CやPascalのような言語は、構文解析した後に内部
的に生成された構文木に触れることはできない。
Lispはできる。それこそがLispの強み。

構文解析して構文木を作ること、構文木を直接一定
の記法で書き下ろすこと、という観点からすると、
その一定の記法がXMLの文法でもいっこうにかまわ
ない。つーか、XMLの文法で書かれたLispのコード
を評価するLispプログラムを書くことは簡単でしょ?
そういうことが簡単にできること自体がLispの力。
CやPascalではこうはいかない。
0726デフォルトの名無しさんNGNG
> お前ら

一般化すんじゃねーよ。馬鹿。
0727無名λ式NGNG
>>721
> 具象表現

Lispの言うところの印字表現でしょ。

>>723
> 1-b. XML もデータの記述と関数の記述を、同じ記法で記述できる(?)。

関数ってXSLTとか? あれ不自由すぎない?
0728無名λ式NGNG
>>725
> ただ、Lispの場合、構文木とソースコードの対応が
> 非常に密というか、ソースコードは構文木を一定の
> 記法で書き下ろしたものとなっているわけ。

なってない言語があったら教えて欲しい、と小一時間問いつめたい
;「Lispの場合」は、この次の文に修飾した方がいい。

;; まあ、perlはaliasがありすぎて駄目だし、
;; Lispも'とquoteの区別は苦手だが。(TAO以外は)
0729701NGNG
>>725
そういう意味での 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デフォルトの名無しさんNGNG
>>728
725の言ってることわかってないじゃないの?BNFとかで定義された
構文と、ソースコードが対応してるってな話じゃないよ。

要はlispにはパーサがいらない、ってことなんだよ。CでもPascal
でもソースをパースして構文木つくるでしょ?S式はそれ自体が木構造
になってるってことでしょ。
0731702NGNG
>>725
そんな事は十分承知の上での議論だと思っていましたが...
0732無名λ式NGNG
>>730
それが分かった上で、(分からないlisperがいるのか?)
指摘している文章「が」おかしいと言っているのです。
>>725全体を否定した覚えはまるでありません。

「お前ら、マジでそんなレベルなの?」と高飛車(wだったので、
おかしいところを指摘したい衝動に駆られただけです。
0733デフォルトの名無しさんNGNG
S式はラムダ式のlisp的具体化だろう
よくは知らんが

そのLispの強みといわれているものは、
Lispの強みというより、それの準拠する計算モデルの強みだ

そしてやはりXMLとそれとの親和性は否定できない
それは、XMLが階層的構造を持っているためだ

しかし、データ構造は一般的に、そういう構造を持っているものが多い。
別にXMLに限られるわけではない
それにもかかわらず、結局の所は命令型が主流であるという事実は、
ある種の推測をもたらすだろう
0734デフォルトの名無しさんNGNG
誰が誰に喧嘩売ってるんですか?
0735デフォルトの名無しさんNGNG
LISPの構文解析はマクロ展開だってんでしょ?
712の説明がまわりくどくてややこしいだけ、に一票。
0736デフォルトの名無しさんNGNG
そういやXMLってよくしらないんだけど、
LISPのquote相当のものはあるの?
0737デフォルトの名無しさんNGNG
つーか、XMLはデータ表現の形式であってプログラミング言語
じゃないじゃん。自己記述的ではあるから、規則を決めれば
Lisp的に評価可能だけど。
0738デフォルトの名無しさんNGNG
>>736
それは逆で、(DTDも含めて)データ表現の方法しかない。
お友達のXSLTの計算能力は貧弱。万能計算器どころの話じゃない。
0739デフォルトの名無しさんNGNG
>>738
XSLT について。
http://www.w3.org/TR/xslt#section-Examples
http://www.graco.c.u-tokyo.ac.jp/~kamina/xmltools/transformations.html
をみくらべるとよくわかるね。ま XSLT は変換が目的だから
単純に比べるのはどうかとおもうけど。
0740デフォルトの名無しさんNGNG
うわーん、すごいよLISP
0741デフォルトの名無しさんNGNG
*←これなんですか?→*
0742デフォルトの名無しさんNGNG
S式というのはジャーゴンだ。
そういうのを頻繁に使うのはあまり感心できない。
単なる式で足りる。
0743デフォルトの名無しさんNGNG
*ファンネル*
0744デフォルトの名無しさんNGNG
∀・)
0745デフォルトの名無しさんNGNG
(パパ!)
0746デフォルトの名無しさんNGNG
(ボクをぶたないで!)
0747デフォルトの名無しさんNGNG
(コラコラ)
0748教えてNGNG
すみません。
MFCWIZARD(DLL)で、クラスを持ったDLLを作りました。
次にMFCWIZARD(EXE)でDLLのクラスを使用し、ビルドをしたのですが、
クラスのコンストラクタとデストラクタが(LNK2001外部シンボルが未解決)
と、なってしまいます。
0749デフォルトの名無しさんNGNG
微妙に荒れてきたか?
0750デフォルトの名無しさんNGNG
http://www3.tok2.com/home/xyzzy/ml/thrd11.html#01001
http://www-6.ibm.com/jp/developerworks/xml/010914/j_x-xslt.html

XML と Lisp/Scheme な話題って何処でも出てるのね。
検索したらかなりの量がヒットした。

あ、750 ?!
0751デフォルトの名無しさんNGNG
Gauche は早く Gtk に対応しないかな。
GUI が作れたら、もう他の処理系はいらない。

後は、簡単な rdbms 相当の機能が欲しいかな。
0752デフォルトの名無しさんNGNG
>>751
DLLアクセス機能があれば直APIでGUIとODBC程度は使える様になりますが、
recordset相当は自分で書く必要はあるかも
0753デフォルトの名無しさんNGNG
>>751
SLIB に Relational Database パッケージみたいのがありましたよ。
使ったことないので、詳しくは分かりませんが。
0754デフォルトの名無しさんNGNG
>>751
ACL
0755デフォルトの名無しさんNGNG
acl無料版、まだgetでける?
0756デフォルトの名無しさんNGNG
>>754
gauche> (substring "あいうえお" 0 3)
"あいう"
ACL> (subseq "あいうえお" 0 3)
"あ\202"
0757デフォルトの名無しさんNGNG
gaucheって漢字を1文字と数えるの?
0758デフォルトの名無しさんNGNG
>>757
gaucheのページ読みなよ、質問君。
http://www.shiro.dreamhost.com/scheme/gauche/features-j.html
0759デフォルトの名無しさんNGNG
ChezSchemeはなんであんなに速いんだ?インタプリタのくせに
0760デフォルトの名無しさんNGNG
>>753
ありがとう。
rdms.scm と dbxxx.scm という一連のファイルを見つけました。
これからゆっくりいじってみます。
0761デフォルトの名無しさんNGNG
これはアトムかな?

atom
0762デフォルトの名無しさんNGNG
XMLやる場合、case-sensitiveは必須なのか
0763デフォルトの名無しさんNGNG
>>759
有料版のChez Schemeはインタプリタじゃないよ。中でコンパイルしてる。SML/NJとかと一緒。
http://www.scheme.com/csug/system.html#g2240
0764デフォルトの名無しさんNGNG
>>761
はい。
atomは文字aで始まる文字列ですから。
0765デフォルトの名無しさんNGNG
単体の cons cell は atom ですか?

単体でも car と cdr があるので結局 list になるように
思うんだけど。
0766デフォルトの名無しさんNGNG
(´-`).。oO(consでないものがatomなのだが…)
0767765NGNG
そうか。list でないものが atom と感違いしてました。
どおりで変な訳だ。
0768678NGNG
>>678 です。
上記の本で、状態空間の探索まで読み進めました。
Lisp 系は初めてなのですが、面白くてサクサク進めます。

ところで、>>725 の以下の部分にはどういう時にメリットがあるのでしょうか?

>CやPascalのような言語は、構文解析した後に内部
>的に生成された構文木に触れることはできない。
>Lispはできる。それこそがLispの強み。

>>728 のこの部分に繋がると思うのですが、

>要はlispにはパーサがいらない、ってことなんだよ。CでもPascal
>でもソースをパースして構文木つくるでしょ?S式はそれ自体が木構造
>になってるってことでしょ。

パーサがいらないというので実装が楽と言う事でしょうか?
あるいは、いちいち解析する必要がないので、他のインタープリタ言語と
比べて処理速度が稼げるということでしょうか。

Lisp がデータの構文木を扱い易いと言うのは理解できますが、>>725 が
おっしゃっているのはその事では無いですよね?

話を蒸し返して済みません。
0769デフォルトの名無しさんNGNG
>>768
first class object という概念がある

http://www.yuasa.kuis.kyoto-u.ac.jp/~takayama/EoPL/2.3.2.html
0770やほーNGNG
パーサが要らないってことでは、forth もそうですよね?
0771753NGNG
ストリームから S 式を文字単位で読んで構文木を作るんだから、
個人的に read はあくまで「パーサ」であるように思えるんですが。
字句解析器と一緒になってる実装もあるようです。

0772デフォルトの名無しさんNGNG
むしろ文字単位で読むだけで構文木ができるんだから、
字句解析器のみってことじゃないのか?スキャナっていうんだっけ?
パーサは構文解析をするんだよね?
0773デフォルトの名無しさんNGNG
>>764
これはアトムかな?

turkey
0774デフォルトの名無しさんNGNG
直接native-code出力するschemeつくりたいんだけど、
x86系でオープンソースで参考になる処理系ないですか?
0775デフォルトの名無しさんNGNG
>>773
はい。
文字で始まる文字列ですから。
0776771NGNG
>>772
字句解析器の仕事は一般的に、ストリームからトークン切り出しを
行い、それを構文解析器にパスする事だと思うんですが、如何?
ドットペアを解析したり、引用符 (') を受けて quote を cons する
ような作業は、字句解析とは言えないと思います。

一応 The Free On-line Dictionary of Computing (ttp://www.dict.org)
で調べてみたんですけど。
0777デフォルトの名無しさんNGNG
>>774
こんなのみつけましたが
http://www.cs.cornell.edu/kozen/ECC/
0778デフォルトの名無しさんNGNG
1+1
これはatom?
0779デフォルトの名無しさんNGNG
>>775
これはアトムかな?

1492
0780774NGNG
>>778 >>779
全部atomだよ。
ちなみに>>778は'1+1'というsymbol
>>779はnumber

>>777
ありがとう!
0781774NGNG
|(まーくんごはんできたよ)|
これもatom。
0782デフォルトの名無しさんNGNG
http://www.lisp.org/table/style.htm
これどう思う?多少同意できない部分もあるけど。
こんな風にコード書く奴いない?

(if x
 (progn
  ...
 )
 (progn
  ...
 )
)
0783デフォルトの名無しさんNGNG
>>779
はい。
1492は十進数の文字列ですから。

0784デフォルトの名無しさんNGNG
>>783
これはアトムかな?

*abc$
0785デフォルトの名無しさんNGNG
>>782
インデントの話?
昔悩んだ。
(progn
 長い処理シーケンス
 ...
)
は普通だと思う。
ただでさえネスト深くなる傾向があるんで、適当なところで落としたりする
(defun
 (
  (
   (
    (withなんちゃらとか
 (lambda()
  (let
   (...

結局のところ、transcriptすることが多いし、
見せるのが目的なコードはpretty-printに任せる様になった。
0786678NGNG
>>769
有難う御座います。

CやPascalのような言語で、構文解析した後に内部的に生成される
構文木を、Lisp は直に操作する事が出来る。

それは S 式自体が木構造だからである。

その恩恵として、Scheme では手続き等を first class object として
扱える、という事ですよね。

少し違うかも・・・。
C や Pascal がどう構文解析されるか勉強した方が良さそうですね。
0787デフォルトの名無しさんNGNG
>>785
んー、 if と progn を使うなら cond を使ってほしいということと、
閉じカッコはまとめてほしいということを言いたかったのよ。

(cond (x ...)
   (else ...))

こう書いてほしい。

>>782 みたいなコードを C 言語ユーザが書いてきてキレそう
になることってない?

ところで >>784 等でアトムがどうのこうの言っている奴って、なんか
おもしろいの?最後にすごいオチが待っているならいいけど。
0788デフォルトの名無しさんNGNG
> (´-`).。oO(consでないものがatomなのだが…)
0789デフォルトの名無しさんNGNG
おれもすごいオチきぼん>atomer
0790デフォルトの名無しさんNGNG
(define atom?(lambda(o)(not(pair? o))))
0791デフォルトの名無しさんNGNG
(define x 1)
(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
>>785
そういえば Java では「字上げ」をする人がいるらしい。
class Foo {
  void bar() {
...
...
  }
}
0793デフォルトの名無しさんNGNG
>>791
こんなのとか
(cdr(or (assv n
 `((,x . x)
  (,y . y)
  (,z . z)))
 '(それ以外はこれ→ . unknown)))
0794デフォルトの名無しさんNGNG
(defmacro set-cdr! (pair obj)
 `(setf (cdr ,pair) ,obj))
(setq x '(1))
(set-cdr! x x)
(listp x) ==> ?

(define x '(1))
(set-cdr! x x)
(list? x) ==> ?
0795デフォルトの名無しさんNGNG
Scheme に慣れていると、他の言語でも素性の良いコーディングが出来る
というのは、不必要な一時変数の大盤振る舞いをしなくなると言う事で良い?

逆に括弧や goto が沢山ある解読不能なコードを量産する罠も在りですか?
0796デフォルトの名無しさんNGNG
> 逆に括弧や goto が沢山ある解読不能なコードを量産する罠も在りですか?

こんなコードを書いてスタックオーバーさせます:

list* search(list* p, int x) {
 return (p == NULL)? p : ((p->x == x)? p : search(p->next, x));
}
0797デフォルトの名無しさんNGNG
>>784
はい。
*abc$は左かっこ「(」や右かっこ「)」以外の文字で始まる文字列ですから。
0798デフォルトの名無しさんNGNG
>>797
これはリストかな?

(atom)
0799デフォルトの名無しさんNGNG
( ● ´ ー ` ● )あたしってatom?
0800デフォルトの名無しさんNGNG
なんか、これは atom? ってのがノイジーなんだけど...
ところでみんな、common lisp の処理系には何使ってる??
0801デフォルトの名無しさんNGNG
>>800
>なんか、これは atom? ってのがノイジーなんだけど...

Little Schemer読んでないんだね。

0802デフォルトの名無しさんNGNG
お前ら、LISPの真髄を具現化したコードを載せてください。
0803なっちは遠い親戚?(○ ´ ー ` ○)NGNG
なっちは遠い親戚?(● ´ ー ` ●)
0804デフォルトの名無しさんNGNG
アトムっつーとだな、まず原子力が思い浮かぶよ。
放射能漏れが気になるな。
0805デフォルトの名無しさんNGNG
'(((atom))) ←3重の隔壁
0806デフォルトの名無しさんNGNG
>>801
Little Schemer の日本語版「Scheme手習い」は絶版らしいけど
Little Schemer 英語で読んだの?
0807デフォルトの名無しさんNGNG
>>796
すれ違いで悪いんだけど、最近のコンパイラって
そういうコードを loop にしてくれるのかなっと思って

% gcc -O6 -S >>796

とやってみたけどなんかやってくれないっぽい。
やってくれるんなら気軽に Lisp っぽいコードが
書けるんだけどな。
0808デフォルトの名無しさんNGNG
>>801
本業で使うときは ACL。
atomer については、ちょっとウザイけど、
もうちょっと様子をみてみよう、という気分。
0809デフォルトの名無しさんNGNG
最近Lispをもういちどやりたくなって、
よんでみたい本がいろいろでてきたんですが、翻訳情報しりませんか?

"ANSI Common Lisp"
"On Lisp"
"Artificial Inteligence A Modern Approach"
"Paradigms of Artificial Inteligence Programming: Case Study in Common Lisp"

どれもまともにやると社会人には時間がかかりそうなので、
ちかいうちに和訳でそうなやつがあれば、それは後回しにして、
翻訳でそうにないやつから読もうかな、なんて
考えてマス
0810808NGNG
>>801 --> >>800
0811デフォルトの名無しさん NGNG
ああ
0812デフォルトの名無しさんNGNG
CMUCL であるクラスのメソッドのリストを取得する方法知らない?
(defclass a ())
(defmethod foo ((x a)))
(defmethod bar ((x a)))
(pcl:specializer-direct-methods (find-class 'a))
でエラーになるんだよな。
0813デフォルトの名無しさんNGNG
Russell & Norvigなら翻訳あったはず。
原書より高かったと思うけど。でも原書もそんなに難しくないよ。
0814デフォルトの名無しさんNGNG
guile 使ってるんですけど、
random 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
>>814
> guile -c "(display (random 10 (seed->random-state (current-time))))(newline)"
> こうやってもなぜか出力がランダムじゃありません。

乱数は乱数系列として初めて意味があることはご存じでしょうか。
上のprogramを複数回実行して比べても意味はありません。
0816814NGNG
それはわかるんですが、
するとプログラムの初めの実行でまばらな乱数を得る
にはどうしたらいいんでしょうか。

seed->random-state が hash みたいになっていると
思ったんですが、違うようです。
0817デフォルトの名無しさんNGNG
>>816
(current-time) って一秒単位だからそれをもうちっと細かくするとか、
libguile/random.c の
void scm_i_init_rstate (scm_t_i_rstate *state, char *seed, int n)
関数を読んで、 seed の値を工夫してみてはどうでしょうか?
0818デフォルトの名無しさんNGNG
>>812
ACL だけど
(clos:specializer-direct-methods (find-class 'a))
==> (#<STANDARD-METHOD BAR (A)> #<STANDARD-METHOD FOO (A)>)
となったよ。ちなみに (defclass a ()) は ACL でエラーになるよ。
0819814NGNG
>>817
アドバイスありがとうございます。
seed の値に何らかの hash されたものを与えるように
すればよさそうですね。

# しかし均一に hash するものを作るとなると
# 結局自分で乱数発生関数を作るのとかわらないな。
0820デフォルトの名無しさんNGNG
>>819
hash は MD5 でいいんじゃない? RFC にリファレンスコードがあるし。
(system "echo hello | md5sum") とズルしてもいいし。
0821814NGNG
>>820
> (system "echo hello | md5sum") とズルしてもいいし。
その線でいきます (w
どうせ大したことするプログラム作ってる訳でもないので。
0822デフォルトの名無しさんNGNG
Corman Lisp 1.5
http://www.corman.net/index.html
これどうですか?
0823デフォルトの名無しさんNGNG
次の様な変換をするプログラム知りませんか?

CreateFileA -> 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
0824 NGNG
ハァ?
0825デフォルトの名無しさんNGNG
追加

DSSSL -> dsssl
GetDC -> get-dc
ReleaseDC -> release-dc

自分で作るしかないでしょうか?
0826デフォルトの名無しさんNGNG
>>824
要するにWindowsやJavaで使われる名前から
lisp,scheme用の名前に自動生成するプログラムなんですが。
(VBなんかだとAliasに相当するはず)
0827デフォルトの名無しさんNGNG
s/生成/変換/
0828デフォルトの名無しさんNGNG
emacs-lisp を少し勉強してから scheme にも興味があるんですが、web で調
べてもあまり情報が見つからないです。guile がインストールされているよう
なので guile を覚えたいのですが、参考になる page とか本とかあったら教
えてください。
emacs-lisp とは結構違うところが多いので難しいです。
0829通行人NGNG
もう少し具体的にお願いします。 >> 823
たぶん、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
>>823
知らん。それに結局、納得のいくものは自分で作るしかない。

>>828
まずschemeの規格書(邦訳有り)を読んで、その薄っぺらさに驚いてから、
SICP(邦訳本:計算機プログラムの構造と解釈)で基本を覚えた後、
Scheme入門(絶版)でSLIBを学習する。
全部webで手に入る。
0831デフォルトの名無しさんNGNG
>>828
僕も emacs-lisp から入った口だけど、
lisp のアイデアの主要な所はあんまりかわらないよ。
0832デフォルトの名無しさんNGNG
>>823
そんなの lisp 使う必要あるんですか?
sed でも perl でも数行でできることを。
0833すれちがいだけどNGNG
sedだと大変じゃないか?
0834デフォルトの名無しさんNGNG
perl -ane 's/A$//; s/SQL/SQL-/g; s/([a-z_0-9])([A-Z])/$1-$2/g; tr/A-Z/a-z/; print $_'
大文字省略単語は一つ一つ記述。
trの部分を列挙して記述すればsedでも可能。
Lisp, Schemeで書かない限り、この話題終了。
0835デフォルトの名無しさんNGNG
>>834
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#perl.scm
こんなん書いた。これで Scheme で書く。
0836デフォルトの名無しさんNGNG
Emacs 内で Scheme を起動するときに cmuscheme
モードを使っているんですけど、変数名の補完、ヒストリ
等がないためイマイチなんですけど、皆さんどんなの
使ってますか?
0837デフォルトの名無しさんNGNG
>>835
あんた、神!
0838デフォルトの名無しさんNGNG
>>798
はい。
(atom)はかっこに囲まれてますから。
0839デフォルトの名無しさんNGNG
これは日本語かな?
うんこ
0840デフォルトの名無しさんNGNG
これはリストかな?

(atom turkey or)
0841デフォルトの名無しさんNGNG
>>840
はい。
かっこに囲まれたアトムの集まりですから。
0842デフォルトの名無しさんNGNG
>>841
これはリストかな?

(atom turkey) or
0843デフォルトの名無しさんNGNG
>>842
いいえ。
これは実のところかっこに囲まれていない2つのS式です。
1つ目のS式は2個のアトムを格納しているリストであり、
2つ目のS式はアトムです。
0844デフォルトの名無しさんNGNG
>>843
これはリストかな?

((atom turkey) or)
0845デフォルトの名無しさんNGNG
>>844
はい。
今度は2つのS式がかっこに囲まれていますから。
0846デフォルトの名無しさんNGNG
>>845
これはS式かな?

xyz
0847デフォルトの名無しさんNGNG
>>846
はい。
すべてのアトムはS式ですから。
0848デフォルトの名無しさんNGNG
>>847
これはS式かな?

(x y z)
0849デフォルトの名無しさんNGNG
>>848
はい。
リストですから。
0850デフォルトの名無しさんNGNG
>>849
これはS式かな?


((x y) z)
0851デフォルトの名無しさんNGNG
>>850
はい。
すべてのリストはS式ですから。
0852デフォルトの名無しさんNGNG
>>851
これはS式かな?

(how are you doing so far)
0853デフォルトの名無しさんNGNG
>>852
はい。
かっこに囲まれたS式の集まりですから。
0854デフォルトの名無しさんNGNG
>>853
リストの中にあるS式は何個かな?
(how are you doing so far)
それから、それは何?
0855デフォルトの名無しさんNGNG
>>854
6個です。
how、are、you、doing、so、そしてfarですね。
0856デフォルトの名無しさんNGNG
>>855
これはリストかな?

(((how) are) ((you) (doing so)) far)
0857デフォルトの名無しさんNGNG
>>856
はい。
かっこに囲まれたS式の集まりですから。
0858デフォルトの名無しさんNGNG
>>857
リストの中にあるS式は何個かな?
(((how) are) ((you) (doing so)) far)
それから、それは何?

0859デフォルトの名無しさんNGNG
>>859
3個です。
((how) are)、((you) (doing so))、
それからfarですね。
0860デフォルトの名無しさんNGNG
>>859
これはリストかな?

()
0861デフォルトの名無しさんNGNG
>>860
はい。
かっこに囲まれたゼロ個のS式ですから。
この特殊なS式はヌルリスト、空リストと呼ばれます。
0862デフォルトの名無しさんNGNG
>>861
これはアトムかな?

()

0863デフォルトの名無しさんNGNG
>>862
いいえ。
()はリストであるだけです。
0864デフォルトの名無しさんNGNG
>>863
これはリストかな?

(() () () ())
0865デフォルトの名無しさんNGNG
>>864
はい。
かっこに囲まれたS式の集まりですから。
0866デフォルトの名無しさんNGNG
>>865
lが引数
(a b c)
であるとき、lのcarは何かな?
0867デフォルトの名無しさんNGNG
>>866
aです。
このリストの最初のアトムがaですから。
0868デフォルトの名無しさんNGNG
>>867
lが
((a b c) x y z)
であるとき、lのcarは何かな?

0869デフォルトの名無しさんNGNG
かなりうざいんすけど。。
0870デフォルトの名無しさんNGNG
>>869
同意。3日に1個くらいなら我慢できる。

>>862
(atom ()) ==> T
0871デフォルトの名無しさんNGNG
そのうち面白くなるよ!

>>870
なるほど、
(atom? ())
は#tを返すね。
名著なのに、バグが残っているとは...
0872デフォルトの名無しさんNGNG
当り前のことばかり問題に出して面白いか?
君たちがやっているのは >>839 と同じレベルだぞ。
0873デフォルトの名無しさんNGNG
>>871
じゃあ、面白くなってから書き込んでくれ。
0874デフォルトの名無しさんNGNG
>>871
バグじゃねーよ
あほか。
いくらネタが無いからといっても、お前の様な書きこみは必要としていない。
自分でスレ立てしてそっちでやってろ。
0875デフォルトの名無しさんNGNG
何で荒れてるんだ
0876デフォルトの名無しさんNGNG
() が atom とみなされるって、IEEE Scheme だっけ?
0877デフォルトの名無しさんNGNG
禅問答みたいなもんだな
0878デフォルトの名無しさんNGNG
つーかピザだろ。
そういうの面白いと思うけど、
ここでやることじゃないと思う。
どっかにページ作ってくれたら見にいくよ。
0879デフォルトの名無しさんNGNG
それこそ Wiki でも使ったら?
http://paming.s7.xrea.com/ykwk166_kai/yukiwiki.cgi?mycmd=read&mypage=IdeaMemo
0880デフォルトの名無しさんNGNG
>>876
あのさあ、
(define (atom? x)(not(pair? x)))
なわけよ。
じゃあlist?はどうやって定義する?
0881(not 876)NGNG
>>880
(pair? '()) → #f
なんだけど。
0882881NGNG
どうやら日本語を読み間違えたようです。
(adios)
0883デフォルトの名無しさんNGNG
(set! name value) はセルの値を上書きする、
(set! nameA nameB) はセルへの参照(束縛)をコピーする、で合ってますか?

(set! nameA valueA)
(set! nameA nameB) した後で
(set-cdr! nameA valueB) や
(set! nameA valueC) した場合、nameB が参照しているセルの中身はどうなる
のでしょうか?

nameA と nameB が参照している物は常に同じになると思っていたのですが、
実験してみると異なる値が帰ってくるようです。

Scheme を勉強していていきなりつまづいてしまいました。
どなたかご教示下さい。お願いします。
0884デフォルトの名無しさんNGNG
cell というのは単なる object の一種で、
変数の格納場所とは違うんじゃないですか?
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デフォルトの名無しさんNGNG
>>885
struct Pair {
 Object* car;
 Object* cdr;
};

void set_cdr(Pair* p, Object* o) {
 p->cdr = o;
}

こんな感じででわかる?
0887デフォルトの名無しさんNGNG
それと、

void set(Symbol* s, Object* o) {
 s->value = o;
}

普通の実装はこんな風ではないけど。
0888デフォルトの名無しさんNGNG
>>886
済みません。よく判らないです。
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デフォルトの名無しさんNGNG
;; 全然違った。7 行目から。
set-cdr! で (valueA . ()) の () 部に (valueB . ()) を挿入
set! で nameB の参照先を (valueA . (valueB . ())) の (valueB . ()) に
set-cdr! で (valueB . ()) の () 部に (valueC . ()) を挿入。リストとしては (valueA . (valueB . (valueC . ()))) となる。
set! で nameB の参照先を (valueA . (valueB . (valueC . ()))) の (valueC . ()) に
以下、繰り返し。

要は、変数名(束縛)に注目しすぎて、リスト本来の動きが見れていなかったという事でした。
基本中の基本でしょうか?

885 は某所のサンプルコードを元に、実験コードを作成した物です(実際は再帰を使って書かれています)。
リスト全体と、リストの最後の要素を保持する方法を説明したサンプルでした。

スレッドを無駄に消費してしまって済みません。しかも非常につたない文章でご迷惑おかけしました。
0891デフォルトの名無しさんNGNG
>>890
一見してシンプルな問題だけど、結構ハマる所だと思いますよ。
なんか迷ったら、実際の処理系のソースコードを読んでみると良いかも。
0892デフォルトの名無しさんNGNG
(ΦωΦ)フフフ・・・
0893デフォルトの名無しさんNGNG
;; x は評価されない(Lisp の setq)
(set! x y)

;; x は評価される(Lisp の rplacd)
(set-cdr! x y)
0894デフォルトの名無しさんNGNG
>>890
>>2 に書いてある、
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/listproc.html
のセルの絵をみたら多少わかるかも。
0895デフォルトの名無しさんNGNG
symbol単体は変数じゃない。
ただし、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
num
=>10
環境テーブルの構造は言語によって定義されていないが、
ほとんどの教科書には(擬似的に)alistとして表現される。
((num . 10)
 (cons . #<primitive>)
 (set-car! . #<primitive>)
 (set-cdr! . #<primitive>)
 (名前 . 値)...)
set!やdefineはこのテーブルの書き換えを行っている。
0897デフォルトの名無しさんNGNG
scheme自身をschemeで記述すると、この問題は明確になるので、
それを実践してる本を参照するのが早い。(有名なのでSICPとか)
0898OLEさん ◆l/oKiJ62 NGNG
OLEをSCMに移植してます。
だいたい名前付きで無い引数での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
>>899
> (define ie (win32ole:create "InternetExplorer.Application"))
> (win32ole:invoke ie *win32ole:DISPATCH_PROPERTYPUT* "visible" t)
(略)

symbolの方がLisp/Scheme的じゃない? どうせ文字列に蛙の簡単だし。
0901デフォルトの名無しさんNGNG
>>899
ぜひexcel1.pl excel2.plのscheme版を作ってほしい(w
私も作りかけのやつ抱えてますが、なかなか面倒なのでほったらかし・・。
他にもそういう人がいたって事でまた再開しようかな。
自分的にはエクセルで帳票が作れれば十分なんだけど、
まだ起動して表示するまでしかやってない。(VARIANTで一旦挫折)
イベントループは自分で回すやつとVBのDoEvent相当があれば良いと思いますが。
あとコールバック関数の継続の入出力は無理っぽいですね。
再度read-eval-loop相当をコールバック関数上で回す必要がある筈。
SCMだとどうなるんだろ。
0902デフォルトの名無しさんNGNG
>>900
大文字小文字が区別されるモードがある処理系じゃないとシンボルで使えないけど、
こんな風にできれば便利かもね
(define excel (create-oleinstance "Excel.Application"))
(excel 'visible #t)
(excel 'destroy)
0903デフォルトの名無しさんNGNG
(define workbook1 ((excel 'Workbooks) 'Add))
(define sheet1 (workbook1 'Worksheets 1))
こんな感じでしょうか。
やっぱ戻値の振り分けが大変だなあ・・
wtypes.hのVT_*の部分。
0904デフォルトの名無しさんNGNG
CでLISPを作る本。
ttp://page5.auctions.yahoo.co.jp/jp/auction/e7970908
0905デフォルトの名無しさんNGNG
>>904
帯も保存してあるなんてかなり貴重かも・・。
独自仕様なんだよね。
しかしなんで3だけ売りに出すのか気になる。
0906デフォルトの名無しさんNGNG
>>898 >>901
ここ参考にしてがんばってくれ
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
>>900

うーん。
シンボルでもいいかな、と最初は思ったんだけど、
コアの部分は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
現在は名前付き引数の実装が終わって、excel3.rbの移植が
終わった所です。
この次に進むには、

1、ループ周りのインターフェース
2、定数周りのインターフェース
3、処理系

を決めてからの方が良さそうなのでサスペンドしてます。
3は今の所SCMだけど、WinのSchemeって何がメジャーなのか
良く知らないので、皆の意見をききたいと思います。
VC++でコンパイルしやすい処理系の方が、
後のActiveScript化(やる人がいるかは知りませんが)等
との関係からいい気もしますが、そういう事も良くしら
ないので。

定数周りはRubyの実装しか見た事無いのでScheme的には
どうしたらいいのか良くわかりませんでした。
Rubyはクラスにロードしていました。
0910デフォルトの名無しさんNGNG
>>907

((lambda (x) (lambda (x) (* x 3))) 4)

この最初のxは何にも使われて無い気が。
((lambda (x) (lambda () (* x 3))) 4)
こういうつもり?
0911デフォルトの名無しさんNGNG
>>910
Scheme のテキストで、lambda 式の解説にあったのを殆どそのまま
写したものです。
自由変数と束縛変数と言う概念を交えて説明してあるのですが、さらっと
説明してあるだけで、良く分かりません。

最終的にその式はこのように変換され、解が 15 になるらしいのですが、
((lambda (x) (* x 3)) 5)
その過程が良く分かりません。
0912デフォルトの名無しさんNGNG
> (((lambda (x) (lambda (x) (* x 3))) 4) 5)

((lambda (x) (lambda (x) (* x 3))) 4)
この時点で始めの lambda 式の x に 4 が入るが、
この関数はその x の値を無視して
(lambda (x) (* x 3)) こういう procedure を返す。
で、この (lambda (x) (* x 3)) に 5 がわたされるから
15 になる。

始めの x はひっかけ。
0913901NGNG
>>908
VBの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)
0914901NGNG
Dispatch関係で参考になりそうなリンクを貼っておきます。
自分は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
0915901NGNG
ttp://www1.plala.or.jp/knambo/vc/usecom.html
ttp://homepage1.nifty.com/markey/ruby/win32ole/index.html
0916デフォルトの名無しさんNGNG
>>912
成る程。内側の (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
>>901

お、そっちも結構似た所まで来てますね。
dll化は結局、
SCMのオブジェクト<->VARIANT
の変換が肝になるのに、これが処理系依存なので
いまいちな気がするんですが。

イベントは、たぶんhook関数の事だと思います。
Ruby版のソースしか読んで無いので良くしりませんが(^^;
イベント周りを考えてる所です。
0919デフォルトの名無しさんNGNG
macro の力を理解して悟りをひらきたいので、
macro 活用法を学べる、良い本やサイトを教えれ。
0920名無しさん@MeadowNGNG
なんかレベル高いなぁ。まったくわからないことばっかりだ。

>>919 は気になる。「普通のやつらの上を逝け」だっけ?にも lisp といえば
macro だ。みたいなこと書いてありましたね。いろいろ調べてるけど今いち分
からない。でも elisp のパッケージで関数の定義見ようとしたら実はマクロ
だったっていうの発見してちょっと感動した(w
0921デフォルトの名無しさんNGNG
macro っていうのは special form でしかできないような
構文を自分で作るってことだよ。

(if (a) (b) (c))

(a) が真で (c) が無限ループするような時、
if が special form かどうかでこの文の動作がかわる。

他にも macro の使い道はあるけど。
0922デフォルトの名無しさんNGNG
>>919
Paul Graham の On Lisp
0923901NGNG
>>917
うまくまとまってますね。(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")みたいなことする必要ありかも。
0924919NGNG
>>921
「special form でしかできないような構文を自分で作る」てのはわかります。
でも単にそれだけじゃ、そんなにすごくないような気がします。
感動や悟りまではいかないような。。。

「他の macro の使い道」というのが気になるので教えてくだされ。

>>922
情報、サンクスです。
というか、以前から読みはじめてはいたんですけど、
英語っちゅうせいもあって、なかなか読み進まないんですよ。
だからこそ、macro の魔力を理解して、読み進む動機づけにしたい。

(macro に期待しすぎかなあ)
0925デフォルトの名無しさんNGNG
「なんでもマクロ」きぼんぬ?
0926デフォルトの名無しさんNGNG
>>924
本探すより、
処理系の拡張構文の実装のほとんどはマクロだから参考になるよ
0927922NGNG
>>924
そうでしたか。自分も読み切ってはいないんですけど。
自分は、コードをより handy にしたい場合によくマクロを使います。
例えばプログラムのあらゆる箇所で同じ様な処理を行う場合とか、
コードの見た目が美しくない時などですね。

いずれにせよ、関数 (手続き) でできる事は関数で済ませますし、
そうでない場合はマクロを使います。無理にマクロを使う必要は
ないと思いますよ。関数だけでもかなりの魔力を持ってますからね。
0928デフォルトの名無しさんNGNG
Linux で scheme な人って処理系は何を使ってます?
emacs で elisp をいじるみたいな環境が理想なんですが、guile emacs 使う
のがてっとり早いですかね。guile + emacs で M-x run-scheme はいまいち使
いにくいんですが。あと windows 環境についてもできたら聞きたいです。
;; 今 SICP のオンライン版を解読しつつ勉強中です。
0929デフォルトの名無しさんNGNG
Gauche は "ガウチェ" と読むと思ってたよ。
ゴーチエ、ゴーシェ、ガウチョ、と色々悩んだ末だったので、もうガウチェとしか
読めない頭になってしまった。

>>928
要はエディタのマクロを scheme で書きたいって事ですか?

scheme のフロントエンドにエディタを使いたいなら emacs 使えば良いよね。
あと、NGSCM は、使った事無いけどちょっと興味あり。
http://aten.aial.hiroshima-u.ac.jp/Reprints/NGSCM/ngscm.html

>>705
XSCML きぼん。
0930928NGNG
>>929
エディタのマクロを書きたいというわけではなくて、scheme の勉強をしたい
んです。M-x run-scheme はちょっと使いにくいんで他にいい方法がないかな
と。emacs 上で elisp 動かすみたいに scheme が動いてくれたら嬉しいんで
すけど、それをやるなら guile-emacs ですかね。NGSCM というのをちょっと
調べに逝ってきます。
0931929NGNG
>>930
これも使った事ないんだけど、>>352 は如何?
便利だったら教えてね。
0932836NGNG
>>930
836 で同様の質問をした者ですが
>>352 で紹介されているやつはすごくいいです。

lisp-interaction-mode とほぼ同様の感覚で
Scheme が使えます。例えば S 式を書いて
[C-j] で評価することができます。さらに
M-tab で補完もできるようになります。
0933836NGNG
>>928
ちなみに当方の環境は
Windows-2000 + cygwin + guile-1.5.4 + Meadow + emacs-guile
でかなり快適に使えています。
0934928NGNG
>>932
あ、禿げしく外出だったんですね。すみません。

でも guile1.4 が make できない。version1.4 以上じゃないといけないんで
すよね...
$ ./configure
$ make
$ su
$ make install
でできないとお手あげな厨房なんですが...
0935928NGNG
あ、FAQ にありました。またやりなおしに逝ってきます。
0936デフォルトの名無しさんNGNG
>>934
環境が書いてないのでなんともいえないけど、
Linux なら rpm か deb がどっかにあるんじゃないの?
Windows なら cygwin 用の rpm が Project HeavyMoon
か >>835 にあるよ。
0937928NGNG
>>936
環境は Redhat7.2 と windows2000 + cygwin です。
FAQ にあったとおり ibguile/net_db.c, line 85 をコメントアウトして
guile の make は成功しました。

rpm も探したんですがいろいろあってわけわかんなかったのと src.rpm のイ
ンストール方法がわからなかったので(汗

emacs-guile もすごくよさそうですね。これから遊んでみます。
みなさんいろいろと情報ありがとうございました。
既出の質問をしてしまってすみませんでした。
0938928NGNG
>>937
すみません。libguile/net_db.c, line 85 です。
コピペしたら 1文字抜けました。

>>931さん、>>932さんが書かれている通りすごく便利そうですよ :-)
0939デフォルトの名無しさんNGNG
>>924
例えばファイルや DB などで
「オープン - 読み書き - クローズ」
みたいなコードは頻繁に現れるけど、
マクロがあれば以下のようなコードを

(setq stream (open "foo.txt"))
;; stream に読み書き
(close stream)

下のみたいに書くことができるようになるけど

(with-open-file (stream "foo.txt")
 ;; stream に読み書き
 )

こう書けると便利だよね?
クローズし忘れもなくせるし。
(ちなみに実際の with-open-file の定義は上とは違うよ)
0940939NGNG
実際の with-open-file はこんな感じだと思う。
処理系によってはもっと下のレベルで実装され
ているかもしれないけどね。

(defmacro with-open-file ((var &rest open-params) &body body)
 `(let (,var)
   (unwind-protect
     (progn
      (setf ,var (open ,@open-params))
      ,@body)
    (close ,var))))
0941デフォルトの名無しさんNGNG
Gauche は「藤原嘉藤冶」と読みます。
0942デフォルトの名無しさんNGNG
>>941
それが既に読めないよ・・・。

vi 遣いに優しい scheme 実行環境は無い物か。
シェルのラインエディティングは emacs 互換モードを使ってるから、別に良いけど。
0943デフォルトの名無しさんNGNG
ttp://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=gauche&sw=0
辞書に載ってた。ゴーシュ。
0944デフォルトの名無しさんNGNG
FFの赤マ同志が持ってるのはマインゴーシュ
0945デフォルトの名無しさんNGNG
FFとは限らないだろ
0946デフォルトの名無しさんNGNG
>942
じゃあemacsみたいにschemeでvi作ってよ
LISP対scheme(=emacs対vi)
みたいでおもしろいじゃん
0947デフォルトの名無しさんNGNG
よろしければ教えてください。
SCMで実行している環境の持っている環境変数の一覧を得る方法を
探しています。ご存じの方がいらっしゃればよろしくお願いします。
Unix環境で使っています。
0948デフォルトの名無しさんNGNG
>947
getenvじゃだめなの?
0949デフォルトの名無しさんNGNG
>>947
(system "env")
でどう?
0950947NGNG
getenvだと逐一指定しないといけないのが困ります。
想定していない分も表示できる方法はないでしょうか。
0951947NGNG
>>949
ありがとうございます。
これをリストに直せるか試してみます。
0952947NGNG
上手く行かないようです。名案のある方がいらっしゃればお願いします。
何度もすみません。
0953デフォルトの名無しさんNGNG
Guile だと (environ) で全部出るけど、SCM は知らん。

0954デフォルトの名無しさんNGNG
>>952
#\newline で split すればいいじゃん
0955デフォルトの名無しさんNGNG
>>946
是非作ってみたいんだけど、Gauche に curses とか readline みたいな
ライブラリってあったっけ? slib にならあるかな。
0956947NGNG
>>964
あまりSchemeから出たくないですが、それしかないでしょうかね。。。

( ("TERM" . "kterm") ("PWD" . "home/hoge") ......)のように連想リストの形にしたい
と思っています。Guileも入れてみたので、こっちでも試してみます。

>>955
すでにご存じだと思いますがどうぞ。
http://tanaka-www.cs.titech.ac.jp/~euske/scm/oldindex.html
0957953NGNG
>>956
Guile だとこんな感じかな。もっと良いの書けそうだけど。

(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
>>955
描画部分はviから奪ってくればよし
0959デフォルトの名無しさんNGNG
scheme を使った階乗の計算で、
(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 がどう結びつく
;; のかよくわからないんですが。
0960947NGNG
>>957
ありがとうございます。
求めていたものが得られました。
これからも精進します。
0961 NGNG
     |Д`)
     |⊂  ダレモイナイオドルナライマノウチ
     |     


           Å
       ♪ / \
     ♪  ヽ(´Д`;)ノ ランタ ランタ
         (  ヘ)   ランタ タン
          く     ランタ タンタ
                 タン

          Å
     ♪   / \
        ヽ(;´Д`)ノ ランタ ランタ
      ♪  (へ  )   ランタ タン
            >   ランタ タンタ
                 タン
0962デフォルトの名無しさんNGNG
>>959
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/recursive.html
これとか読んでわからなかったら死にましょう。
0963デフォルトの名無しさんNGNG
http://www.ne.jp/asahi/haruyo/pocket/color/color.html
( ゚д゚)ポカーン
0964デフォルトの名無しさんNGNG
mit scheme で cmu-scheme.el でなく xscheme.el 使えば
emacs の lisp-interaction-mode に近くなるよ。
あと mit scheme だけでできてる emacs like editor も
面白いかも。elisp と scheme が入れかわったような感じ。
emacs ほどボリュームはないけど拡張性は同じくらいある。
0965デフォルトの名無しさんNGNG
guile-1.7.0 を使っているのですが、readline を使おうとしたら

guile> (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デフォルトの名無しさんNGNG
>>955
vimに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デフォルトの名無しさんNGNG
>>347 に regex と readline が必要だったって書いてありますね。
readline は rpm で入ってたけど regex がなかったので、
regex-0.12.tar.gz 入れたけどやっぱりだめだ。。。
0968デフォルトの名無しさんNGNG
>>965
まずエラーの原因を特定する。メッセージのとおりなのか、それとも誤報なのか
コード公開されてんだからわかるっしょ。デバッガもあるし、
truss/strace/ltrace系のツール使ってもわかるだろうし。
メッセージのとおりの原因だったら何でダイナミックリンク失敗するか考えてみ。
ld.so.confとか確認したか?
0969デフォルトの名無しさんNGNG
そろそろ次スレを立てれよ
0970デフォルトの名無しさんNGNG
現実問題として、vi-schemeなんかがんばって作っても使う人いないと思う。
ただでさえviなんだからさ(w
0971965NGNG
>>968
エラーの原因ですか、、
strace と ltrace というのを今初めて使って調べてみましたが何だかよくわ
からないです。
とりあえず分かる範囲で、/etc/ld.so.conf に /usr/local/lib と
/usr/local/include/libguile を追加して /slib/ldconfig してみましたが状
況は変わりませんでした。続きはまた明日調べてみます。
0972デフォルトの名無しさんNGNG
>>970
これでも歌ってれ!
http://www.gnu.org/fun/jokes/eternal-flame.html
0973953NGNG
偏見で申し訳ないが、vi ユーザに Lisp/Scheme は合わない。
閉じ括弧だけの行を作ったり、タブ文字でインデントするような
人達だから。Haskell でも使ってなさい。
0974デバッグスレにすんなNGNG
>>965=967=971
ldd -V guileしてみ
0975vi-lisper なめんなNGNG
>>953
vi -l してみ
0976965NGNG
>>974
レスありがとうございます。でも新しい問題が発生しました。
$ 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
>>976
あのさ、>>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"))
こういうことになってるから。
0978965NGNG
In guile-1.4 you could just type into a repl:
(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 がある場所を指定してみた
んですがこれは関係ないようですね...
0979965NGNG
あ、guile 関係のファイルを一回全部消してからインストールやりなおした
ら readline 使えるようになった。よかったぁ。
0980デフォルトの名無しさんNGNG
>>978
cygwin では "guile" コマンドの make 時に libguilereadline.a
を一緒にリンクしてしまえば readline が使えるようになるよ。
0981デフォルトの名無しさんNGNG
Gauche でシェルのコマンドを実行するのは (sys-system "command")
でできるのね。

>>973
tput 等使ってムフフなスクリプトを書いていますよん。
0982デフォルトの名無しさんNGNG
そろそろ次スレだね
0983デフォルトの名無しさんNGNG
いちおう、次スレです

LISP Scheme Part4
http://pc.2ch.net/test/read.cgi/tech/1016211619/
0984 NGNG
age
0985デフォルトの名無しさんNGNG
>984
次スレあるのに。
あまのじゃくさん?
0986デフォルトの名無しさんNGNG
;; あまりに低レベルなのでこっちに。
nil でなければ t にするのに適当なのありますか?
(not (null hoge)) ってのはチトカコワルイ
0987デフォルトの名無しさんNGNG
>>986
nilでなければtにするのがnotだと思うんですけど……。
ifの代わりならunless、とか?
0988デフォルトの名無しさんNGNG
  ∧_∧
 ( ・∀・) ニヤニヤ
 ( 1000 )
 | | |
 (__)_)
0989デフォルトの名無しさんNGNG
コソーリ
0990デフォルトの名無しさんNGNG
マターリ
0991デフォルトの名無しさんNGNG
ヒソーリ
0992デフォルトの名無しさんNGNG
コソーリ
0993デフォルトの名無しさんNGNG
マターリ
0994デフォルトの名無しさんNGNG
ヒソーリ
0995デフォルトの名無しさんNGNG
コソーリ
0996デフォルトの名無しさんNGNG
(・∀・)アト4!!
0997デフォルトの名無しさんNGNG
∀・)アト3!!
0998デフォルトの名無しさんNGNG
・)アト2!!
0999デフォルトの名無しさんNGNG
 サッ
)彡
10001000 ◆h.gHK9LE NGNG
                / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         Λ_Λ <  コソーリ
        (´∀` )  \__________
  ∧ ∧   (___,,)_     
 (.,゚Д゚)/ ̄ ̄ ̄ ̄ /|     
 │ /∧ ∧    //||
 (/___(   ,,) _//  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ||  ,,/  つ ||/   <  1000!!
 ||  (__丿  ||      \__________
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。