5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

LISP Scheme Part7

1 :デフォルトの名無しさん:03/01/10 11:53
過去スレ
Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/test/read.cgi/tech/1002584344/
Part3: http://pc.2ch.net/test/read.cgi/tech/1008220265/
Part4: http://pc.2ch.net/test/read.cgi/tech/1016211619/
Part5: http://pc3.2ch.net/test/read.cgi/tech/1023091882/
Part5: http://pc3.2ch.net/test/read.cgi/tech/1031560687/
関連リンクは>>2-10あたり

2 :デフォルトの名無しさん:03/01/10 11:55
□参考リンク□

日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
http://jp.franz.com/
削るとAllegro Common Lispのページへ

プログラミング言語Scheme(日本語)
ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。

Lisper への道(日本語)
ttp://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
ここはschemeの入門サイト。



3 :デフォルトの名無しさん:03/01/10 11:55
慶応の授業のページ・記号処理プログラミング 2001
http://buri.sfc.keio.ac.jp/lisp/menu.html

Practical Scheme(日本語)
ttp://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)

Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
S式でXMLを使える様にするSXMLなど

John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。

お隣りのプログラマ板のLISPスレのログです。(dat落ち)
http://mentai.2ch.net/prog/kako/963/963134110.html


4 :デフォルトの名無しさん:03/01/10 11:55
□仕様書関係□

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/

5 :デフォルトの名無しさん:03/01/10 11:55
□SICP関係□

SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。

計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
http://www.ipl.t.u-tokyo.ac.jp/sicp/

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/

6 :デフォルトの名無しさん:03/01/10 11:56
□その他□

Schemeで書かれた正規表現ライブラリ
ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html

幻の「入門Scheme」
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
オンラインで読める

各種scheme処理系をcygwin上からビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/

Bit - Implantation compacte de Scheme
http://www.iro.umontreal.ca/~dube/
mini-schemeよりも小さい(?)bytecode変換系

Lisp 言語処理系: CAMPUS LIsP, Lemon version
http://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
Cコードによるわずか1000行の実装



7 :デフォルトの名無しさん:03/01/10 11:56
Scheme 処理系に追加( Scheme 処理系を自作したい人向け)。

Minischeme: 1 ファイルに凝縮された Scheme 処理系
http://tinyscheme.sourceforge.net/minischeme.tar.gz

TinyScheme: Minischeme の発展版
http://tinyscheme.sourceforge.net/

KI-Scheme, AM-Scheme, etc...
http://www.nifty.com/download/dos/prog/lisp/

LispMe: Palm 上で動く Scheme 処理系
http://www.lispme.de/lispme/



8 :デフォルトの名無しさん:03/01/10 12:09
>>1
乙カレ〜。

Bibliography of Scheme-related Research
http://library.readscheme.org/
Scheme関連の論文リンク集


9 :デフォルトの名無しさん:03/01/10 12:11
前スレ
Part6: http://pc3.2ch.net/test/read.cgi/tech/1031560687/

10 :名無しさん@XEmacs:03/01/10 20:03
スレ立て乙>>1
"ANSI Common Lisp" 買ったsage。

11 :デフォルトの名無しさん:03/01/10 22:25
>>14
漏れも買った。でも読んでない…。


12 :デフォルトの名無しさん:03/01/11 07:47
わたしは買ってない…。でも読んだ。

13 :デフォルトの名無しさん:03/01/11 12:51
ANSI Common Lisp買った!

14 :デフォルトの名無しさん:03/01/11 13:14
(display '関係無い話は余所でやってください)

15 :デフォルトの名無しさん:03/01/11 23:48
ANSI Common Lisp いいでつね。

16 :デフォルトの名無しさん:03/01/12 20:20
やっとcons.orgが復活したみたい。

17 :デフォルトの名無しさん:03/01/12 21:05


18 :LISPスレ住人その1:03/01/12 21:17
とりあえず一連の意味不明レスを削除依頼してこようか?(このレスを含め)
判別できるのは、
>>10-13
>>16-20
>>22-27
>>30-32
>>34-37
>>39-41
これでok?

19 :LISPスレ住人その1:03/01/12 21:26
レス削除依頼完了。
最近人いないなあ・・・

20 :名無しさん@Emacs:03/01/13 03:00
大抵の Linux ディストリビューションには usb-scheme っていう scheme 処理系が
入ってるみたいなんだけど、これの歴史的な理由を御存じの方います? 何か MLD に
も入ってるみたいでびびった。

21 :山崎渉:03/01/13 18:29
(^^)

22 :デフォルトの名無しさん:03/01/13 19:09
http://www.javaopen.org/jfriends/sicp.html

こんなのがあるんだね
既出?

23 :デフォルトの名無しさん:03/01/13 20:25
それ翻訳者の和田先生が来るらしいね。
一度いってみたいなあと思ってます。
その時はよろしこ(藁

24 :デフォルトの名無しさん:03/01/13 22:07
ふぁーすと
せかんど
さーど
ふぉんど
ふぁいぶんど

25 :デフォルトの名無しさん:03/01/14 00:02
>>47
資料を見てみると、だいぶしまいの方まで来てるぞ。
行く前に終わってるんじゃないか。(W


26 :デフォルトの名無しさん:03/01/14 04:39
姉妹?終い?
たしかに漏れは終わっている部類の人間だが、
そんなことは関係なし。先生に会いに行くのだ(藁

27 :デフォルトの名無しさん:03/01/14 06:28
もう来た回は終わってるのでは?

28 :デフォルトの名無しさん:03/01/14 13:30
なるほど、そういうことね。失礼しました。

29 :デフォルトの名無しさん:03/01/14 21:36
cl.el使えばEmacs LispもCommon Lispにレベルアップですか?

30 :デフォルトの名無しさん:03/01/15 12:39
>>22
申し込んだけどまだ2章。だめぽ.....。

31 :山崎渉:03/01/15 17:46
(^^)

32 :デフォルトの名無しさん:03/01/16 00:11
http://www-6.ibm.com/jp/developerworks/xml/030110/j_x-xslrecur.html

33 :デフォルトの名無しさん:03/01/16 16:09
質問です。
内部エンコーディングがEUC-JPのGaucheを使って、Shift-jisコードを
16進数で表示しようとしています。

(char->integer #\あ)とすることによって、内部エンコーディングを
10進数で表示できました。しかし、Shift-JISの表示は分かりませんでし
た。

(char->integer (ces-convert #\あ "EUCJP" "SHIFTJIS"))では、String
がchar->integerに渡されるためにNGでした。

御面倒ですが、アドバイスをお願いします。

34 :デフォルトの名無しさん:03/01/16 17:09
gaucheの「文字オブジェクト」は内部エンコーディングに固定なので
char->integerは使えない。
変換後の文字列を1バイトづつ取り出すしかないのでは。

(let ((sjis (ces-convert "あ" "eucjp" "shift_jis")))
(fold (lambda (index num)
(+ (* num 256) (string-byte-ref sjis index)))
0
(iota (string-size sjis))))




35 :デフォルトの名無しさん:03/01/16 18:36
>>32
LISPのLIの字も出てこんなあ。けしからん。
お叱りの言葉と「 不充分・不完全である」
にチェック入れてフィードバックすた。

36 :デフォルトの名無しさん:03/01/17 00:20
>>32 世間はそこまでして Lisp をそらすのか…。> → ) にならんもんですかね?

37 :デフォルトの名無しさん:03/01/17 01:25
(xsl:template priceSum (productList)
 (xsl:choose
  (xsl:when productList
   (xsl:variable (recursive_result)
    (xsl:call-template priceSum
     (xsl:with-param (productList (cdr productList)))))
   (xsl:value-of (+ (number (substring-after (/ $productList[1] Price) '$'))
            $recursive_result))
  (xsl:otherwise (xsl:value-of 0))))

38 :デフォルトの名無しさん:03/01/17 02:13
何か1つくらい関数型言語の例を挙げてくれてもよかろうに。

39 :デフォルトの名無しさん:03/01/17 11:14
>>34
具体的にコードまで教えていただきありがとうございしました。
理解できました。

40 :デフォルトの名無しさん:03/01/17 14:30
XSLってquoteの概念ってあるの?


41 :デフォルトの名無しさん:03/01/17 20:32
どうも$つけて変数ってしてるみたいだから
必要ないんじゃないだろうか。

42 :C++厨:03/01/19 15:13
MIT MIT MIT〜〜( ゚∀゚ )

43 :デフォルトの名無しさん:03/01/20 20:11
cmucl の News に
>2003-01-10
>Antonio Leitao has posted the code of an Emacs-based debugger and inspector
> for CMUCL, that is based on ILISP. See the cmucl-imp mailing list for the source code.
とあるのですが gmane.org 経由でのぞいても Antonio タンの記事が見つからないんです。
うわぁぁん、使ってみたいよ〜。cmucl-imp 購読者な神よ、ウプキボンヌ!

44 :山崎渉:03/01/23 20:07
(^^)

45 :デフォルトの名無しさん:03/01/24 16:06
年末辺りからカキコ少ないなあ。
lisperは普段どこ行ってるの?

46 :デフォルトの名無しさん:03/01/26 21:36
「知の限界」 G.J.チャイティン 著 黒川利明 訳

これ、面白い。

47 :デフォルトの名無しさん:03/01/27 04:23
"ANSI Common Lisp" の8章の練習問題で、
「123ページのdefpackageの呼び出しでは、引数にはストリングしか使わなかっ
た。シンボルを使うこともできたのだが、これは危険なことがある。なぜか。」
というのがありますが、具体的にどうまずいのか思いつきません。
御存じの方いらっしゃいましたら御教示下さい。

123ページの…というのは
(defpackage "MY-APPLICATION"
(:use "COMMON-LISP" "MY-UTILITIES")
(:nicknames "APP")
(:export "WIN" "LOSE" "DRAW"))
という一般的な例です。


48 :デフォルトの名無しさん:03/01/27 11:11
>>47
引数がシンボルだと、defpackage形式を読み込むパッケージによっては
意図しているのと違うパッケージのシンボルを指してしまうことが
あるからかなあ。
パッケージ違いによるバグは結構はまる。プログラムコードをいくら
睨んでもわからないから。

49 :デフォルトの名無しさん:03/01/27 17:31
おぉ、47 ではないですがためになります。ちょっと疑問に思ったんですが
シンボルじゃなくてキーワードを使うのはどうなんでしょう?
(defpackage :mypackage (:use ...))
みたいな。文字列だと *readtable* を考慮するのが面倒なんですが…。
皆 :UPPERCASE なんで気にしなくていいんですかね?

50 :デフォルトの名無しさん:03/01/28 00:35
>>49
キーワードもシンボルなのだが、それはそれとして、
キーワードを使用するのは極めて一般的です。

51 :47:03/01/28 03:19
>>48
なんかそういうことが起こりそうだなあという気はするのですが、
今日は色々試していたのですが残念ながら中々そういう事態をうま
く作りだせませんでした。
お心あたりがありましたら、例を頂けると有難いです。

それとは別に、試行錯誤しているうちに一つ発見したのは、
読み込む側のシンボルテーブルを汚染してシンボルを作ってしまう
ために、useしようとしたパッケージがたまたま重なった名前を
exportしていると、シンボルが衝突してしまうということですね。




52 :デフォルトの名無しさん:03/01/28 23:36
正直 AI に興味ないのだが、Lisp を読みたくて
Paradigms of Artifical Intelligence Programming
を買ちゃった age

53 :47:03/01/29 02:27
"ANSI Common Lisp" 読み終えたので記念にあげます。
あー面白かった。

ちょっと悔しいのが、型宣言をうまく使えなかったことで、高速化
を扱った9章の練習問題にて(例に出てきた)レイトレーサのプログ
ラムに型宣言を追加せよ、というのがあったのですが、これに型宣
言を追加するとかえって遅くなってしまいました。その前のCLOSの
章の練習問題にてdefstructをクラスにしたものをベースに、あち
こちにsingle-floatの宣言を入れてついでに多く使われてるものは
inlineも指定したんですが、型宣言を入れる前には追い付けずじまい。
どうするのがいいのやら。


54 :47:03/01/29 02:28
ああしまった、あげてなかったので今度こそあげます。すまそ。


55 : :03/02/01 16:25
clispのソースを読もうと思いましたが挫折しますた。

_clips.cのexecvでlisp.runを起動させて
lisp.run側で処理をするんだとは思うのですが、
このlisp.runのソースはどれなんでしょうか?

clisp/src/spvw.dがソースかとも思ったんですが、
cのコードっぽいけどなんかcのソースファイルじゃないし・・・

56 :デフォルトの名無しさん:03/02/04 20:34
なにかいいことない?


57 :デフォルトの名無しさん:03/02/04 21:20
>>56 何か英語のリファレンスとかソフトを日本語に訳して自分でいいこと提供してみるとか。

58 :デフォルトの名無しさん:03/02/06 15:26
>>57
英語のSICP読むの諦めて
図書館で日本語訳借りてきた俺にはだめぽ

59 :デフォルトの名無しさん:03/02/08 16:31
(defun http://pc2.2ch.net/test/read.cgi/tech/1042167213/59 ()
(http://pc.2ch.net/test/read.cgi/prog/1031179059/383))


60 :拒食症:03/02/08 22:48
SICPを読んでいます。はじめて作りました。どうでしょうか・・・。
(define square
  (lambda (x)
    (* x x)))

(define make-prime
  (lambda (upper)
    (let ((ls (list 2 3)))
      (let f ((x 5))
        (if (> x upper)
            ls
            (let g ((_ls ls))
              (cond
               ((zero? (modulo x (car _ls)))
                (f (+ x 2)))
               ((> (square (car _ls)) x)
                (set! ls (append ls (list x)))
                (f (+ x 2)))
               (else
                (g (cdr _ls))))))))))


61 :拒食症:03/02/08 22:53
間違ってsageちゃいました。

62 :名無しさん@XEmacs:03/02/09 02:02
どうでしょうか、って何が?

63 : :03/02/10 00:36
いまから libguile であそびます。
http://nis-www.lanl.gov/~rosalia/mydocs/learn_libguile_toc.html
http://nis-www.lanl.gov/~rosalia/mydocs/learn_libguile.ps
おまえらも遊びませんか?

64 : :03/02/10 01:44
がーん、なんか >>63 のは古いドキュメントだった。
http://www.cs.utexas.edu/users/bdbryant/guile-for-ada/guile-tut_toc.html
見て遊んできます。

65 :デフォルトの名無しさん:03/02/12 15:44
ANSI Common Lisp
http://www.amazon.co.jp/exec/obidos/ASIN/4894714337/250-8225561-7907410
の練習問題のP51の5(c)のmapcarを使う場合のpos+の定義方法がよく分かりません

pos+の引数のリストから(0 1 2 3)のようなリストを作成した後にmapcarする
(mapcar #'+ lst (make-pos-lst lst)) ;;make-pos-lstは(0 1 2 3)のような
                    ;;リストを作成する

のような考え方でよいのでしょうか

66 : :03/02/12 20:54
>>65
漏れならこう書くが、合ってるかどうかは知らん。
ANSI Common Lisp持ってないし。

(defun pos+ (l)
 (let ((n -1))
  (mapcar #'(lambda (x) (+ x (incf n))) l)))

67 :デフォルトの名無しさん:03/02/12 22:56
>>65
私もちょうど同じところでひっかかりました。

それと、P.51の3問目、要求仕様を満たすものはできるのですが、
どうもダサいものしかできません。恥を忍んでさらしますので、ど
なたかもっと美しい答えを貼ってもらえんでしょうか。

(defun occurrences (lst)
(let (result)
(dolist (item lst)
(setq result (occurrences-sub item result)))
(sort result #'> :key #'cdr)))

(defun occurrences-sub (item result)
(let ((pair (assoc item result)))
(cond (pair (setf (cdr pair) (1+ (cdr pair)))
result)
(t (cons (cons item 1) result)))))

どこかに練習問題の模範回答はないんかな?


68 :デフォルトの名無しさん:03/02/13 02:42
私のはこう。

>>65
(defun pos+ (lst)
(let ((n -1))
(mapcar #'(lambda (x)
(setf n (+ n 1))
(+ n x))
lst))))

>>67
(defun occurrences-help (count lst)
(let* ((elem (car lst))
(a (assq elem count)))
(cond
((null lst) (sort count #'(lambda (a b) (> (cdr a) (cdr b)))))
(a (setf (cdr a) (+ (cdr a) 1))
(occurrences-help count (cdr lst)))
(t (occurrences-help (cons (cons elem 1) count) (cdr lst))))))

(defun occurrences (lst)
(occurrances-help '() lst))


69 : :03/02/13 05:15
lisp は Emacs Lisp を使っている程度です。
最近卒論でちょっとしたシミュレータを作っていまして、
そのシミュレーションシナリオの記述言語として lisp を採用してみたいと思っています。
一般的に C/C++ に lisp インタープリタとしての機能を付け加えたいとき、
なにかおすすめのライブラリなどはありますでしょうか?

Scheme でも OK なのですが、 libguile はちょっと敷居が高いと感じていまして。

70 : :03/02/13 05:23
http://www.shiro.dreamhost.com/scheme/gauche/devinfo-j.html
をみると Gauche にも予定では
by version 0.9.0
Revise C API. More extensions. C API documentation.
となっていたり、
http://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refe_1.html#SEC1
を見ると

This manual only deals with Scheme side of things.
Gauche has another face, a C interface. Details of it will be discussed
in a separate document to be written.
Those who wants to use Gauche as an embedded language,
or wants to write an extension, need that volume.

だったりします。

71 :67:03/02/13 10:20
>>68 THNX


72 :デフォルトの名無しさん:03/02/13 10:32
>>69
他の動的な言語もそうだけど、LISPにはGCの存在があるので、
Cとかに組みこむ時にはちょっと気をつけないといけない事がある。
C側で参照しているLISPオブジェクトがあり、その上でLISP側の
処理が走りGCが起動すると、LISP側で参照されていない(GCが
把握していない)オブジェクトはゴミとして回収されてしまう。
このとき、C側(親)で参照していたオブジェクトは、何も対策を作って
ないと、いつのまにか無効な物になっていたりして、なかなか取れない
バグの原因になる。
例として、EmacsLisp向けのCによるコードを書く時は、LISP側の処理
を起動させる直前に外部(C側)で使用しているLISPオブジェクトへの
参照を全てGCに把握させるコードを埋め込む必要がある。
この辺はかなり注意深く書かないと容易に不具合を引き起こす。

しかし、この問題は保守的な(conservative)GCを採用すればほぼ
解決する。保守的なGCはCで使用されるスタックをすべてGCが管理
すべきオブジェクトのポインタとみなし、アドレスがGC側でアロケート
した領域であれば自動でそれを保護してくれる。ただし見なすという
性質上、回収漏れが起きたりする。これはスタックが深くならない限り
はそれほど問題にはならない。
きちんと管理したくない場合は、保守的なGCを採用したLISP
を使うのがいいと思う。
(ちなみにlibguileはたしか保守的GCを使ってない。)
gaucheは下のBoehmの保守GCを改造して使ってたと思う。

有名な保守的GC
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

73 :65:03/02/13 11:06
>>66,68
どうもありがとうございます
そうかlambdaを使えばnをインクリメントさせて加算できるのか・・・

>>67
私はそれ作るのに50行以上かかりました(鬱

74 : :03/02/13 11:09
>>72
詳しいレスありがとうございます。
GC 周りでは気をつけなければならないことが多そうですね。
注意深くやりたいと思います。

もう少し借用させて頂けそうな lisp / scheme の実装を
探してみたいと思います。

問題の本質とは関係ありませんが、
お偉方は Windows しか使えないので最終的には Win32 な
バイナリを吐く必要があるのも、困難な点の一つです。
Gauche / Guile は cygwin 環境下で動いているようです。
さすがに Native Win32 環境下では難しそうですね。

自分のマシンは Linux (Debian GNU/Linux 3.0r1) と IBM AIX 5L です。
AIX は借り物ですけど。

75 :72:03/02/13 12:15
あ、libguileもconservativeだった。スマソ

76 :デフォルトの名無しさん:03/02/14 16:35
>>69
libguile か librep がいいんじゃない。
この2つははじめから組み込みを意識して作られていますから。
C への組み込み方法がドキュメントに載ってるよ。


77 :72ではないです:03/02/14 17:36
librepって速度的にはどうですか。
昔のGuileは激遅だったので。

78 :デフォルトの名無しさん:03/02/15 03:40
Guileって速度面でいい評判聞かないね

79 :デフォルトの名無しさん:03/02/15 11:39
GuileはSCMをベースにしてるのにSCMより遅い。発展途上だからね。
組み込みならSIODも軽くていいかもね。

80 :デフォルトの名無しさん:03/02/15 12:44
>79
GuileとSCMは枝分かれしたのがずいぶん前だからね。
一本化ってできなかったのかなー

81 :デフォルトの名無しさん:03/02/23 14:59
うーむ、保守しとくか。

82 :デフォルトの名無しさん:03/02/23 16:50
Unix板のスレは活気があるのにね、なんでだろ。

83 :デフォルトの名無しさん:03/02/23 19:38
    ∧ ╋   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    / †|. ┃ < 我が偉大なる神 Emacsに祈りを捧げよ
   |`ー┐λ  \_____________
    |::.ヽ丿.┃
    |::.  |.| ┃
   ノ::::...ノ | ┃
 ̄` ̄ ̄ ̄´ ̄ ̄

84 :デフォルトの名無しさん:03/02/23 20:59
>>60
再帰使ったほうがLispっぽいと思う。
(define (square x) (* x x))

(define (prime? x ls)
(cond ((null? ls) #t)
((zero? (modulo x (car ls))) #f)
((> (square (car ls)) x) #t)
(else (prime? x (cdr ls)))))

(define (add-prime x ls)
(if (prime? x ls) (append ls (list x))
ls)))

(define (make-prime upper)
(if (< upper 2) '()
(add-prime upper (make-prime (- upper 1)))))

85 :デフォルトの名無しさん:03/02/23 22:45
>>82
だからじゃないか?


86 :デフォルトの名無しさん:03/02/24 18:48
「計算機プログラムの構造と解釈 」
この本に関して質問です。
原書と翻訳版とでページ数がかなり異なりますが、何か理由があるのでしょうか?
(どこかのしょうが削られているとか、、、)

それと、日本語訳はうわさどおり、読みにくいものなのでしょうか?

87 :デフォルトの名無しさん:03/02/24 21:39
たいてい翻訳の方が分量が多くなるんだけど、
SICP第2版は翻訳版の方が紙がだいぶ大きい。
(版形っていうんだっけ?)

88 :デフォルトの名無しさん:03/02/26 20:22
【何処も】情報科学総合スッドレ【板違い】
http://science.2ch.net/test/read.cgi/rikei/1046173479/l50


89 :デフォルトの名無しさん:03/02/26 21:37
gauche で書かれた mail filter の scmail のソースの中に

(if (eq? status :next)
  (process-rule config mail field-name
         (cdr patterns) command param)
  :last))))

のように :next とか :last とかあるんですがこれって何か意味があるんでしょ
うか? ソースや info 見ても手掛かりを見つけられなかったのですが。。。


90 :デフォルトの名無しさん:03/02/26 22:01
infoの"Keywords"の節を参照。


91 :デフォルトの名無しさん:03/02/26 23:04
>>90
単純に symbol として使っているみたいですね。if 文が keyword 引数を取っ
ているのかと勘違いしてました。


92 :デフォルトの名無しさん:03/02/27 13:38
ttp://www.asahi-net.or.jp/~ki4s-NKMR/

93 :デフォルトの名無しさん:03/02/28 21:19
ピアソンから出てるANSI Common Lisp (ポール・グレアム著)の問題の答え教えれ

94 :デフォルトの名無しさん:03/02/28 23:46
自分で考えた末にまだ悩んだものならここで相談すればよかろう。


95 :デフォルトの名無しさん:03/03/01 00:31
どの方言/実装を使うのがいいの?
できるだけWeb上に情報が多い奴がいいんだけど

96 :デフォルトの名無しさん:03/03/01 00:47
1) Scheme
2) Emacs
3) Common Lisp


97 :デフォルトの名無しさん:03/03/01 02:36
>95
quoteやlambda辺りがちゃんとしてれば、何でもいい気がする。
結局は何からスタートしても、大抵のソースは慣れで読める様になるし。

98 :デフォルトの名無しさん:03/03/01 02:55
CommonLispまんせ〜

99 :デフォルトの名無しさん:03/03/01 14:52
>>95 フリーな実装なら、
Scheme: Gauche
Common Lisp: CLISP, CMU Common Lisp
あたりか? emacs + ilisp と組み合わせて使うのがお勧めだ。
金出す気があるなら、黙って Allegro Common Lisp を買え。

100 :デフォルトの名無しさん:03/03/01 14:56
Allegroは、すご〜くいいのだけど、値段もすご〜いのだぁ
Personal版とか作って欲しい


101 :デフォルトの名無しさん:03/03/01 15:09
↓↓↓↓↓★ココだ★↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp/linkvp.html

102 :デフォルトの名無しさん:03/03/01 16:59
肛門Lispは?

103 :デフォルトの名無しさん:03/03/01 17:20
Cormanは日本語通らず。


104 :デフォルトの名無しさん:03/03/01 20:05
意表をついて、こんなのとか。scheme の亜流といっていいのか?
標準でTCP/IP や Tk へのインターフェース、正規表現有り。
Windows/UNIX で動く移植性の高さ!
http://www.newlisp.org/

105 :デフォルトの名無しさん:03/03/01 22:23
>104
schemeの末尾再帰最適化やcontinueationは無いみたいね。
#'も無いから、schemeっぽく書けるLISPという感じ?
ソースをちょろっと見た感じでは、
インタプリタ駆動で、コンパイラの類は正規表現の変換を除いて無し、
外部モジュールに頼る都合かcase sensitive、真偽値はtrue/nil、
eq系述語が無い(=で代用)とか、色々特殊っぽい。

106 :デフォルトの名無しさん:03/03/02 20:13
CLISP思ったより遅い。コンパイルしても遅い。

107 :デフォルトの名無しさん:03/03/02 21:18
WIN98で動くフリーの日本語のlispってありますか?


108 :デフォルトの名無しさん:03/03/02 22:22
>107
emacsやxyzzyとか。
エディタ付きだし、
下手に他の処理系探すよりお勧め。

109 :デフォルトの名無しさん:03/03/02 22:46
>>107 xyzzy (セクシーじじぃ) のこと?

110 :デフォルトの名無しさん:03/03/02 23:09
>108
ありがとうございます♪今落としてきました。
とても使いやすくていい感じです♪
さぁ、俺lisper目指すぞ

111 :デフォルトの名無しさん:03/03/02 23:14
くさいじじぃ

112 :デフォルトの名無しさん:03/03/03 02:34
xyzzyのLISPのキーワードって色つける方法ってないの?
調べても出てこないよ・・・

113 :デフォルトの名無しさん:03/03/03 08:45
>>112
修行が足りん!
ttp://www.afis.to/~start/xyzzy/textEditor/lisp_keyword.html
ttp://www.geocities.jp/madoinu/xyzzy/note/use_reference.html#keyword

114 :デフォルトの名無しさん:03/03/03 09:07
http://www.agemasukudasai.com/bloom/

115 :デフォルトの名無しさん:03/03/03 18:17
>113
をを、サンクスです。もうすこし修行してみます。

116 :デフォルトの名無しさん:03/03/03 18:35
>104のnewlispって、pcreを組み込んじゃってるけど、
pcre.dll(や.so)を使うわけにはいかなかったのかねえ。
まあ使い方わからんけども。

117 :デフォルトの名無しさん:03/03/03 19:58
最近見つけたLispScheme情報.既出だたらゴメン

Show's Hot Corner
http://www.asahi-net.or.jp/~ki4s-nkmr/#wabijo
中村正三郎さんのページ.LISPの昔話がでてますね.

ChezEdit-NT
http://www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/index.html
Petit Chez SchemeのWindows用グラフィカルフロントエンドだそうです.
ドネーション(寄付)ウェアなのね…なぜMLEditの下にディレクトリが?


118 :デフォルトの名無しさん:03/03/03 20:12
禿げしくガイシュツ

119 :デフォルトの名無しさん:03/03/04 20:19
xyzzyのlispソースってバイトコードにする方法ってあります?



120 :デフォルトの名無しさん:03/03/04 20:38
>>119
byte-compile-file
ってこれくらい調べりゃ簡単にわかるだろが。

121 :デフォルトの名無しさん:03/03/05 06:08
問題なんて勝手に解釈して解けばいいとも思いますが...

ANSI Common Lisp の 5 章の問題 4 「svref の代わりに case を使え.」
case でどうやってベクタを読むの?

122 :デフォルトの名無しさん:03/03/05 09:46
>>121
テーブルルックアップをcase文のハードコーディングで置き換えろってことだろ。


123 : :03/03/05 18:22
急にLISPがつかえる電卓がほしくなった〜〜〜〜

以下の仕様でどこか作ってくれ

1:ANSI Common lisp 対応
2:HotSyncでPCからマクロや関数を自動追加可能
3:3万以下

(・∀・)イイ!

124 :デフォルトの名無しさん:03/03/05 18:50
入力が禿げしくめんどうだと思われる

125 :123:03/03/05 19:06
関数電卓でのsin,cosみたいに特定のボタンを押すと
入力補助をしてくれる機能があれば(・∀・)イイ!

もちろんボタンと文字列の組み合わせは
(setf f10 "(hogehoge ")

のように外部から変更可にすれば(゚д゚) ウマー

126 :デフォルトの名無しさん:03/03/05 19:44
lispなOSを載せたPDAみたい

127 :デフォルトの名無しさん:03/03/05 20:16
電卓って、ハードの電卓か。
LISPのポケコンは昔あった気がするけど、今更な機能なんだろうね。
PDA向けの処理系探してきて、カスタマイズするしかない。

128 :121:03/03/05 20:47
>>122 どうもありがとう.そこも変えるやり方しかないんですね.

;; ほかにも,4 章の問題 1 で array-dimensions を自分で設計するのかと勘違いし,
;; aref だけでベクタの大きさを知る方法があるのかと悩んでしまいました.

ところで,
* どうして scheme の map は Common Lisp の mapcar のように
要素を取り出す順番を保証しないのでしょうか.
わざと不便なことをしているのでしょうか.
これでは高尚な「写像」中に汚い破壊的操作ができません.
* Common Lisp では末尾再帰を必ず最適化するわけではないそうですが,
せっかくできる最適化をしない処理系なんてあるのですか?

129 :123:03/03/05 21:35
なんか欲しいぞ>>LISPなポケコン

>PDA向けの処理系探してきて、カスタマイズするしかない。
向けのLISPってあったっけ?探してみよう。

130 :123:03/03/05 21:39
Palm向けね

#p2で書き込むと時々文字が抜けちゃうなぁ

131 :デフォルトの名無しさん:03/03/05 21:49
>128
>* どうして scheme の map〜保証しないのでしょうか.

これはC言語等でも起こりうる問題です。
単純な話、mapで適用されるリストの評価順序が
schemeの仕様で規定されていない為です。

例えば下の様なmapの実装だと、
(define (map1 proc x)
 (let loop ((l x))
  (if (pair? l)
   (cons (proc (car l)) (loop (cdr l)))
   '())))

consの両辺の引数の評価順序は仕様では規定されてないので、
どっちが先に評価されるかは、完全に処理系に依存します。
この実装でもschemeのmapの仕様は満たしています。
破壊操作を前提とするなら、専用のmapを作るか持ってくる
必要があります。

>* Common Lisp では末尾再帰〜

実装者が手抜きすれば当然、最適化してくれません。
まともな処理系ならコンパイルすれば最適化されると思います。
ただし、仕様に完全に組みこまれているわけではないので、
実際に「最適化可能」と謳っていても、schemeのスペシャリストが
書く様な複雑怪奇な再帰を使ったコードが完全に最適化される
可能性は低いと思います。

132 :デフォルトの名無しさん:03/03/05 23:59
LISPをマスターすると悟りを開けるってホントですか?

133 :デフォルトの名無しさん:03/03/06 00:43
LISP に限らずマスターしたら悟りは開けると思うけど

134 :デフォルトの名無しさん:03/03/06 03:39
>>128
schemeのmapの仕様の理由は >>131 に同意。
順序が重要なら、srfi-1にmap-in-orderというのがある。

135 :128:03/03/06 21:51
>>131 ありがとうございます.為になります.

> 例えば下の様なmapの実装だと、

「先頭からやるのが一番合理的」という観念にとらわれていました.
順序を保証しない場合のメリットもあるんですね.

> 破壊操作を前提とするなら、専用のmapを作るか持ってくる
> 必要があります。
>>134
> 順序が重要なら、srfi-1にmap-in-orderというのがある。

やはり需要があるみたい.頭のトンがった方々のコードをたくさん読めば
「map は写像なり」って言い切れるようになりますかね.

> まともな処理系ならコンパイルすれば最適化されると思います。
...
> 可能性は低いと思います。

「なんでも再帰」の相互末尾再帰がカッコいいなと思ったんですけれど,
これじゃちょっと残念ですね.

136 :デフォルトの名無しさん:03/03/07 00:06
フリーのCLOSってない?
出来るなら日本語対応の。

馬鹿な質問だからsage

137 :デフォルトの名無しさん:03/03/07 01:43
for-each使うか、メモリ気にせずにmap使うかだと思うけどねえ。


138 :デフォルトの名無しさん:03/03/07 02:12
doとかループを使えば?
(do ((a x (cdr a))
(b '() (cons (f (car a)) b)))
((null? a) (reverse b)))

139 :デフォルトの名無しさん:03/03/07 02:50
> (1 + 2 + 3)
Error: attempt to apply non-procedure 1.
ついやってしまうのだが。

140 :デフォルトの名無しさん:03/03/07 04:36
>>135
簡単に作れるから規格にはでてないだけでしょう。
(define (map-in-order f . a)
(let ((b '()))
(apply for-each (lambda a (set! b (cons (apply f a) b))) a)
(reverse b)))
多分これでいいと思うけど。

あとmap-in-order使う例を教えてよ。
工夫すればmap-in-order使わなくても簡潔に書けるかもしれないし。

141 :デフォルトの名無しさん:03/03/07 09:26
schemeでdoって使うもん?
なんかおれ、構文思い出せなくて、いつもnamed-let使ってますが。

142 :デフォルトの名無しさん:03/03/07 09:31
(let loop (( ...))
(if (...) ...
(begin .... (loop ...))))
こんな形になるときは使ったほうがいいんじゃない?
(do ((...))
((,,,) ,,,))
....)
ってなるから。

143 :デフォルトの名無しさん:03/03/07 10:22
>>140
> 簡単に作れるから規格にはでてないだけでしょう。

簡単に作れちゃう scheme だからこそ,モジュール機能が処理系依存なのが
もったいない気持ちになることがありませんか?

> あとmap-in-order使う例を教えてよ。
> 工夫すればmap-in-order使わなくても簡潔に書けるかもしれないし。

>>65-68 では Common Lisp なものの,
先頭から適用されることを期待したコードがあったので,
scheme では map に落とし穴(誰も掘ってない?)があるのを思いだしたんです.

>>136 clisp. 日本Lispユーザー会サイトには処理系ごとの日本語の可否が載ってます.

>>139 私は C で (atan 1) * 4 としてしまう事の方が多いです.

144 :デフォルトの名無しさん:03/03/07 10:46
cmuclって、windowsじゃcygwinでも動かないの?


145 :デフォルトの名無しさん:03/03/07 11:27
>Platforms: what does it run on?
>CMUCL should work on the following combinations of operating system
>and architecture:

http://www.cons.org/cmucl/platforms.html

146 :デフォルトの名無しさん:03/03/07 12:30
>>65-68はmapcar使えって問題だしなあ。
schemeならループか
(define (pos+ lst)
 (let loop ((a lst) (b '()) (n 0))
  (if (null? a) (reverse b)
    (loop (cdr a) (cons (+ (car a) n) b) (+ n 1)))))
再帰か
(define (pos+ lst)
 (if (null? lst) '()
   (cons (car lst) (map (lambda (x) (+ x 1)) (pos+ (cdr lst))))))
carやcdrが面倒になったらfor-each使うかなあ。
(define (pos+ lst)
 (let ((a '()) (n -1))
  (for-each (lambda (x) (set! n (+ n 1)) (set! a (cons (+ n x) a))) lst)
  (reverse a)))
これはmap-in-order使うのと同じことだけど。

147 :デフォルトの名無しさん:03/03/07 17:22
ISLISP使ってる人っていないの?


148 :デフォルトの名無しさん:03/03/07 17:38
そんなにいないんじゃない?
あえてISLISP使うメリットって、あんまりなさそうな気がする。
ISLISPでも動く様に書く、って人はいるかもしれないけど。
でも、日本人が率先して使わなかったら、なんの為の規格なんだろうね。
使ってるとしたら一部の大学とかじゃないかな。

149 :デフォルトの名無しさん:03/03/07 22:13
ISLISP コンパイラってあるの?ライブラリもある程度欲しいんだけど…

150 :デフォルトの名無しさん:03/03/07 22:17
>>147

ちょっとした計算とかスクリプトに oki lab. の islisp 使っていたけど、サイト消滅しちゃいました。
tisl と OpenLisp は bignum がなくて使いにくいので、今は Ruby を使っていたり。

151 :デフォルトの名無しさん:03/03/07 22:43
Lisp や scheme で書かれた数値計算プログラムのソースコードが見たい.

152 :デフォルトの名無しさん:03/03/07 23:03
>151
maximaとか?

153 :デフォルトの名無しさん:03/03/07 23:28
reduce とか?あとは Emacs 向けの数式処理システム calc とか?

154 :デフォルトの名無しさん:03/03/07 23:36
つーか「数値計算プログラム」が何を指して言ってるのかわからん。

155 :デフォルトの名無しさん:03/03/08 00:03
(+ 1 1)
のことだろ

156 :デフォルトの名無しさん:03/03/08 01:31
MS JVMを書いたDavid A.MoonってCommon Lisp the Language, 2nd Edition
の著者だったのね。

157 :デフォルトの名無しさん:03/03/08 07:32
>156
おれもそれ最近知った。
だからどう、ってわけでもないけど。

158 :デフォルトの名無しさん:03/03/08 09:52
>>150
tisl って bignum 無いんだぁ。
更新しないのかなぁ と他力本願してみる。


159 :デフォルトの名無しさん:03/03/08 15:17
>>151 et.al.
統計言語GNU R(Sのクローン)はSchemeに皮をかぶせて作ったと聞きましたが,本当?

160 :(define (´∀`) 'マターリ):03/03/08 15:42
>>151
過去スレより微分
(define (deriv f)
(if (null? f) '()
(map + (cdr f) (cons 0 (deriv (cdr f))))))

(deriv '(1 2 3))
(2 6)

161 :デフォルトの名無しさん:03/03/08 16:55
>>156

おかげで、当時はMSのJVMはかなり動作が速かったです。
でも、GC周りをMSの人間が十分把握できなくて、いじれなくなり JVM の開発をやめたという噂も。(ォ


162 :デフォルトの名無しさん:03/03/08 17:46
>>160
s/(null? f)/(null? (cdr f))/
みたいですよ.なんと言うか,余計にもう一回やろうとしてエラーになります.

「かけ算は足し算の繰り返し.」基本なんですね.

;; 過去スレにあるはずが,ググルからは出てきませんでした.

163 :デフォルトの名無しさん:03/03/08 17:48
Common Lisp にはハッシュがあり,これは alist より高速だ.

じゃあ alist を使うメリットって?
設定を書くようなときだけ?

164 :(define (´∀`) 'マターリ):03/03/08 18:09
(define (deriv f)
(if (or (null? f) (null? (cdr f))) '()
(map + (cdr f) (cons 0 (deriv (cdr f))))))

(map + '() (cons 0 '()))
ができんよな。うちのは()を返すけど。

過去スレPart5の786あたりから。別のやり方だけど。

165 :デフォルトの名無しさん:03/03/08 18:17
>163
alistは順序が必要なデータ構造、
例えば構文解析用のスタックとして良く使う。

166 :162:03/03/08 18:30
>>164
> (map + '() (cons 0 '()))
> ができんよな。うちのは()を返すけど。

うちの guile 1.4 はヘコたれてしまいます.
シュガーではなくて,ここで () を返すのが正しいと思うんですが,残念です.

167 :デフォルトの名無しさん:03/03/08 23:50
練習がてらperlのjoinと互換のやつ作ってみました。
どうですか?

(define(join sep strlist)
 (let loop ((x strlist)(r '()))
  (if(pair? x)
   (cond
    ((eq? x strlist)
     (loop(cdr x)(cons(car x)r)))
    (else
     (loop(cdr x)(cons(car x)(cons sep r)))))
   (apply string-append(reverse r)))))

(join "," '("j""o""i""n"))
==>"j,o,i,n"

168 :(define (´∀`) 'マターリ):03/03/09 00:25
一つのcondの方がいいと思うけど。
(define (join sep strlist)
(let loop ((x strlist) (r '()))
(cond ((null? x) (apply string-append (reverse r)))
((null? r) (loop (cdr x) (cons (car x) r)))
(else (loop (cdr x) (cons (car x) (cons sep r)))))))

(cons (car x) (cons sep r))を
(hoge (car x) sep r)って書けるとなあ。

末尾再帰でない方がわかりやすいかも。
(define (join sep strlist)
(cond ((null? strlist) "")
((null? (cdr strlist)) (car strlist))
(else (string-append (car strlist) sep (join sep (cdr strlist))))))

169 :デフォルトの名無しさん:03/03/09 00:29
>168
cons*とかlist*
つーのがあるよ。どっちも意味は同じ。
(list* 'a 'b 'c) => (a b . c)

170 :デフォルトの名無しさん:03/03/09 00:31
SRFIのリストライブラリね。

171 :(define (´∀`) 'マターリ):03/03/09 00:42
(define (join sep strlist)
 (let loop ((x strlist) (r '()))
  (if (null? x) (apply string-append (reverse r))
    (loop (cdr x) (cons (car x) (if (null? r) r (cons sep r)))))))

(define (join sep strlist)
 (if (null? strlist) ""
   (apply string-append
       (cdr (apply append (map (lambda (x) (list sep x)) strlist))))))

172 :デフォルトの名無しさん:03/03/09 00:46
だいぶ短くなるもんですね。
あとでsplitも作ってみます。
正規表現はつかえませんが。

173 :デフォルトの名無しさん:03/03/09 01:35
splitも出来ました。
あと、strstrみたいなのが無いので作りました。
(substringを使ってるので効率悪そうです。)
strstrを正規表現マッチに変えればperlと互換になると思います。

;文字列strの中から文字列keyを探し、その位置を返す。見つからなければ#f
(define (strstr str key)
 (let loop ((str str) (pos 0))
  (cond
   ((< (string-length str) (string-length key)) #f)
   ((string=? (substring str 0 (string-length key)) key) pos)
   (else (loop (substring str 1) (+ pos 1))))))

(define (split sep str)
 (let loop ((str str) (r '()) (pos (strstr str sep)))
  (if pos
   (if (zero? (string-length sep))
    '()
    (let ((next (substring str (+ pos (string-length sep)))))
     (loop next (cons (substring str 0 pos) r) (strstr next sep))))
   (reverse (cons str r)))))

>(split "/" "s/p//li/t//")
=>("s" "p" "" "li" "t" "" "")

174 :(define (´∀`) 'マターリ):03/03/09 03:01
strstrはposだけでできるね。
(define (strstr str key)
 (let loop ((pos 0))
  (and (>= (string-length str) (+ pos (string-length key)))
     (if (string=? (substring str pos (+ pos (string-length key))) key) pos
       (loop (+ pos 1))))))

175 :(define (´∀`) 'マターリ):03/03/09 04:47
一つにまとめて、strのかわりに位置を保存して
その位置をrと一緒にlambdaでまとめて
(define (split sep str)
 (let loop ((p 0) (q (lambda (x) (list (substring str 0 x))))
       (s (string-length str)) (k (string-length sep)))
  (cond ((< s (+ p k)) (reverse (q s)))
     ((string=? sep (substring str p (+ p k)))
      (loop (+ p k) (lambda (x) (cons (substring str (+ p k) x) (q p))) s k))
     (else (loop (+ p 1) q s k)))))

176 :デフォルトの名無しさん:03/03/09 16:11
Tinyschemeまんせー

177 :dynamic-winder:03/03/10 18:07
(define conti '())
(call/cc (lambda (c) (set! conti c)))
(dynamic-wind
(lambda () (conti 'new))
(lambda () 'hoge)
(lambda () 'after))
)
とやると、'afterは、どうなるのでしょうか?
現在tinyscheme-hack中で、どうしましょうと考えているのですが、、、

178 :デフォルトの名無しさん:03/03/10 19:51
>177
tinyschemeは色々不具合あるから、動作の参考にはならんと思うが、
継続は、beginとかletのシーケンス上から取ってきた場合と、
トップレベルから取ってきて実行した場合で、動作に違いがある。
トップレベルでの各動作は、仕様が決まってないので処理系に依存する。

petite-schemeの場合、
シーケンス上にあるなら、newnewnewnewnewnewnewnew....
と永遠に繰り返されて、hogeやafterには移らない。
これは多分、どの処理系でも同じ。

トップレベルにあるなら、newを一回実行して停止する。
これもhogeやafterには移らない。
トップレベルをシーケンスとみなさない処理系なら、
この動作になると思う。

179 :dynamic-winder:03/03/10 21:12
>178
177です。
ということは、大くの処理系において
まんなかに制御がはいらないかぎり、
いわゆるwind-outは、発動しないのですね。
それは、R5RS(でしたっけ)にありましたっけ?
もしかして、処理依存?

tiny-schemeの目につく不具合(continuation)は、なおしましたが、
他にも不具合があるのでしょうか?
もし知ていれば、おしえてくれませんか?
また、ほかにもっとまともな、小さい処理系があれば、教えてくれませんか?


180 :デフォルトの名無しさん:03/03/10 22:42
defclassをマクロで実装したらどんな風になりますか?

181 :デフォルトの名無しさん:03/03/10 23:49
>>180
(defmacro defclass (name direct-superclasses direct-slots &rest options)
(expand-defclass name direct-superclasses direct-slots options))

182 :178:03/03/11 00:47
>179
before区間では継続をまだ取り出してないので、こういう動作になる。
結局この辺は実装を見た方が早い。
call/ccを上書きするdynamic-windのポータブルな実装がWeb上の
どっかにあったと思う。
R5RSにはhogeまで到達した時のbefore/afterの呼び出しタイミング
についてしか言及されてない筈。

tiny-schemeの不具合について昔調べた限りでは、組み込みの
リスト処理関数全般と、内部定義(define)の適用順序がおかしかった。
実装者はセルのポインタ付け替えに慣れてない気がする。
全体的に結構いいかげんな作りなので、もし手を加えていくなら、
元のmini-schemeからの拡張部分は全て疑った方がいいかも。

183 :178:03/03/11 01:16
>179
他の小さい実装としては、SECDR-Schemeがお奨め。
中身はmini-schemeの兄弟みたいな物なので、mini-schemeが
読めるなら、難易度的にあんまり変わらない。
ただしこっちはVMで動く。構成はmini-scheme大して変わらないけど、
SECDR(Stack/Env/Code/Dump/Return)という5つのレジスタを使う。
VMからのブートストラップで動くので、解析は多少難しいかもしれない。
schemeコードによるVMへのcompiler/disassemblerが付属する。
速度的にはmini-schemeとたいして変わらないけど、オペコードを
細かくするなり、VMを最適化していけば、それなりの速度にはなるはず。

184 :dynamic-winder:03/03/11 01:37
おせわになってます。
すいません、へたれものでSECDR-Schemeへのポインタが分かりません。
もしよろしければ、SECDR-Schemeへのポインタをしめしてください。

tinyschemeをもそうとう直しているので、
(conitnuation,dynamic-wind,list*,apply,,,,,などなど)
このままいくか、それとも?

でも、小さい実装系のソース元すべてが、
モリワキさんであることは、ちょっと驚き。
日本人は、Lisp/Scheme系が得意なのか?

185 :178:03/03/11 01:51
>184
SECDR-Scheme1.0.tgz
ここにアップしました。お早めに。
http://www.42ch.net/UploaderSmall/source/1047314983.tgz

186 :dynamic-winder:03/03/11 03:05
有り難うございました。
内部は、相当おもしろそうですね。
研究してみます。

そもそもなぜこのようなことをしているかというと、
現在、bourne-shellにschemeを組み込もうとしているからです。
(シェルでプログラムをしていて、速度的、機構的限界を感じたため)

187 :デフォルトの名無しさん:03/03/11 04:15
>>186
完成したら公開きぼんぬ

188 :dynamic-winder:03/03/11 04:25
>187
私は、サイズに制限があるために、そのようなことをしていますが、
schemeをshellとして使うなら、scshがありますよ。
EPF,SREなど優れた機構もあります。

189 :dynamic-winder:03/03/11 15:37
自作のdynamic-wind,call/ccを作ってみました。
どんなもんでしょうか?(でも、Cでローレベルサポートの方がいいかも)
transp-letは、
(transp-let let ((a b)) (define c a))
-> (begin (define c '()) (let ((a b)) (set! c a)))
という代物です。


190 :dynamic-winder:03/03/11 15:38
(transp-let letrec
((l-call/cc call/cc)
(winder '())
(winder-push (lambda (x) (set! winder (cons x winder))))
(winder-pop (lambda()
(let ((x winder)) (begin (set! winder (cdr winder)) (car x)))))
(make-winder (lambda (a b) (winder-push (cons a b))))
(apply-before (lambda (x) ((caar x))))
(apply-after (lambda (x) ((cdar x))))
(winder-resolv
(lambda (to-winder)
(w-r# (list-length to-winder) (list-length winder) to-winder '())))
(w-r# (lambda (tl fl tw bwa))
(cond
((eq? tw fw)
(w-r#up bwa))
((< tl fl) ;from longer
(begin
(apply-after (winder-pop))
(w-r# tl (- fl 1) tw bwa)))
(else
(w-r# (- tl 1) fl (cdr tw) (cons tw bwa)))))
(w-r#up
(lambda (bw)
(if (null? bw)
'()
(begin
(set! winder (car bw))
(apply-before winder)
(w-r#up (cdr bw)))))))


191 :dynamic-winder:03/03/11 15:38

(define (dynamic-wind b m a)
(begin
(b)
(winder-push (make-winder b a))
(m)
(winder-pop)
(a)
))
(define (call/cc recvr)
(l-call/cc
(lambda (rcon)
(recvr
(let
((towinder winder))
(lambda (retv)
(winder-resolv towinder)
(rcon retv))))))))


192 :dynamic-winder:03/03/11 15:40
なぜ美しいインデントが消える?

193 :デフォルトの名無しさん:03/03/11 16:04
醜いから

194 :名無しさん@Emacs:03/03/11 16:23
>>192
navi2ch使ってないんですか?

195 :デフォルトの名無しさん:03/03/11 16:58
clisp2.30使ってるんですが、これってdefgenericはstandardしかつかえないんですか?

[14]> (defgeneric price (x) (:method-combination +))

*** - DEFGENERIC PRICE: The only valid method combination is STANDARD : (:METHOD
-COMBINATION +)

こんなん出るんですが・・・

196 :178:03/03/11 20:05
>195
clos.lispに
> ;; 3. Apply method combination:
> ;; Only STANDARD method-combination is implemented.
って、書いてあるよ。

197 :178:03/03/11 20:09
>189
http://zurich.ai.mit.edu/pipermail/rrrs-authors/1992-August/001461.html
これがdynamic-windのポータブルなやつ。
mini-schemeとかでも動くと思う。

198 :195:03/03/11 22:58
>196
ありがとうございます
clos.lispなんて一回も目を通していませんでした>反省しる!オレ

199 :デフォルトの名無しさん:03/03/11 23:06
xyzzyでGUIって作れる?

200 :デフォルトの名無しさん:03/03/11 23:42
作れるよ

201 :デフォルトの名無しさん:03/03/12 00:02
>200
マジですか!?教えてください。お願いします。

ちなみにこれってどうですか?
ttp://www.lispworks.com/downloads/lw-personal-edition.html

202 :デフォルトの名無しさん:03/03/12 00:11
>>201
xyzzyはDLLの関数を呼べるんで、
(require "wip/winapi")
(c:define-dll-entry winapi:HWND CreateWindow (引数) "user32")
などとしてやる。
詳しいことはMLなど参照。
xyzzy Mailing List Archive
ttp://www3.tok2.com/home/xyzzy/

lispworksは知らない。

203 :デフォルトの名無しさん:03/03/12 00:18
>202
最高にサンクスです。LISPでWINGUIができるとは夢のようです。

204 :デフォルトの名無しさん:03/03/14 03:01
多値使ってる人いる?

205 :デフォルトの名無しさん:03/03/14 11:31
(get-decoded-time)

206 :デフォルトの名無しさん:03/03/15 01:10
すいません
schemeのappendをどなたか lambda式で書いてくれませんか?

207 :デフォルトの名無しさん:03/03/15 01:14
(lambda (. lst) (apply append lst))

208 :デフォルトの名無しさん:03/03/15 01:21
>207
ジョークですか?
R5RSの関数って、いや結構例外多いなと思いまして、、
multi-arg-applyって?
何につかうんでしょうか?

209 :デフォルトの名無しさん:03/03/15 01:29
(lambda (. lst)
(let rec ((x ())
(l lst))
(if (null? x)
(if (null? l)
()
(rec (car l) (cdr l)))
(cons (car x) (rec (cdr x) l)))))

210 :デフォルトの名無しさん:03/03/15 01:33
>>206

(define (append . x)
 (define (xlist x tail)
  (if (pair? x)
   (cons (car x) (xlist (cdr x) tail))
   tail))
 (if (pair? x)
  (if (pair? (cdr x))
   (xlist (car x) (apply append (cdr x)))
   (car x))
  x))

(append '(1 2 3) '(a b c) '(4 5 . 6)) =>(1 2 3 a b c 4 5 . 6)

最後のリストはコピーしない。
いま作ったやつだから、間違ってるかも。

211 :デフォルトの名無しさん:03/03/15 01:46
末尾の元のリストが使われるとあるようですが、、、
おそらく
(if (null? l)
()
(rec ...)
このへんがちょっとちがう
それは、まあべつに難しかないですが、
なんでこれほど複雑にしなければならないのかが
分からない。

212 :デフォルトの名無しさん:03/03/15 02:00
ifが、末尾の場合にしか効いてなくて、
そのために実行速度を無用に落としているような、、、
特に無引数のappendは解せない。
このようなappendが使われるのは、
歴史的理由でしょうか?それも何か理由があってでしょうか?

213 :デフォルトの名無しさん:03/03/15 02:19
下のコードをSCMで実行すると即落ちする。
win98で実行したらOSごと落ちたよ(藁

;その1
(define v (vector ()))
(vector-set! v 0 v)
v

;その2
(define v1 (vector ()))
(define v2 (vector ()))
(vector-set! v1 0 v2)
(vector-set! v2 0 v1)
v1

さすがにPetite Chez Schemeは大丈夫だったが、
おまえらの使ってる処理系では大丈夫ですか?

214 :デフォルトの名無しさん:03/03/15 02:52
いいのができた
(define (append . x)
(if (null? x)
(let loop (left (reverse x))
(if (null? cdr(left))
(car left)
(loop (cons (concat-reverse (reverse (cadr x)) (car x)) (cddr x))
x)
(define (concat-reverse b a)
(if (null? b) a (let ((t (cdr b))) (concat-reverse t (begin (set-cdr! b a) b))))

215 :デフォルトの名無しさん:03/03/15 02:58
たくさんまちがえてます。
気にしないでください。



216 :デフォルトの名無しさん:03/03/15 03:12
>>212
略しすぎ。
何言わんとしてるんだかさっぱりわかんね。

>ifが、末尾の場合にしか効いてなくて、
>そのために実行速度を無用に落としているような、、、


セルを消費するのを効率悪いと言ってるのなら、
append!という破壊関数もあるけど。

>特に無引数のappendは解せない。

(append)
のことか?
これが何か?

>このようなappendが使われるのは、
>歴史的理由でしょうか?それも何か理由があってでしょうか?

appendは昔からあるから、歴史的理由なんじゃないかな。
知らんけど。

217 :デフォルトの名無しさん:03/03/15 06:21
(defun func((lambda (x)(* x x))))
ってなんで通らないの?
ラムダ式って引数にできないの?

218 :デフォルトの名無しさん:03/03/15 06:24
え?

219 :デフォルトの名無しさん:03/03/15 07:10
関数と構文の違いを理解してないと、LISPを使いこなすのは難しい

220 :デフォルトの名無しさん:03/03/15 08:25
>218>219
すいません・・・lisperの道は遠いなぁ。
今までC++しか触ってなかったからとまどってしまう。
確かに凄い言語だと思うけどね。
特にマクロは凄い、と思う(自身ないけど)

221 :(define (´∀`) 'マターリ):03/03/15 09:52
(define (append . x)
 (let loop ((x (reverse x)) (r '()))
  (cond ((null? x) r)
     ((null? r) (loop (cdr x) (car x)))
     (else (loop (cdr x)
           (let loop ((x (reverse (car x))) (r r))
            (if (null? x) r
              (loop (cdr x) (cons (car x) r)))))))))
最後のを共有するのはconsセルを少なくしたかったからでしょう。

222 :(define (´∀`) 'マターリ):03/03/15 09:55
>>217
(defun func (x) (* x x)) とか
(let ((func (lambda (x) (* x x)))
 (funcall func 6))
とかなら動くんじゃない?

223 :(define (´∀`) 'マターリ):03/03/15 10:14
(define (append2 x y)
 (cond ((null? x) y)
    ((null? y) x)
    (else (cons (car x) (append2 (cdr x) y)))))

(define (append . x)
 (if (null? x) '()
   (append2 (car x) (apply append (cdr x)))))

224 :デフォルトの名無しさん:03/03/15 11:05
>>217

やりたいのはこうかな?
(defmacro func (f x)
  `(,f ,x))

(func (lambda (x) (* x x)) 6)

225 :デフォルトの名無しさん:03/03/15 11:29
なんだそりゃ・・

226 :217:03/03/15 11:31
こっちの方がいいか。

(defmacro func (x &rest rst)
 `(,f ,@rst))

227 :224=226:03/03/15 11:33
ごめん、名前欄間違えた

228 :224=226:03/03/15 11:36
訂正↓
(defmacro (f &rest rst)
 `(,f ,@rst))

229 :デフォルトの名無しさん:03/03/15 13:18
goshとかguileって有理数使えるんですか?
最近schemeの勉強し始めたばかりなんですが、
有理数を使える処理系を教えてください。

230 :デフォルトの名無しさん:03/03/15 13:43
少なくとも
kawa Scheme
MIT Scheme
(Petite)Chez Scheme
は使えるよ。>有理数

231 :append の はなし:03/03/15 19:44
まえのことですいません。
無引数のappendがおかしいといったのは、
>221のソースを代用(ほぼ末尾再帰展開もされる完璧なソースだとおもいます)
(define (append . x)
 (let loop ((x (reverse x)) (r '()))
  (cond ((null? x) r)
     ((null? r) (loop (cdr x) (car x))) << ここ
     (else (loop (cdr x)
           (let loop ((x (reverse (car x))) (r r))
            (if (null? x) r
              (loop (cdr x) (cons (car x) r)))))))))
ここと示したところで、
(if (null? r))は、はじめの最初のループでしか意味をもちません。
もし、引数が必ずひとつ確定できるならば、rにその最後の一つをバインド
して、(null? r)と無用な初期値の前提(r '())を削除できるからです。
(r #f)、つまり、無引数=>#f と考える人がいた場合、
それもまた合理的であり、人の考えかたによって左右されるようなものを
標準とするのは、どうも納得がいかないというところがあります。

232 :デフォルトの名無しさん:03/03/15 19:45
括弧ばかり(嘲笑激藁

233 :append の はなし:03/03/15 19:55
私がいいたいのは、
appendの引数を、最低1つにするという
まあ、内部構造からすると自然なことをどうしてしないのか?

過去との互換性で、そのようになっているのだとすれば、
どのようなときに重要になってくるのか、
これがあるから外せないという場面、
を知りたいなとおもいまして、、、、

234 :デフォルトの名無しさん:03/03/15 20:22
>>233
論理構造としてそうあるべきだから。
それが嫌なら、(+) => 0。(*) => 1、(and)=>#t、(or)=>#f
もダメだよね。

235 :append の はなし:03/03/15 20:36
>>234
本当にそうですか?
andは、順次評価していき、
すべて評価しおわったときに#tになるというのは分かります。
R5RSのマクロを見れば分かります。
しかし、appendは、それとおなじように定義しようとしても、
論理構造として、そうあるべきとは、なりません。
それは、引数一つのappend が、それそのものであるように、
どのようにしても引数一個の状態を再帰的に引数ゼロ個の場合を
使って定義できないというところに問題があるのです。
ちなみに
(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
したがって(+ NIL) => 0 となります。分かっているとおもいますが、、

236 :append の はなし:03/03/15 20:46
(append a) => identity-a
(append a) => (append a (append NIL)) => copyed-list-a
となります。
a => (c d . e) だったばあい、
どうしようもないような
気がします。

237 :デフォルトの名無しさん:03/03/15 21:33
schemeの
内部定義って、どうして直接参照不可なの?
コンパイラ内の最適化を促すため?
(let ()
(define ada '())
(define aba '())
(set! ada ...)
(set! aba ...) ...)
なんてやられたら、あんまかわらんような?

238 :デフォルトの名無しさん:03/03/15 21:34
>append の はなし

>(if (null? r))は、はじめの最初のループでしか意味をもちません。

考え方の前提がおかしいんじゃないか?
appendの'()を否定するって事は、リストの終端(空リスト)も
#fであるべきという事か?
意味的に (null? r)という述語は、「始めの最初のループかどうか」
ではなくて、「リストの終端(空リスト)かどうか」を示してると思うんだが。

>appendの引数を、最低1つにするという
>まあ、内部構造からすると自然なことをどうしてしないのか?

リストが0個の場合でも、それは「空リスト」と言って、
リストにとっては1つの形態として自然だから。
'(a b c) => '(a . (b . (c ())))
(length '(a b c)) => 3 (length '()) => 0
(length '())でも#fを返せというのか?

これを他の言語のデータ型に例えるとするなら、C言語の文字列かな。
文字列の長さをstrlenで調べて0が返されても、
実際には終端文字分の長さがあるのと同じ理屈。strlen("\0") => 0
"\0"は特別な値ではなく、あくまでも文字列の一部。

>(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
>したがって(+ NIL) => 0 となります。分かっているとおもいますが、、

(+ NIL) => Error: variable nil is not bound.
これで何を判れと?
もしかしてドット対の事を言ってるの?

239 :(define (´∀`) 'マターリ):03/03/15 21:45
いい例じゃないけど、括弧を取るflattenなんかは
(define (flatten x)
 (if (list? x) (apply append (map flatten x))
   (list x)))
(flatten '(1 (2 (3 (4 5) () 6)) 7 (8 9)))
-> (1 2 3 4 5 6 7 8 9)

(append) -> () でいいと思う。

(append) から (append a) は定義できないんだろうけど。
(define (append2 x y)
 (if (null? x) y
   (cons (car x) (append2 (cdr x) y)))
(define (append . x)
 (cond ((null? x) '())
    ((null? (cdr x)) (car x))
    (else (append2 (car x) (apply append (cdr x))))))

>>223から変えた理由は
(let ((x '(9 8))) (eq? x (append x '()))) が
#f にならないといけないようなので。

240 :デフォルトの名無しさん:03/03/15 21:47
>append の はなし

つーか、どうもおかしいな。
一回でも処理系さわった事ある?

ちなみに、1個以上の引数を取りたいなら、
(define (append x . y) 〜)
という方法もあるんだが。

241 :デフォルトの名無しさん:03/03/15 22:01
最近お勧めなScheme実装ってGaucheなんですか?
それからCommon Lispって今でもまともに使っても大丈夫な言語ですか?


242 :デフォルトの名無しさん:03/03/15 23:45
(car '(+ - *)) => +
((car '(+ - *)) 1 2) => Error: attempt to apply non-procedure +.

なんでですか?

243 :(define (´∀`) 'マターリ):03/03/16 00:00
'+ => + だけど + => + じゃない。
((car (list + - *)) 1 2) => 3

244 :242(勉強中):03/03/16 00:08
>>243
ありがとうございます。
quateとlistのまだ違いがわかってないようです。

(define a 1)
(list + a 2) => (#<procedure +> 1 2)
(quote (+ a 2)) => (+ a 2)

確かに結果がちがいますね。ゆっくり勉強します。

245 :デフォルトの名無しさん:03/03/16 01:05
SLIBのページが開けない

246 :デフォルトの名無しさん:03/03/16 01:36
>>238
>考え方の前提がおかしいんじゃないか?
>appendの'()を否定するって事は、
すいません、私の誤解かもしれませんので、
(append '()) なのか (append . '()) なのか 書いてください。
>リストが0個の場合でも、それは「空リスト」と言って、
>リストにとっては1つの形態として自然だから。
>'(a b c) => '(a . (b . (c ())))
>(length '(a b c)) => 3 (length '()) => 0
>(length '())でも#fを返せというのか?
いえそういっているのではありません
(length) -> ?
つまり、(length . '()) -> ?
といっているのです。(私の考えでは(length) -> #fでもいいのではないかと)
>>(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
もっとくわしく書きたいとおもいます。
(+ a b c . '()) -> (+ a (+ b c . '()))
-> (+ a (+ b (+ c . '()))) -> (+ a (+ b (+ c (+ . '()))))
つまり(+ . '()) -> (+) -> 0 と認識しています。
>>239
(append '() '(a b c . d)) -> '(a b c .d)
のことでしょうか、
括弧をとるflattenは、簡単にかけますが、
アトムを残すatom-flattenは、めんどいことになりませんか?
(atom-flatten '(a b c '(d e f '()) d '())) -> '(a b c d e f '() d '())

247 :デフォルトの名無しさん:03/03/16 01:40
すいませんチョンボです
(atom-flatten '(a b c (d e f ()) d ()))
-> '(a b c d e f () d ())

248 :デフォルトの名無しさん:03/03/16 02:12
>>238
もしかして
'(a b c d e) => '(a b c d e ())
とおもっていませんか?
(とかんがえれば、あなたのいっていることが通じる。
そうでなければ、もうしわけない)
'(a b c d e) => '(a b c d e . ())
ですよね,,,

249 :238:03/03/16 02:44
>>246

まずね、
ちゃんと読め。

>>235の、
>(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
>したがって(+ NIL) => 0 となります。分かっているとおもいますが、、

これは、ドット対のつもりだったのか?
ちなみにschemeではNILと書いてもただのシンボルであって、
defineされてなければエラーになる。
この前提さえ間違ってるから、既に話がかみ合ってない。

250 :238,240:03/03/16 02:54
続き。

>>246
>(append '()) なのか (append . '()) なのか 書いてください。

(append) もしくは (append . ())
ね。
所で、>>240 の話は無視ですか?



>>246
>(length) -> ?
>つまり、(length . '()) -> ?

これは単にエラーにすべき。
なぜならlengthは1引数を取る関数と定義されているので。

で、気になったのは、
君は固定引数の関数についてさえ、引数足りてなかったら、
定義と無関係に、勝手に#fを返す様にしたいのか?

それを仮に踏まえたとすると、
例えばこれはどうなるの?

((lambda(x) x))

エラーとせずに、#fを返すの?


251 :238,240:03/03/16 02:54
>>248
>もしかして
>'(a b c d e) => '(a b c d e ())
>とおもっていませんか?

おもっていません。

もしかしてバカにされてるのかなあ。

252 :246:03/03/16 03:03
模式てきなものでわかるかなとおもいまして、
NIL == . '() とすれば、あっているでしょうが、
NILのときは、きばってかきませんでしたが、
どうしてもというので246にきばってかいています。
それをよんでいないのは、あなたでしょう。
(そのようなことは、いわれずともわかっています。
処理系も複数個よんでいます。)
ところで、あなたが、238で不明瞭だった点を明かしていません。
>appendの'()を否定するって事は、
(append '()) ですか? (append . '())ですか?

253 :246:03/03/16 03:07
252
の記事は、時間がずれておりました。
もうしわけありません。なかったことにしてください。

#fを返すのいみがわかっていただけてないようです。
つまり、appendが無引数でよばれるような状態つまり、
(append . '())はエラーでもかまわないのではないかといっているのです。

254 :246:03/03/16 03:13
251の記事について、
申し訳ありません。
記事そのものにも書いておきましたが。
でも、じっさいあなたの書いた
>238
の記事には、(しかも、すべて)そうありましたが、、、、
簡略のためにかいたというのでしたら、指摘の行き過ぎでした、
申し訳ありません。

255 :246:03/03/16 03:19
もしかして、ここが誤解のはじまりなのか?
appendは、
r5rsにのってある関数で、標準関数として登録されています。
それは、無引数のappendを受けつけるようになっています。
そこで、
私の疑問は、そのわりに、どうしてこのようになっているのか
知りたいというものでした。

256 :238,240:03/03/16 03:26
>>252
>(append '()) ですか? (append . '())ですか?

それは>>250で書いたので読み返してね。

>>253
>つまり、appendが無引数でよばれるような状態つまり、
>(append . '())はエラーでもかまわないのではないかといっているのです。

appendは可変個の引数、つまり

「0(または1)個以上の引数を取る」

とは考えられないのかな。
それが嫌なら>>240の様に引数の個数を強制しろって
事を言いたかったんだけど、伝わってないみたいね。


>>255
今R5RSを見た限りでは、
(append list ...)
と書いてあるから、(listと...を別個に解釈して、)
1個以上の引数を取る様にも見えるなあ。
まあどっちでもいいけど。

257 :246:03/03/16 03:37
C の code でみるとわかりやすいですが
#ifdef R5RS_APPEND
if(sc->args==sc->NIL) {
s_return(sc,sc->NIL);
}
#endif
x = reverse_in_place(sc,sc->NIL,sc->args,0);
while( cdr(x) != sc->NIL ){
cadr(x) = append(sc,cadr(x),car(x));
x = cdr(x);
}
s_return(sc, car(x));
と、明らかに、ifが一個邪魔なようなきがします。
まあ、それだけといえばそれだけですが、
ちょっと関数の返り値に関連性がないなとおもいまして、、、

258 :デフォルトの名無しさん:03/03/16 04:09
applyと連携する関係じゃないかな

259 :(define (´∀`) 'マターリ):03/03/16 12:27
これでいい?
(define (append2 x y)
 (let loop ((x (reverse x)) (y y))
  (if (null? x) y
   (loop (cdr x) (cons (car x) y))))))
(define (append y . args)
 (if (null? args) y
   (let ((x (reverse args)))
    (let loop ((x (cdr x)) (r (car x)))
     (if (null? x) (append2 y r)
       (loop (cdr x) (append2 (car x) r)))))))

260 :デフォルトの名無しさん:03/03/17 10:48
>>255

appendが無引数を許すようになっているのは、ほとんどの実装では
(append ())と(append)の内部表現が同じだからである。(ここで()はquoteされていないことに注意せよ)
そして違う内部表現を使ってこれを識別できるようにすると実装の効率がものすご〜く悪くなる。(重要:そうする必要もないしね)

ちなみにappendのR5RSでの定義は
(append list ...) 「0個以上のリストを引数に取る(Cとちがって1個以上とは読まないことに注意せよ)」
でも、R5RSには最後の引数はなんでも良いと書いてある。
(append '(1 2) 3) -> (1 2 . 3)
が動作するのはその為だ。

結局のところ「大人ってズルイ」ってことかもね。

261 :260:03/03/17 11:04
ごめん . が抜けてた
「(append . ())と(append)の内部表現が同じ」だった^^;


262 :260:03/03/17 11:13
>>253

>(append . '())はエラーでもかまわないのではないかといっているのです。
ちなみに、これは普通の実装なら立派なシンタックスエラーとなる。
なぜなら(append quote ())と同じ内部表現となるからだ。

若者よ、精進じゃ!

263 :260:03/03/17 11:20
ところで
. の右側に引数を書くのってあり?と思う者もいるかもしれないので、念のため
「ありじゃ」
(list . (1 2)) -> (1 2)

年寄りは小便の切れが悪くてすまん m(_ _)m

264 :デフォルトの名無しさん:03/03/17 14:11
誰か教えてよ。


265 :デフォルトの名無しさん:03/03/18 06:06
clike使ってる人いる?
http://www.rojoma.com/~robertm/clike/
MzScheme と Guile でしか使えないけど。

なんでscheme自身で書かないんだろう。

266 :デフォルトの名無しさん:03/03/18 06:51
(´-ω-`)
http://homepage3.nifty.com/digikei/

267 :デフォルトの名無しさん:03/03/19 01:32
最近 common lisp を使い始めたのですが、clos について
例えば
(defclass A ...)
(defmethod aaa ((x A)) ...)
(defclass B ...)
(defmethod aaa ((x B)) ...)
(defun f (x) (aaa x))
とか書くと、x の class によって動作を選べますよね
しかし、A のコード(最初の二行)と Bのコード(次の二行)が別のパッケージにあると
use しない限り A:aaa と B:aaa が別の名前になってしまってだめのようです。
全部 use してしまえば問題ないわけですが、それだと名前がよごれるのでこれはどうする
のがふつうなんでしょうか。



268 :268:03/03/19 01:40
sage

269 :デフォルトの名無しさん:03/03/19 02:18
>>267
必要な名前だけimportすりゃいいんじゃないの?

270 :デフォルトの名無しさん:03/03/19 03:48
>>269
なんていうか、動くようにすることはできるのです。
しかし例えば、いろいろな数値クラスに to-string を定義して
ストリーム出力を全部それでやってもらうときなんかに
ストリームの方で全部 import しなくちゃならないんで、なんか変だなあと思うのですが。

271 :デフォルトの名無しさん:03/03/19 13:56
Unlambda

272 :デフォルトの名無しさん:03/03/22 12:01
最初のMLはLISPで作られたっていうけど、
逆に型推論だけLISPやSchemeに持ってこれないものですか?
リスト構造的に全体で使うのは無理だから、
例えば数値→数値の時だけ使うとか。

273 :デフォルトの名無しさん:03/03/24 09:14
LSIP作ってる日本のメーカーってないの?

274 :デフォルトの名無しさん:03/03/24 09:15
あ、LISPだった。

275 :定・フセイン:03/03/24 10:49
>>272
型推論「だけ」とはどういう意味かの?

276 :デフォルトの名無しさん:03/03/24 16:52
CLISPをWin98SEで使っていると,スタンバイができなくなったり,
ランチャから新しいプロセスを開始できなかったりする.
(bye) すると急にスタンバイしたり新しいアプリが始まる.
これはWin98が悪いのか?CLISPが悪いのか?漏れのマシンの低スペックが悪いのか?
別にいいんだけどさ.

あと誰かCLISPのForeign Function InterfaceのWindozeにおける可能性と使い方を
解説してるサイト見つけたら教えて.

277 :デフォルトの名無しさん:03/03/24 23:41
>276
CLISP FFI でぐぐったら日本のページほとんどヒットしなかった。

とりあえずperlのinline Cみたいな事をする試み?
http://www.stat.uiowa.edu/~luke/xls/projects/callback/callback.html

より高性能なcmuclのwindows-portがあれば話は早いんだろうけど、
なんで頓挫しちゃったんだろうねえ。

278 :デフォルトの名無しさん:03/03/25 21:57
bizplus の
http://book.2ch.net/test/read.cgi/bizplus/1048561280/l50
から来ました〜

>>123
ttp://www2b.biglobe.ne.jp/~houmei/restore/ai1000/

279 :デフォルトの名無しさん:03/03/26 01:21

win2kでDrSchemeを使ってるのですが

> (* 7.0 0.1)
0.7000000000000001
> (* 6.0 0.1)
0.6000000000000001
> (* 5.0 0.1)
0.5
> (* 8.0 0.1)
0.8

というふうになってしまいます。
0.7とか、0.6にならないのはバグですか、仕様ですか?


280 :デフォルトの名無しさん:03/03/26 01:37
>279
浮動小数点の精度の限界でそ
有理数が使えるのなら、それを使うのも手

281 :デフォルトの名無しさん:03/03/26 04:28
質問すみません。CLISP って GUI を作成可能ですか?
GUI を作成可能なフリーの Common Lisp 処理系がありましたら教えて下さい。

282 :デフォルトの名無しさん:03/03/26 04:45
すみません。
正規表現の最短マッチというのはないのでしょうか?

283 :デフォルトの名無しさん:03/03/26 07:35
>>281
UNIX系だとX用があるみたい。
http://www.cliki.net/Graphics%20Toolkit
http://www.cliki.net/index
Windowsだと聞いたことないな。
cygwin経由で使うか、xemacs,xyzzyとか。

284 :デフォルトの名無しさん:03/03/26 07:44
>>282
pregexpでできるよ
http://www.ccs.neu.edu/home/dorai/pregexp/pregexp.html
のマニュアルの
3.3.2 Non-greedy quantifiers
参照。


285 :デフォルトの名無しさん:03/03/26 15:32
>>281
LispWorksというところの処理系が教育用にフリーで(制限付きだが)開放されていた.
それはたしかGUIが開けたはず.

286 :282:03/03/26 16:16
>>284
ありがとうございました

287 :281:03/03/27 02:08
>>283,285
どうもありがとうございます。
環境も書かずに済みません。今、Mac OS X と Linux/Intel で使える Lisp/Scheme 処理系を
探していまして、次の用件を満たす物が無いかと考えています(わがままですよね・・・)。

1. 日本語文字列処理が可能
2. クロスプラットフォーム
3. GUI 作成可能
4. GUI 上で日本語表示可能
5. ネイティブコンパイル可能
6. インタープリタ上で開発可能

3 は Mac OS X, Linux/Intel 供に X Window System 上で考えています。
5 は C 言語へのトランスレータがあれば十分です。
5 の点では、調べた限り Scheme より Common Lisp が選択肢が多いようです。

教えて頂いたポインタを見た感じでは、CLISP + Garnet が良さそうな感じがしますが、既に
開発がストップしてしまっているようです。Linux/Intel は諦めて、Open MCL を使って
みようかとも考えています。取り敢えずは処理系を色々と試してみるつもりです。
どうもありがとうございました。

288 :デフォルトの名無しさん:03/03/27 22:20
カッコいい

289 :デフォルトの名無しさん:03/03/28 05:01
rep

290 :デフォルトの名無しさん:03/03/28 10:39
CygwinでGaucheをコンパイルしようとすると
ext以下のcharconvとかuvectorとかがうまく
コンパイルできないのですが、私だけでしょうか?

291 :デフォルトの名無しさん:03/03/28 10:55
gcc-2 使え。

292 :デフォルトの名無しさん:03/03/28 10:57
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aCygwin&l=jp


293 :290:03/03/28 11:52
(=゚Д゚=))
調べてなかったすいません
逝ってきます

294 :デフォルトの名無しさん:03/03/28 12:30
>>290
うちはいくつかmake後のtestかなんかでエラーでたけど、
簡単な動作やった限り、特に支障はなかったよ。あんまり参考にならんか。
例のPerl.scmを公開してるページに書いてある方法に習った。
cygwinのパッケージは、一から入れ直して、Develop全部落とした。
一週間ぐらい前の話。
gcc -v
gcc version 3.2 20020927 (prerelease)

295 :デフォルトの名無しさん:03/03/30 03:24
sawfish の rep で lisp の勉強をするのは邪道でしょうか?

296 :デフォルトの名無しさん:03/03/30 03:38
rep って scheme だっけ?
別にいいんじゃない。ちゃんと処理系として成り立っているのなら。

297 :デフォルトの名無しさん:03/03/30 03:59
和田英一って日本人ですか?

298 :デフォルトの名無しさん:03/03/30 04:46
>296
ども。ドキュメントには emacs lisp と common lisp と scheme の良いトコ取り
と書いてあります。gnome が入っていれば、大抵 rep と rep-gtk もインストール
されているので、可搬性が高いかなと思ってます。

299 :デフォルトの名無しさん:03/03/30 06:19
良いとこ取り = どっちつかずで言語としては・・・
ということが多い気がする

300 :デフォルトの名無しさん:03/03/30 13:06
>>297
日本人じゃないの?

301 :デフォルトの名無しさん:03/03/30 14:17

ワロタ
http://www.melt.kyutech.ac.jp/~melt/Seminars/SICP/

302 :デフォルトの名無しさん:03/03/31 15:29

http://www.shiro.dreamhost.com/scheme/gauche/index-j.html

2003/3/30
Gauche release 0.6.8: メンテナンスリリース


303 :デフォルトの名無しさん:03/03/31 15:32
★みんなの情報局★みんなのリンク集★ココ最高★
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html

304 :デフォルトの名無しさん:03/04/02 17:32
質問です
let* があれば let は必要ないと思うのですが,
必要なのですか?


305 :デフォルトの名無しさん:03/04/02 17:54
関数の引数に型を追加したら、面白いと思うんですが、
こういうのを総称型っていうのかな。

(define (+ (l <number>) (r <number>)) (prim:+ l r))
(define (+ (l <number>) r) (+ l (cast <number> r)))
(define (+ (l <string>) (r <string>)) (prim:string-append l r))
(define (+ (l <string>) r) (+ l (cast <string> r)))
(define (+ l . args) (fold-left + l args))

(+ 0 "123" "456") =>579
(+ "0" 123 456) =>"0123456"


306 :デフォルトの名無しさん:03/04/02 18:00
let があれば let* は必要ありません。


307 :デフォルトの名無しさん:03/04/02 18:02
>304
意味違うじゃん。
(let ((x (+ x 1))(y x)) ...)
の様な時に困る。
そもそもlambdaの直呼び出しの構文唐だから、
let*より存在意義あるよ。

308 :デフォルトの名無しさん:03/04/02 18:16
lambdaがあるならletいらないじゃん。

309 :デフォルトの名無しさん:03/04/02 18:24
>>305
こんなのどうでしょ。

(define prim:+ +)
(define-method + ((num <number>) . args)
 (apply prim:+ num
     (map (lambda (x) (if (not (number? x))
               (string->number x)
               x))
       args)))

(define-method + ((str <string>) . args)
 (apply string-append str
     (map (lambda (x) (if (not (string? x))
               (number->string x)
               x))
       args)))


310 :デフォルトの名無しさん:03/04/02 20:45
>>309
文字列と数値に限定するのは、まずいんではないかと。

311 :デフォルトの名無しさん:03/04/02 21:07
x->number

312 :デフォルトの名無しさん:03/04/02 21:26
R5RSに無い機能の話するときは処理系書こうや。

x->numberはgauche.

引数の型によるディスパッチはCLOS系OOを持ってる処理系なら
使えるね。stklos, guile, gaucheあたり?



313 :デフォルトの名無しさん:03/04/02 22:00
BOSとかいうシングルディスパッチャなOOパッケージを
マルチに改造して使ってます。結局CLOS風ということだけど。
obj.x => (slot-ref obj 'x)
obj.x := ... => (slot-set! obj 'x ...)
obj.m(x) => (m obj x)
obj.m(x).n() => (n (m obj x))
左みたいな構文糖衣のトランスレーター作りたくなる。

314 :デフォルトの名無しさん:03/04/02 22:42
CommonLispならreadtableをいじればobj.x => (slot-ref obj 'x)は
簡単だし、やったこともある。
でも obj.m(x)は素直にやるとobj.m と (x)に分かれちゃうなあ。




315 :313:03/04/02 22:58
>>314
いや、こういう場合はreaderを完全に手作りにした方が結局早いです。
内緒ですが、うちではML風構文を読める様にしてます。

316 :デフォルトの名無しさん:03/04/03 01:56
S式でいいやん

317 :313:03/04/03 17:14
>>316
データとしてのS式は否定しないけど、
開発効率が全然違います。
pregexp.scmを逆変換自動生成したsample
http://210.143.102.80/upload/source/d/1340.zip
この逆変換自動生成もML風言語による成果物です。

318 :313:03/04/03 17:15
あ、直リンしちゃったので、各自で削ってください。

319 :デフォルトの名無しさん:03/04/03 17:20
やっぱり M式。

320 :デフォルトの名無しさん:03/04/03 20:46
>>281
ACLはどう?
http://www.franz.com/downloads/

60日間のトライアルライセンスだけど
何回でも延長できる。

321 :320:03/04/03 20:48
日本語チュートリアルもあるし
http://jp.franz.com/doodler/index-j.htm


322 :デフォルトの名無しさん:03/04/03 21:06
>317
> 開発効率が全然違います。

という根拠は?
「見た目」が多少違うぐらいで変わるとは思えないが

323 :313:03/04/03 22:18
>>322
sample見てもらえば判ると思いますが、
いくつか列挙すると、
・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
 →S式だと括弧の対応を常に気にする必要あり。エディタの補助必要。
・ネストが減る。
 →S式だとlet多用するだけで地獄。
・意味的な違いはほとんどないので、大抵のschemeのコードなら逆変換してメンテできる。
・良く使う関数を演算子として書ける。
 string-append("a" "b" "c" ...) → "a" + "b" + "c" ...
これだけでも全然違います。
S式定数はそのまま埋めこめる様になってるんで、
移行の手間はありませんでした。

324 :デフォルトの名無しさん:03/04/03 22:55
推論には縁の無い人でも,メリットいっぱいってこと?

325 :デフォルトの名無しさん:03/04/03 23:25
>323
> ・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。

特定のエディタを常に使用しているのなら問題無い

> S式だと括弧の対応を常に気にする必要あり。エディタの補助必要。

エディタの補助があるから括弧を自分で気にする必要が無い。

> ・ネストが減る。
> →S式だとlet多用するだけで地獄。

インデントレベルが違ってみえるだけでは?
インデントルール次第でなんとでも

> ・良く使う関数を演算子として書ける。
>  string-append("a" "b" "c" ...) → "a" + "b" + "c" ...

(define s+ string-append)
としても同じようなものだし、構文すらいじっていない。


結局、好みの問題ということでは?
どれも S式を凌駕するような特徴には思えないんだが

326 :デフォルトの名無しさん:03/04/03 23:39
>>325
勝手に作れば?という突っ込みは無し?

>>323
>> ・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
>特定のエディタを常に使用しているのなら問題無い

こ、答えになってないよ

>結局、好みの問題ということでは?

結局これでしょ。

>どれも S式を凌駕するような特徴には思えないんだが

ある意味で判るが、明確な根拠は?

327 :デフォルトの名無しさん:03/04/04 02:02
>326
>>> ・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
>>特定のエディタを常に使用しているのなら問題無い
>こ、答えになってないよ

つまり、エディタが面倒なとこは補助してくれる、ってこと


>>結局、好みの問題ということでは?
>結局これでしょ。

>317 では
> 開発効率が全然違います。
といっているのだが? まるで根本から違うかのような書き方をして。


>>どれも S式を凌駕するような特徴には思えないんだが
>ある意味で判るが、明確な根拠は?

データとプログラムの表現が同じであるということ。
それ以外は 「見た目が多少違う」 程度だし。
あなたのいう 「ある意味」 とは?

328 :デフォルトの名無しさん:03/04/04 10:22
喧嘩するなや

329 :324:03/04/04 19:03
で,このスレの方々は ML を便利に使っているってことなの?

それとも,そういうのが専門の人だけ?

330 :デフォルトの名無しさん:03/04/04 20:32
S 式をやめると、簡単なマクロしかかけなくなりそうな気がするけど、どうなんでしょうか?
分野にもよるけど、マクロがまともに使えないと開発効率は下がる気がする。

331 :デフォルトの名無しさん:03/04/04 23:25
>>313 いいなあ. すごくいいなあ. 公開してくれないの?

今でも一番愛する言語は scheme だけど,
a.foo(x).bar(y).baz(z)[i]
の味を覚えてしまって,
(list-ref (baz (bar (foo a x) y) z) i)
が正直ちょっとつらく…


332 :デフォルトの名無しさん:03/04/05 00:58
>>330 別に S 式をやめるわけじゃないんでしょ?書きやすいように
見た目を変換してるだけで。

333 :326:03/04/05 02:02
>>327
>つまり、エディタが面倒なとこは補助してくれる、ってこと
いや、だから。つまり313=323さんは、S式を快適に使うには
エディタの補助が必要という点が、欠点だと言ってるのでしょ?
それを327さんは反論?としてエディタの補助が有れば良いというのが
それでは313=323さんの発言を認めているんじゃ・・・・ということです。

それとも私が勘違いしている?

334 :デフォルトの名無しさん:03/04/05 08:05
>>332
「S 式は開発効率が高いか否か」という話をしているのでは?


エディタの補助についての議論は、正直どうでもいいんですけど、

S 式を採用している Lisp が他の言語と比べて開発効率が高い理由の 1 つは、
マクロを使って、ユーザが新しい構文を作ったり、対象としている問題に
適した言語を作ったりできることだと思うので、

S 式をやめて ML 風の記法を採用することによって、 >>327 の言う

> データとプログラムの表現が同じであるということ。

が失われてしまうと、マクロによる利点がなくなってしまい、
得るものより、失うもののほうが大きいのではないかと思います。

もちろん、対象とする問題によっては ML 風の記法のほうが開発効率
が高いことはあるでしょうが。

335 :313:03/04/05 10:00
色々と誤解がある様ですが・・

自分としてはデータ表現のS式は有効だと感じてますが、
コードにまでそれを強制する必要はないと思ってます。
S式を捨てるというわけではないです。
(というか、S式にかなりの部分依存してます。)
それと、S式の出力が欲しい時はいつでもexpandできるので、
逆変換してもcondとか以外は元通りになります。

繰り返しますが、エディタの補助がいらないのは十分なメリットです。
いつでもemacsなどを使える状況とは限らないし、
メモ帳しか知らない人でも楽に記述できます。
S式と比べて、記述したり修正する時間はだいたい半分以下です。

336 :313:03/04/05 10:01
>>334
マクロも普通の関数と同様に定義できます。
(基本的に評価規則は変化しない)
ただし、今のところ目的コードはS式なので、
LISPのマクロを書く感覚とまるっきり同じです。

//同一タグのリスト木をまとめる関数
define flat-tag (tag, totag, s) =>
let loop (x=s, r='()) in
if pair?(x)then
if tagged-list?(car(x), tag) then
loop(append(cdar(x), cdr(x)), r)
else loop(cdr(x), cons(car(x) , r))
else `(,totag ,@(reverse r));
//ネストするstring-appendをまとめるマクロ
define-macro +s x => flat-tag('+s, 'string-append, x);

このままでも関数形式で使えますが、
+s("a", +s("b", +s("c", "d")));
-> (string-append "a" "b" "c" "d")
=> "abcd"

これを2項演算子として登録すれば、
"a" +s "b" +s "c" +s "d";
-> (string-append "a" "b" "c" "d")
=> "abcd"
となります。(+を総称化してれば不用ですが)


337 :デフォルトの名無しさん:03/04/05 17:09
M式にいろいろつけたしたようなものか?

338 :デフォルトの名無しさん:03/04/05 18:25
>>313
Dylan風味?

確かにemacs使えない環境で編集しなくちゃならいときS式は辛い。
しかし逆にemacs使える環境では、\M-\C-tとか\M-\C-SPCとか
使いまくるとめちゃくちゃ効率が良くてもう戻れない。




339 :334:03/04/06 03:30
>>336
理解しました。確かにメモ帳で S 式書くのは大変です。

340 :デフォルトの名無しさん:03/04/06 03:56
メモ帳しか知らない人が開発にかかわるなんてことありえるのか?

341 :デフォルトの名無しさん:03/04/06 06:14
>>340
メモ帳(程度の編集環境)しか使えない環境というのは有り得るんでは。
クライアントの手元のPCで設定直すとか。


342 :デフォルトの名無しさん:03/04/06 07:40
結局、>>317
> 開発効率が全然違います。
というのは、まともなエディタが無い、という通常はまず無いような状況を
あたかもよくある状況であるかのように前提を設定した場合、ということ?

343 :デフォルトの名無しさん:03/04/06 14:24
メリットはだいたいわかった。
つーかS式は元々人間には読みずらいから、こういうフロントエンドを
作るってのは有効だろう。(ただGuileのC-likeはやりすぎな気がする。
あっちはS式捨ててるし。)
CommonLispやEmacsLispでもこういうのがあればいいな。

344 :デフォルトの名無しさん:03/04/06 15:04
読むのに関しては、S 式は余計な記号が無くて頭に入りやすいと思うよ。

345 :デフォルトの名無しさん:03/04/06 17:24
Mac OS X の LispWorks のベータテストが始まったみたいだけど、
LispWorks ってどうよ?
Personal Edition はダウンロードしてみたんだけど、
使い込んでいる人の感想希望。
やっぱ、ACL よりはしょぼいのかねぇ。

346 :デフォルトの名無しさん:03/04/06 19:00
誰かCMUCLをWindowsに移植してくれ

347 :デフォルトの名無しさん:03/04/06 21:36
>>345
>やっぱ、ACL よりはしょぼいのかねぇ。
そういう事は試してから言え

348 :デフォルトの名無しさん:03/04/07 22:06
M式 マンセー


349 :デフォルトの名無しさん:03/04/08 00:43
sexp を捨てたら何が残るというのだ

350 :デフォルトの名無しさん:03/04/08 01:48
S式読みやすいか?
実際のところXMLのタグ記法よりはマシって程度じゃない?
pretty-print必須だし。
そういやPaulGrahamが新しい方言作ってたみたいだけど、
結局S式が枷になってる風に見えたよ。

351 :デフォルトの名無しさん:03/04/08 02:08
XML と比べれば遥かにマシだし、
pretty-print が必要なのはS式に限らず、ほぼどんな構文でも同じだし

少なくとも、わしにゃ1番読みやすい

352 :デフォルトの名無しさん:03/04/08 06:53
mexp って、あんまり list 使わないような処理ならきれいに書けそうだけど…
list 処理多用するようなとこだと、かえって読み書きがつらそうな感じがした。
mexp 派の人はそうでもないのかな?

353 :デフォルトの名無しさん:03/04/08 16:56
mexpって何?

354 :デフォルトの名無しさん:03/04/08 17:38
M式じゃない?
たしかmeta expression


355 :デフォルトの名無しさん:03/04/08 17:59
なんでいきなりM式とやらの話になってんだよ
って、>>348か。マンセーならM式を説明してみろ

356 :デフォルトの名無しさん:03/04/08 19:39
>>355
ほれ
ttp://www.em.edu.waseda.ac.jp/~moriya/education/CAI/infomath3/LISP.pdf

>>352
Lispだってリスト表現は、ドット表現を変換したものだし・・・
だいたいM式もS式も相互変換可能だし・・・
見た目や書きやすさ印象は別にして強さは、一緒のはず

357 :デフォルトの名無しさん:03/04/08 19:53
M式の処理系紹介しる

358 :デフォルトの名無しさん:03/04/08 20:24
>>356
そのリンクの内容じゃ説明になってないだろ。
そもそもM式をそこで使う意味がわからん。


359 :デフォルトの名無しさん:03/04/08 22:23
>>356
うん、もちろん強さは同じだから、見た目とか書きやすさの問題として。
defun とか cond とかは楽しいんだけど…
セミコロンも、 S式の括弧みたいに、慣れれば気にならなくなるのかな…

360 :デフォルトの名無しさん:03/04/08 22:28
M 式だとマクロはどうなるの?

361 :デフォルトの名無しさん:03/04/08 22:40
つーかM式が何に使う物なのかわかんないんだけど。
M式言ってる人は、使ったことあるの?

362 :デフォルトの名無しさん:03/04/09 02:35
最近は M式を勉強しないのか?


363 :デフォルトの名無しさん:03/04/09 03:46
昔の教科書はかならずM式も書いてあったね。
でもウィンストンの本がはやってS式だけになった。
結局理論より実用優先。



364 :デフォルトの名無しさん:03/04/09 08:16
M式な処理系?
MLとかHaskellってM式じゃなかった?

Lispとは大分ちがうけど

365 :かおりん祭り:03/04/09 08:18
http://www.saitama.gasuki.com/kaorin/

  〜oノノハヽo〜
     ( ^▽^)/⌒\                       , −-
     ((ニ[二=(  こんなのがございま−−==≡≡す♪  ))
   /∧=:||  \_/                       `ー‐‐'
     じ/___/

366 :デフォルトの名無しさん:03/04/09 10:16
>>364
ぜんぜん違うだろ。
適当な事言うな。

367 :デフォルトの名無しさん:03/04/09 12:57
schemeって慣れるとほとんどcall/cc使わないね。
CPSで書くときもidentityあればいいし。

368 :デフォルトの名無しさん:03/04/09 18:46
LISPやってみたいんですが、お奨めの処理系ってなんですか?

369 :デフォルトの名無しさん:03/04/09 19:32
自作しる

370 :デフォルトの名無しさん:03/04/09 20:06
>363
理論って?
実用って?
具体的には何をさしてるの?

371 :デフォルトの名無しさん:03/04/09 20:24
>>368
xyzzy
emacs
で慣らすとか。

372 :デフォルトの名無しさん:03/04/09 21:29
>>370
>理論って?
純数学とか基礎論とか透明参照性とか・・・
>実用って?
手続きとか副作用とか構文糖とか・・・・

てっところ?みんなは如何思う?

>>368
schemeだけどDr.Scheme
へぼいけどbiggnerモードのstepperは魅力的

373 :デフォルトの名無しさん:03/04/09 21:36
"プログラミング言語shceme"よんでるんだけど、call/ccがさっぱりわからん。

374 :デフォルトの名無しさん:03/04/09 21:58
>>373
簡単に言うと、call/ccで渡された継続を関数形式で呼び出すと、
いつでもその継続を取得した直後に制御が移る、
でいいんじゃないかな。


375 :368:03/04/09 22:00
いままで過去ログ読んでましたが、
このスレ的にはschemeというのが優性っぽいですね。
違いがまだちょっとわからないですけど。

376 :デフォルトの名無しさん:03/04/09 22:05
>>373
簡単に言えばスレッドみたいなもんだ。
(call/ccの実装でスレッドを使っているものが多いし)

call/ccでスレッドを停止し、そのスレッドを返す。
もちろん受け取ったスレッドは、何時でも(元の環境下で)再開できる。

377 :デフォルトの名無しさん:03/04/09 22:08
>376
> 簡単に言えばスレッドみたいなもんだ。

違うし
継続は継続であってスレッドではない

継続を用いてスレッド (というかコルーチン) を実現することは可能だが、
それは本質ではない。
このあたりはちゃんと理解しておいた方がよい。たとえあまり使わないとしても。

378 :デフォルトの名無しさん:03/04/09 23:06
昔のWindowsやMacの協調型マルチタスクと同じ様な事ができる。


379 :デフォルトの名無しさん:03/04/09 23:29
>>377
>違うし
そのとおり。
>継続は継続であってスレッドではない
名前が違うし。(藁

判らん人に理解を促そうとしてるのに、変なツッコミ入れるね。
数学屋なの?

380 :デフォルトの名無しさん:03/04/10 04:36
>>379
s/理解/誤解/ であろ。
人にものを説明するスキルがないと思われ。



381 :デフォルトの名無しさん:03/04/10 08:07
http://www.google.co.jp/search?q=CPS+continuation+passing+style&lr=lang_ja

382 :377:03/04/10 12:11
>379-380
たんに指摘しただけで一切説明はしようとしていないし

383 :デフォルトの名無しさん:03/04/10 13:47
指摘だけして自己満足するオナニーならよそでやってちょ

384 :デフォルトの名無しさん:03/04/10 15:17
嘘つきさん一所懸命ですね。

385 :デフォルトの名無しさん:03/04/10 16:09
話がこんがらがっているように思えてならないのだが

386 :デフォルトの名無しさん:03/04/10 18:15
具体的にどこまでわかってどこがわからんか言わないと
>>373 以上のレスは出ないような。


387 :379:03/04/10 18:45
>>382=377
>>379-380
>たんに指摘しただけで一切説明はしようとしていないし
で、何を指摘したかったの? 0文字以上1文字未満で答えよ。

>>380
>s/理解/誤解/ であろ。
Lisperがperl使うなー。

>人にものを説明するスキルがないと思われ。
そかも。消えます。

388 :デフォルトの名無しさん:03/04/10 18:56
結局継続とは?

389 :デフォルトの名無しさん:03/04/10 19:04
>>388
>>374

アセンブラのjump先のラベルみたいなもの


390 :デフォルトの名無しさん:03/04/10 19:30
あ、それと、
その時点でのスタックの中身

391 :デフォルトの名無しさん:03/04/10 19:41
>>387
>>s/理解/誤解/ であろ。
>Lisperがperl使うなー。

これが perl?


392 :デフォルトの名無しさん:03/04/10 19:45
379は知らんくせにいらん事書きすぎ
突っ込まれたいとしか思えない

393 :381:03/04/10 20:40
スルーされた・・・?
ヒットした 16 件を全部読んだら継続について理解出来るはず。
それでも駄目だったら gauche-devel-jp の過去ログを見れば幸せになれるよ。

394 :374:03/04/10 22:00
(+ 2
(call/cc
(lambda (k)
(* 5 (k 4)))))
⇒6

kに継続が入るらしい。

kを関数に見立て引数をいれることにより、call/ccの返り値を決定できる。

(+ 2 4)になり6になる。
と理解しました。

(call/cc
(lambda (k)
(* 5 4)))
⇒20

kに継続がはいるらしい。

kは特に使われていない。

call/ccの引数として与えられた、(* 5 4)を返す関数が実行され、call/ccの返り値になる。


395 :374:03/04/10 22:01
続き。

(let ((x (call/cc (lambda (k) k))))
(x (lambda (ignore) "hi")))
⇒"hi"

…わかりません。
どうやら、xに継続?が入るらしいのですが・・・。

(((call/cc (lambda (k) k)) (lambda (x) x)) "HEY!")
⇒"HEY!"

…謎。

こんな感じですが、よきアドバイス期待しております。

396 :373=394=395:03/04/10 22:16
>>374でなく>>373でした。


397 :デフォルトの名無しさん:03/04/10 22:19
(let ((x (call/cc (lambda (k) k))))
(display x)(newline)
(x (lambda (ignore) "hi")))

とかで x の束縛を表示すると理解しやすいかもしれません。

398 :デフォルトの名無しさん:03/04/10 23:02
((((call/cc call/cc) call/cc) call/cc) call/cc)

399 :デフォルトの名無しさん:03/04/10 23:09
(((call/cc (lambda (k) k)) (lambda (x) x)) "HEY!")
kに継続が渡されてkを返してる。
((k (lambda (x) x)) "HEY!")
(k (lambda (x) x))で現在の継続を消して元の式の
(call/cc (lambda (k) k))を(lambda (x) x)で置き換える。
(((lambda (x) x) (lambda (x) x)) "HEY!")
((lambda (x) x) "HEY!")
"HEY!"

400 :デフォルトの名無しさん:03/04/10 23:14
(let ((x (call/cc (lambda (k) k))))
(x (lambda (ignore) "hi")))
xに継続が渡される。
(x (lambda (ignore) "hi"))で元の式の
(call/cc (lambda (k) k))を(lambda (ignore) "hi")で置き換える。
(let ((x (lambda (ignore) "hi")))
(x (lambda (ignore) "hi")))
((lambda (ignore) "hi") (lambda (ignore) "hi"))
"hi"

401 :デフォルトの名無しさん:03/04/13 00:57
clisp, cmucl, gcl, acl
みなさんどれを使ってますか?
aclはちょっと高いから別物だとしても
他の三つの違いがいまいち分りません。

402 :デフォルトの名無しさん:03/04/13 02:46
clisp はネイティブコンパイル出来ないんじゃなかったっけ?

403 :デフォルトの名無しさん:03/04/13 13:22
>>401
gcl の開発って続いているの?
GNU では gcl よりも clisp が良さそうだけど.

404 :デフォルトの名無しさん:03/04/13 23:34
R5RSに、mapはあってもfilter, foldl, foldr, zip, etc.が無いのが意外。
もっといろいろあってもいいと思うのに。

405 :デフォルトの名無しさん:03/04/14 00:04
>404
SRFI-1

406 :404:03/04/14 00:40
>405
どうも。助かりました。

407 :デフォルトの名無しさん:03/04/14 03:17
で結局、継続の話はどうなった?

例外以外に使えるネタは無いのか?
良いイディオムは無いのか?
誰か教えて。

408 :デフォルトの名無しさん:03/04/14 03:23
ケント デイヴィグの本に継続を使ったマルチタスクのサンプルが出てたよ。

409 :デフォルトの名無しさん:03/04/14 03:34
ところで、schemer はアプリを配付したい時どうしてるの? まずは処理系をインスコしてね
だと、場合によっては面倒だよね。

410 :デフォルトの名無しさん:03/04/14 10:03
ネイティブコードにコンパイルする処理系なら、大抵スタンドアロンバイナリが作れるんじゃない? BiglooとかStalinとか。

411 :デフォルトの名無しさん:03/04/14 10:09
>>407
継続という概念が登場してきた歴史を勉強してくらさい
そうすれば、その存在理由もわかりまっす

412 :デフォルトの名無しさん:03/04/14 15:48
>>409
Scheme48系はイメージを作って配布できるっぽい。
イメージとコアの2ファイルがいる。

413 :デフォルトの名無しさん:03/04/14 17:43
CPSで副作用レスプログラミング

414 :407:03/04/14 18:06
>>411
馬鹿なので判りません。
出来れば教えてください。

415 :デフォルトの名無しさん:03/04/15 12:54
>>407
「継続の使い方」
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html
というのがあった。
内容はコルーチンどまりだけど。

>>414
継続の歴史は、
Reynolds "The Discoveries of Continuations"
をがんばって読もう。



416 :デフォルトの名無しさん:03/04/15 21:33
>415
コルーチンの例が set! 使っててイヤン

417 :デフォルトの名無しさん:03/04/16 12:21
5月頃に行われるCommon Lisp, CLOSの最新動向に関するセミナーの
情報キボンヌ
書類どっかにいった…

418 :デフォルトの名無しさん:03/04/16 20:24
lispってデバッグやりにくいなぁ


419 :デフォルトの名無しさん:03/04/16 20:59
追跡の仕方が下手なだけじゃないのか?

420 :デフォルトの名無しさん:03/04/16 21:03
>418
どこらへんが?
トレースとかのデバッグ機能が普通はあるはずだが。
関数単位のテストが簡単にできたりとかもするし。

421 :デフォルトの名無しさん:03/04/16 21:27
>>420
どの処理系使うかでぜんぜん違うでしょ。

普通なんていう言葉は、正確には定義できないので
使わないようにしましょう。

422 :デフォルトの名無しさん:03/04/16 22:50
>421
だからこそ「普通は」といってるわけで

423 :Scheme 大好き:03/04/16 23:59
アンケートです。うざかったら無視して下さい。

1. 現在使っている処理系は何ですか?
2. その処理系でどんなプログラムを作っていますか?
3. 今までに Lisp/Scheme 処理系を自作した事がありますか?
4. :3 が yes の方は、どんな言語で実装しましたか?
5. :3 が yes の方は、その処理系にはどんな独自拡張をしましたか?
6. Lisp/Scheme の OO 拡張はよく使用する方ですか?
7. 今、一番イケテルと思う Lisp/Scheme 処理系は何ですか?
8. Lisp/Scheme 以外はどんな言語が好きですか?
9. ML/Haskell/Miranda/Clean/Dylan の内、幾つの言語の経験がありますか?
10. :9 で挙げた言語より、Lisp/Scheme を選んだ (?) のは何故ですか?


424 :デフォルトの名無しさん:03/04/17 03:53
schemeで、#\newlinrとかスペル間違えた場合、
エラーなのか、文字#\nとシンボルewlinrに分けるべきか、
どっちが正しいんでしょうか?

425 :デフォルトの名無しさん:03/04/17 12:19
>>424
If <character> in #\<character> is alphabetic, then the character
following <character> must be a delimiter character such as a space or
parenthesis.

ttp://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_sec_6.3.4


426 :山崎渉:03/04/17 15:13
(^^)

427 :デフォルトの名無しさん:03/04/17 18:20
>>424
ChezSchemeはエラー


428 :デフォルトの名無しさん:03/04/19 16:29
LispWorks のIDEのリスナーでは、#\あ => #\あ と評価されるんだけど、
ILISP では #\あ => Error: Wrong character name: あ. とエラーになる。
どうしてだろう?


429 :デフォルトの名無しさん:03/04/19 16:31
>>417
ttp://jp.franz.com/

430 :デフォルトの名無しさん:03/04/19 16:49
>428
日本語に対応してないってだけでわ?

431 :山崎渉:03/04/20 02:57
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

432 :山崎渉:03/04/20 03:38
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

433 :デフォルトの名無しさん:03/04/20 06:15
>>417
苫米地ちゃん来るのかにょ?

434 :デフォルトの名無しさん:03/04/20 10:38
>> 430
どうやら、コンソールだとだめっぽい。
load すれば大丈夫だから、*terminal-io* が日本語だめなのかも。
日本語使うときはILISPあきらめて、IDEかな。

435 :デフォルトの名無しさん:03/04/21 19:20
schemeマンセー

436 :デフォルトの名無しさん:03/04/22 22:33
TinyScheme万世

437 :デフォルトの名無しさん:03/04/23 04:20
LISPって意外と速いね。
メモリ消費しまくりだと思った。

438 :デフォルトの名無しさん:03/04/23 11:09
((lambda (x) (display "ナンカ") (x x)) (lambda (x) (display "ネタカケ") (x x)))

439 :デフォルトの名無しさん:03/04/23 22:00
SBCL どうよ。

http://sbcl-internals.cliki.net/index

440 :デフォルトの名無しさん:03/04/23 23:58
vi for schemer. ちょっと感動した。

www.ksky.ne.jp/~sakae/sicp/schemers-vi.html

441 :デフォルトの名無しさん:03/04/24 07:52
'#'のreaderを拡張して、C言語のプリプロセッサ(cpp)風に

#if 条件式(S式)

#else

#endif

を書ける様にするのはどうでしょうか?
cppと違い、#ifの条件式にlispやschemeのS式を直接書ける利点があります。
それに、ブロックコメントの#|〜|#と同じ様に、切りだし規則が
S式と分離してるので、
(if 式
 (define hoge 〜)
 (define hoge 〜))
の様に、括弧の数を合わせたりする必要がない。
(define hoge
#if (eqv? version ...)
〜)
#else
〜)
#endif
自分の処理系にhookとして入れてありますが、
開発のバージョンで切り分けるときなどに重宝してます。

442 :デフォルトの名無しさん:03/04/24 08:01
あと似た様な拡張で、
#q/〜/
で文字列引用符の切り替え(この場合#\"→#\/)、
#<<END

END
でperlのヒアドキュメントなど。

443 :デフォルトの名無しさん:03/04/24 08:37
>>441
普通にifやcond使えばいいだけで魅力はないな。

444 :デフォルトの名無しさん:03/04/24 09:38
文字列引用符切り替えやヒアドキュメントイイ!キボンヌ!

445 :デフォルトの名無しさん:03/04/24 10:40
>>441
これはよさそうだね。
CommonLispの場合はマクロ文字で似たような事はできる
(ただしあくまでも文字なので#if〜とは書けない)と思うけど、
schemeだと処理系に依存してしまう状況だからねぇ。
>>442のヒアドキュメントも欲しい。
SRFI辺りに取り込んでもいい気がする。
Gaucheもこういうの入れてくれないかな。

446 :デフォルトの名無しさん:03/04/24 14:17
ヒアドキュメントはchickenとscshにもあるね。
プリプロセッサ的なものはあってもいいけど(マクロでできるけど組み込みであると便利)、漏れはカッコの対応をエディタまかせなんで、対応がとれなくていいってのはあんまりメリットないなあ。
伝統的にやるならCommonLispの #+ と #- だろうけど、あれはあれで見にくい。



447 :デフォルトの名無しさん:03/04/26 10:25
ドット'.'って2個以上並んでるならシンボルにしていいんですか?
Petite Chez Scheme Version 6.0a
> '.
Error in read: unexpected dot (.).
> '..
..
> '...
...
> '....
....
> '.....
.....
> '.emacs
.emacs
ちょっと謎。
あと、
> '|.|
|.|
> '|..|
..


> '||
||
> (define (|| x) x)
> (|| 1)
1
縦棒|をシンボルとして使いたいんですが、そういう場合はどうすれば?

448 :デフォルトの名無しさん:03/04/26 15:05
R5RS says:
>[ ] { } |
> Left and right square brackets and curly braces and vertical bar
> are reserved for possible future extensions to the language.


449 :デフォルトの名無しさん:03/04/28 01:17
qschmeってインタプリタにしては速いナー。
      fib[sec] tak[sec]
C       0.15   0.07
qschme   1.13    0.7
JRuby   415.35  173.89
Ruby    14.63   6.32
http://ruri.csys.ce.hiroshima-cu.ac.jp/~masato/diary/2001/09/

450 :デフォルトの名無しさん:03/04/28 01:28
qscheme は indirect threaded code だっけ。
でもちょっと実装がアレだった記憶が…

451 :デフォルトの名無しさん:03/04/28 01:36
そうなんだ。
もったいないね。
たぶんPetiteとタメ張れるインタプリタってこれぐらいじゃない?

452 :デフォルトの名無しさん:03/04/28 18:15
実装がアレってなーに??

453 :デフォルトの名無しさん:03/04/29 16:56
http://www.abstractnonsense.com/schemix/
linuxに組み込みだってぽ

454 :デフォルトの名無しさん:03/04/29 18:07
/dev/schemix にワラタあげ

455 :デフォルトの名無しさん:03/04/29 20:31
システムに組み込むって、/dev/ から利用できればいいのかよ(w

456 :デフォルトの名無しさん:03/04/29 21:09
すんまそん.勉強中ですが教えてください
(define (rotate-one n) (modulo (+ n 1) 4))
(define (rotate path)
(if (null? path) path
(append (rotate (cdr path))(list (rotate-one(car path))))))
(define (inverse-one n) (modulo (+ n 2) 4))
(define (inverse path)
(if (null? path) path
(cons (inverse-one (car path))
(inverse (cdr path)))))
(define (dragon-one path)
(if (null? path) path
(append (inverse (rotate path)) path)))
(define (dragon n)
(if (= n 0) '(0)
(dragon-one (dragon (- n 1)))))

(dragon 10)
standard input:82:7: In procedure if in expression (get-canvas-status drg):
standard input:82:7: Stack overflow
ABORT: (stack-overflow)


stack-over-flow になるのはなんででしょう?
もしかして rotate とかって末尾再帰にはなってないんでつか

457 :デフォルトの名無しさん:03/04/29 22:14
(define (my-rotate path)
 (let loop ((path path) (acc '()))
  (if (null? path)
    acc
    (loop (cdr path)
       (cons (rotate-one (car path)) acc)))))
(define (my-inverse path)
(let loop ((path path) (acc '()))
(if (null? path)
(reverse! acc)
(loop (cdr path)
(cons (inverse-one (car path)) acc)))))
例えばこんなんどうでしょ。

1) リストの後に1個ずつ append するループ
2) リストの頭に1個ずつ cons して最後に reverse(!)

1)は効率がとても悪いです。何故でしょう?


458 :デフォルトの名無しさん:03/04/29 22:15
>>456
全部末尾呼び出しになってないよ

459 :デフォルトの名無しさん:03/04/29 22:16
>>456
(define (rotate path)
(rotete-rec path ()))

(define (rotete-rec path rest-path)
(if (null? path) rest-path
(rotete-rec (cdr path)
(cons (rotate-one (car path)) rest-path))))


460 :456:03/04/30 00:49
456です.レスありがとうございます.
勉強になるです.

>>457
append するのにリストの尻までたどらなければならないけど
reverse する場合はそれが一回でいいから?

>>458
関数の一番最後のカタマリの中にさえ
呼び出しがあれば末尾だとおもいこんでますた……
軽く首つってきます

>>456
カコイイですアリガトウゴザイマス

461 :デフォルトの名無しさん:03/04/30 00:50
map使ったほうが簡潔に書けるよ。
(define (rotate-one n) (modulo (+ n 1) 4))
(define (rotate path) (reverse (map rotate-one path)))
(define (inverse-one n) (modulo (+ n 2) 4))
(define (inverse path) (map inverse-one path))
(define (dragon-one path) (append (inverse (rotate path)) path)))
(define (dragon n)
(if (= n 0) '(0)
(dragon-one (dragon (- n 1)))))


462 :デフォルトの名無しさん:03/04/30 01:12
(define (dragon-one path)
(append (reverse (map (lambda (n) (modulo (+ n 3) 4)) path)) path))
(define (dragon n)
(if (= n 0) '(0)
(dragon-one (dragon (- n 1)))))

こんなのも書いたけど。
(define (dragon-one path)
(let loop ((a path) (b path))
(if (null? a) b
(loop (cdr a) (cons (modulo (+ (car a) 3) 4) b)))))

463 :456=460:03/04/30 01:47
>>460
s/>>456/>>459/
もー死にたい……

464 :デフォルトの名無しさん:03/04/30 10:17
これはどうだろう。(dragon 10)は一緒だったけど・・・。
(define (dragon n)
(if (= n 0) '(0)
(apply append (map (lambda (n) (if (odd? n) (list n (modulo (+ n 3) 4))
(list (modulo (+ n 3) 4) n))) (dragon (- n 1))))))

465 :デフォルトの名無しさん:03/05/01 05:51
どう、って何が?
ちなみにそれも末尾呼び出しになってない。

466 :464:03/05/01 09:55
再帰パターン探してたら出たんだけど、本当に正しいか解らないから誰か証明してよ
ってぐらいの意味だったんですけどね。
最近は末尾再帰でなくてもいいや、動けばいいやって感じです。

(define (dragon n)
 (let loop ((n n) (r '(0)))
  (if (= n 0) r
    (loop (- n 1) (apply append (map (lambda (n) (if (odd? n) (list n (modulo (+ n 3) 4))
(list (modulo (+ n 3) 4) n))) r))))))
いつの日にか自動的に変換してくれますように。

467 :デフォルトの名無しさん:03/05/01 10:23
こんなのとか?
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#rec2tailrec


468 :デフォルトの名無しさん:03/05/01 17:49
LISPでOOが流行らないのは、構文のせいですよね?

469 :デフォルトの名無しさん:03/05/01 17:55
いいえ。

470 :デフォルトの名無しさん:03/05/01 18:16
schemeってなんて読むんですか?スチェメでいいんですよね?

471 :デフォルトの名無しさん:03/05/01 18:34
スキーム

472 :デフォルトの名無しさん:03/05/01 18:45
LISPはリスピーでいいんですよね。

473 :デフォルトの名無しさん:03/05/01 18:53
リスプ

474 :デフォルトの名無しさん:03/05/01 19:38
リス(プ

475 :デフォルトの名無しさん:03/05/02 02:16
CLOSベンキョするのに良い文書しりませんか?

476 :デフォルトの名無しさん:03/05/02 10:01
Tiny CLOS Tutorial
http://home.adelphi.edu/~sbloch/class/272/tclos/tutorial.shtml

A Brief Guide to CLOS
http://www.aiai.ed.ac.uk/~jeff/clos-guide.html

Goops Manual
http://www.gnu.org/software/guile/docs/goops/index.html

477 :デフォルトの名無しさん:03/05/04 03:58
schemeスゴーと思った。けど、
同時に括弧がマズーと思った。

478 :デフォルトの名無しさん:03/05/04 04:04
>477
そう思って ML とか Dylan とか使ってみたけど、今度は逆に括弧が無いのが気になった。
Lisp/Scheme のコードを沢山読んでると括弧が無い方が変に見える。俺おかしいかな?

479 :デフォルトの名無しさん:03/05/04 04:04
カッコなんて気にならなくなるよ

480 :デフォルトの名無しさん:03/05/04 04:05
そうですか。

481 :デフォルトの名無しさん:03/05/04 07:39
昔のPC板でLISPの話されてますた。
Z80でLISP動いてたのか。

Oh!MZにお世話になった人のスレ
http://pc.2ch.net/test/read.cgi/i4004/1009098920/

482 :デフォルトの名無しさん:03/05/04 07:46
lis?

483 :デフォルトの名無しさん:03/05/04 12:26
=> #f

484 :デフォルトの名無しさん:03/05/04 19:50
Linux Zaurusで、guileコンパイルしてみました。
これでついに胸ポケットにScheme。

485 :デフォルトの名無しさん:03/05/05 08:06
Palm でも Windows CE でも Scheme は動いたりする。しかし Palm は文字コードが
Shift JIS なせいで日本語は厳しかったような。

486 :デフォルトの名無しさん:03/05/05 08:55
Scheme コンパイラが欲すぃ。トランスレータじゃないやつ。
バイトコードコンパイラじゃないやつ。日本語が通るやつ。

487 :デフォルトの名無しさん:03/05/05 11:26
>>486
素人なのでよくわかりませんが、
Cにコンパイルできればいい?
それともアセンブラ吐くやつ?

Cにコンパイルという事であれば、
(define (b n)
 (if (> n 0) (b (- n 1))
  #t))

の場合、

toplevel_b(n) {
b:if (n > 0) {
  n = n - 1;
  goto b;
 }
 return true; //#t
}
みたいなコードが吐ければいいのかな。

クロージャーを返したりするメカニズムはどうすんのだろ。
環境へのポインタと関数アドレスを一緒に返す?
末尾呼び出しされる関数だと、call/ret前提の関数じゃダメだから、
ラベルのアドレスを返すのかな。
アセンブラで考えると、基本的にcall/retはトップレベルから下は
使えない様な。


488 :デフォルトの名無しさん:03/05/05 11:32
あ、トランポリンにして、末尾の式を特別扱いすれば作れるかも。

489 :デフォルトの名無しさん:03/05/05 11:44
>487
私も素人ですが、トランスレータと書いたのがそれです。Chicken とか Stalin とか PLT
のとか Bigloo とか、ネイティブコードを作れる処理系は大抵 C にコンパイルしてから
ネイティブコードにコンパイルします。

Chez 欲しいなと思ってるのですが、Chez って日本語通りますか?
あと、Google で検索すると、Mac OS X 版の Chez があるような記述があったのですが、
実際に購入可能なのでしょうか? 購入する際は各プラットフォーム毎に課金されるの
ですか?

490 :デフォルトの名無しさん:03/05/06 04:38
>>489
Petite Chez Scheme Version 6.0a
を見る限りでは、|〜|で囲めば日本語のシンボルとか使えるみたいよ。

(define |加算| +)
(define |減算| -)
(define |より小さい| <)
(define (|フィボナッチ| n)
 (if(|より小さい| n 2) n
  (|加算| (|フィボナッチ| (|減算| n 1)) (|フィボナッチ| (|減算| n 2)))))
(|フィボナッチ| 30)
=>832040

これを使えるというのかは知らないけど。

491 :デフォルトの名無しさん:03/05/06 04:43
文字列に変換しても、
ちゃんと0x5cがエスケープされる。

> (symbol->string '|ソース表計算|)
"ソ\ース表\計算"

492 :デフォルトの名無しさん:03/05/06 05:11
> (let ((s (symbol->string '|ソース表計算|)))
(eq? (string->symbol s) '|ソース表計算|))
#t

少なくとも可逆ではある。
ただし、

> (char->integer(string-ref (symbol->string '|ソース表計算|) 0))
131
> (char->integer(string-ref (symbol->string '|ソース表計算|) 1))
92


493 :デフォルトの名無しさん:03/05/06 05:57
インプリメンタが一番手を焼くのは、
callback関数内での上位継続呼び出しじゃないだろうか。
stacklessにしても特別扱いしなきゃならない問題。

494 :デフォルトの名無しさん:03/05/06 13:33
http://java.sun.com/features/2003/05/steele_qa.html

common lispといい、この人って言語仕様でかくするのが趣味なのか?


495 :デフォルトの名無しさん:03/05/06 13:53
>>494
言語仕様とライブラリの区別はつくか?

496 :デフォルトの名無しさん:03/05/06 13:56
ライブラリが言語仕様に含まれるか否か?

497 :マ板ハゲスレ住人:03/05/06 14:01
ACLの入門書とかで有名な、
ポール・グラハムの写真ありませんか?

498 :デフォルトの名無しさん:03/05/06 14:04
Steeleは、初期のSchemeに著しい貢献があるから、
「言語仕様でかくするのが趣味」ってことはないわな。
「lambdaがあるならletいらない(>>308)」schemeコンパイラの論文もあるし。

Common Lispについては、Steeleの考えだけでつくった仕様じゃないし…
MLの意見を集約していて爆発しちゃったんでしょう。
本人も今やり直すんなら修正したい点を井田さんのインタビューで答えてるしね。



499 :デフォルトの名無しさん:03/05/06 14:07
>>497
ほれ
http://www.paulgraham.com/images.html

500 :マ板ハゲスレ住人:03/05/06 14:12
>>499
おお、ありがとう。
生意気そうなツラですね。
フサフサかー

501 :デフォルトの名無しさん:03/05/06 14:26
>>495
generic types, operator overloading, and constant classes

これはライブラリか?

502 :デフォルトの名無しさん:03/05/06 15:39
>>501
その辺りはガイ・スティールの趣味というより、世間の要請だ─ね。
C#だって同じ拡張を試みてるもんね。

しかし、VMといい、GCといい、genericsといい、Lisp屋は先見の明がありますな─(w

503 :デフォルトの名無しさん:03/05/06 15:50
俺はギュイなんだとおもってたよ。

504 :デフォルトの名無しさん:03/05/06 16:52
>>496
文法には含まれないけど、仕様には一部のライブラリが含まれると思う。

505 :504:03/05/06 16:53
ありゃ、ここLispスレだった。
標準ライブラリがあるかどうかもしらん(^^;

506 :デフォルトの名無しさん:03/05/06 18:12
なんか微妙にSmalltalkスレとシンクロしてておもろい(笑)

507 :デフォルトの名無しさん:03/05/06 18:26
>>506
見てきた。禿げと言語/ライブラリですか…

あっちでは環境を抜きに言語仕様を語れないと妙に力説している人がいるけど、
一度考えてみたらいいんじゃないかと思う。(しかも肌で感じるだとよ…)

Lispの世界では、その結果SchemeとEuLispという成果があるわけだし。(ISISPも?)

508 :デフォルトの名無しさん:03/05/06 21:20
>>507

ハゲフェチの人で気付いたわけですが(w
お互い影響を与えあってたのは事実だろうし(この辺どっち側からも文句つけられそうだが)、
一度そういう視点でみても罰はあたらんかな?とお気楽に考えちゃうのはネイティブじゃないから
なんだろうなぁ?と。

>あっちでは環境を抜きに言語仕様を語れないと妙に力説している人がいるけど、
>一度考えてみたらいいんじゃないかと思う。(しかも肌で感じるだとよ…)

たぶんGNUsmalltalkとかSmallScriptとかを引きあいに出した人もそういう感じなんだろうかな?と
好意的に解釈してみるのだが、肌で感じる部分がやはり入り口に立ってる人間に宗教臭いと思わせる
部分なのかな?>Smalltalk。

でもこの辺考えて見るとおもろいね。ちといろいろ遊んでみようかという気になってきますたよ。


509 :デフォルトの名無しさん:03/05/08 12:02
cygwin下で、

#!/usr/local/bin/scheme

;;日本語のコメント

(display '日本語も表示できます)
(newline)

;;EOF

スクリプトを書いて、
スクリプトの一行目にインタプリタのパスを書いて、
パーミッションを与えて、
実行すると、
実行できる。
日本語もバリバリ。

ができるスキームってどれですか?


510 :デフォルトの名無しさん:03/05/08 12:20
>>499
ウホォ、いい男・・・

511 :デフォルトの名無しさん:03/05/08 12:21
cygwinってパーミッションあるんだ。
Gaucheはどうなの?

512 :デフォルトの名無しさん:03/05/08 14:04
>スクリプトの一行目にインタプリタのパスを書いて、
>パーミッションを与えて、
>実行すると、
>実行できる。

どれでもできる。


513 :デフォルトの名無しさん:03/05/09 04:06
>>512
はやく教えろハゲ

514 :_:03/05/09 05:02
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

515 :デフォルトの名無しさん:03/05/09 07:48
>>513
tinyscheme

516 :_:03/05/09 08:01
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

517 :_:03/05/09 09:27
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

518 :_:03/05/09 10:54
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

519 :bloom:03/05/09 11:13
http://homepage.mac.com/ayaya16/

520 :デフォルトの名無しさん:03/05/09 11:39
(defun a)であきらめた。

521 :デフォルトの名無しさん:03/05/09 11:54
そうですcar

522 :_:03/05/09 12:21
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

523 :_:03/05/09 13:47
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

524 :_:03/05/09 15:14
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

525 :デフォルトの名無しさん:03/05/09 15:32
ウゼエ

526 :_:03/05/09 16:40
  ∋8ノノハ.∩   http://yoshiwara.susukino.com/zenkaku
   川o・-・)ノ <先生!こんなのがありました!
http://www.yoshiwara.susukino.com/hankaku/hankaku07.html
http://yoshiwara.susukino.com/hankaku/hankaku08.html
http://www.yoshiwara.susukino.com/hankaku/hankaku10.html
http://yoshiwara.susukino.com/hankaku/hankaku07.html
http://www.yoshiwara.susukino.com/hankaku/hankaku03.html
http://yoshiwara.susukino.com/hankaku/hankaku05.html
http://www.yoshiwara.susukino.com/hankaku/hankaku01.html
http://yoshiwara.susukino.com/hankaku/hankaku06.html
http://www.yoshiwara.susukino.com/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html

527 :デフォルトの名無しさん:03/05/10 01:47
(cdr ねえ)

528 :デフォルトの名無しさん:03/05/10 05:50
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?


529 :デフォルトの名無しさん:03/05/10 06:12
懐かしいな。前スレだっけ?

ttp://www.ksky.ne.jp/~sakae/sicp/cont.html

530 :デフォルトの名無しさん:03/05/10 08:32
>>528 再帰で書けよヴォケ

531 :デフォルトの名無しさん:03/05/10 12:41
LISPでWiki書こうとしてるんだけど、クロスサイトスクリプティングの防ぎ方が
分からん・・・

532 :デフォルトの名無しさん:03/05/10 13:48
Perl でいう pack, unpack のようにバイナリデータを読んだり書いたりしたいんですが、
Lisp では通常どーやるもんなんでしょうか? Common Lisp でも Scheme どっちでもいいから
教えて〜

533 :デフォルトの名無しさん:03/05/10 15:04
栗鼠腐厨

534 :デフォルトの名無しさん:03/05/10 15:15
金銀パールプレゼントスレはここでふか。

535 :デフォルトの名無しさん:03/05/10 15:29
>>532
漏れもよく知らんが、この辺を調べれば判ると思う。
(open path :ENCODING :binary)
(open path :element-type 'unsigned-byte)
(read-char) (write-char)
(read-byte) (write-byte)


536 :デフォルトの名無しさん:03/05/10 18:13
調べてみたら、それしか無かったんでもしやと思いましたが…。では4バイト整数を
読むときは、read-byte, read-byte, read-byte, read-byte で読んで、shift して数値を
足しこんでいくしかないんですね。

537 :デフォルトの名無しさん:03/05/10 18:20
あぁ、途中で送っちゃった。結局、pack モドキを自作してお茶を濁す事にしますた。

538 :デフォルトの名無しさん:03/05/11 01:52
:element-type (unsigned-byte 32)


539 :デフォルトの名無しさん:03/05/13 15:05
Allegro Common LispのEnterprise Platinumの価格っていくら?
http://jp.franz.com/base/map_packages.html

540 :デフォルトの名無しさん:03/05/14 01:59
1700万じゃなかったかな。
小俣ちゃんから送られてきたメール会社で確認してみるよ。

541 :デフォルトの名無しさん:03/05/14 13:07
ネイティブコードに変換したLISP
ちょー速い。

542 :デフォルトの名無しさん:03/05/14 19:03
>>541 なになにそんなに凄いの?もちっと具体的に自慢汁!

543 :540:03/05/14 23:38
訂正:サイトライセンスで1600万円也でした。
CLIMとかAllegroStore永久ラインセンスとか追加してくと2000万くらいには軽く手が届きますな。

544 :デフォルトの名無しさん:03/05/14 23:39
http://endou.kir.jp/2/index2.html

545 :デフォルトの名無しさん:03/05/15 21:37
なかなかですな

546 :デフォルトの名無しさん:03/05/15 21:55
1600万円とはびっくり。

547 :デフォルトの名無しさん:03/05/17 00:12
1600万円かぁ。うへぇ。いくら速いとはいえ…
Allegro ODBC使うだけの方がいいかぁ。
これだとEnterpriseかぁ。
これも高いのかなぁ?

548 :540:03/05/17 01:34
Windows/Linux/FreeBSD/MacOSX
Professional 750,000
Enterprise 1,400,000
Platinum 2,000,000
CLIM 365,000

Sun/IBM/SGI/HP/Compaq(32bit)
Professional 1,300,000
Enterprise 2,000,000
Platinum 2,750,000
CLIM 365,000

Sun/IBM/SGI/HP/Compaq(64bit)
Enterprise 2,300,000
Platinum 3,200,000
CLIM 365,000

Site License
Professional 8,500,000
Enterprise 11,500,000
Platinum 16,000,000
CLIM 3,000,000

AllegroStore Permanent License
AllegroStore Server 1,400,000
AllegroStore Client 500,000

サイトライセンス以外は上記×ユーザ人数分なり。たけぇ〜。

549 :デフォルトの名無しさん:03/05/17 02:01
ODBCぐらいは欲しいな。
ということは、enterpriseかよ。
・・・自作すりゃいいのか?
そもそも、professionalに配布向け一式?が無いのはおかしいって。
アレグロさんよー

550 :デフォルトの名無しさん:03/05/17 02:11
10万ぐらいに負からんか?アレグロさんよー。

551 :sage:03/05/17 02:18
新日鉄がぼったくってんじゃないのかという気がしないこともない。
米国Franz社から直接購入した場合のお値段キボンヌ。

552 :デフォルトの名無しさん:03/05/17 02:51
Lisp処理系なんて他にたくさんありそうだけどな。

553 :デフォルトの名無しさん:03/05/17 03:32
Cコンパイラなんて他にたくさんありそうだけどな。

554 :デフォルトの名無しさん:03/05/17 07:01
ただでさえマイナーなLISPが、ここまで高いと・・・

555 :デフォルトの名無しさん:03/05/17 10:09
うぉぉ、ひょっとして、Windows/Linux/FreeBSD って、それぞれ別に
金払わなきゃ駄目なの?こりゃ漏れには一生ムリポ…。LispWorks かなぁ。

556 :デフォルトの名無しさん:03/05/17 11:57
少なくとも個人なんか最初から相手にしてない

557 :デフォルトの名無しさん:03/05/17 18:26
LISPのネイティブコードってあんまり想像できないんですが、
実際どんな感じなんでしょうか?
シンボルの参照とか。

558 :デフォルトの名無しさん:03/05/17 21:46
ハッカーと画家
http://www.shiro.dreamhost.com/scheme/trans/hp-j.html

559 :デフォルトの名無しさん:03/05/17 23:22
>>557
直接埋めこみ不可な定数(シンボルや文字列など)は
別テーブルとして持ってると思う。
((ネイティブコード ...) (定数 ...))


560 :デフォルトの名無しさん:03/05/18 23:49
>> 556
これだけの金額になると会社にACL導入させるのも至難の業かと。
導入を決意させる必殺の口説き方とか知ってたらレクチャーおながいします。

561 :デフォルトの名無しさん:03/05/19 00:24
まず最低でもLISP使う仕事があって、
それなりの成果がある会社で
発言力のある上級lisperがいないことには。

562 :デフォルトの名無しさん:03/05/19 01:47
>>557
cmuclなんかだと直接機械語になるし、アセンブルコードも見れるので
見てみるとよい。


563 :デフォルトの名無しさん:03/05/19 06:46
Lisp導入してみて、成果が上がったら・・・とは思うけど。
ためしに導入するにもきつい金額だ

564 :デフォルトの名無しさん:03/05/20 21:07
試しならそれこそトライアル版で十分なわけで。

565 :デフォルトの名無しさん:03/05/21 02:06
>> 564
漏れが見極めたいのはAllegroStoreがどれだけのもんかとかトライアル版では
利用できない機能のポテンシャルなんだが・・・

566 :デフォルトの名無しさん:03/05/21 14:33
営業窓口と相談しる

567 :デフォルトの名無しさん:03/05/21 17:04
リストのcar側のネストレベルをカウントする関数を作りたいんですが、
破壊操作なしで作れるでしょうか?

こういう入力の場合は、
'(a b c (a b c) d (a b c (d) e) e)
こういう結果を得たい。
a:1
b:1
c:1
a:2
b:2
c:2
d:1
a:2
b:2
c:2
d:3
e:2
e:1

つまり
'(a b c (a b c) d (a b c (d) e) e)
 1 1 1 2 2 2 1 2 2 2 3 2 1

呼び出し形式はこんな感じで
(hoge
 (lambda(x level) (display x)(display ":")(display level)(newline))
 '(a b c (a b c) d (a b c (d) e) e ))

568 :デフォルトの名無しさん:03/05/21 17:07
なんで破壊操作がいるの?

569 :デフォルトの名無しさん:03/05/21 17:12
>>568
想像しただけなんで、深い意味はないです。
ご教授お願いします。

570 :(define (´∀`) 'マターリ):03/05/21 17:18
(define (hoge f a)
(let loop ((a a) (level 1))
(for-each (lambda (x) (if (pair? x) (loop x (+ level 1))
(f x level)))
a)))

571 :デフォルトの名無しさん:03/05/21 17:22
あー、パラメータを1つ増やして、>>567の階層カウント中に、それまでに
カウントした中の最大値を繰り返しで呼び出される関数に渡したい
とした場合はどうでしょうか。
これも破壊操作無しでできるでしょうか?
そもそも、リスト中の階層の深さのピークを得るのが目的だったんです・・・。

'(a b c (a b c) d (a b c (d) e) e)
変数名:階層:階層の最大値
a:1:1
b:1:1
c:1:1
a:2:2
b:2:2
c:2:2
d:1:2
a:2:2
b:2:2
c:2:2
d:3:3
e:2:3
e:1:3

(3を得たい)

572 :デフォルトの名無しさん:03/05/21 17:38
何に使うのかというと、関数中のletの変数の数をカウントして、
関数内で必要なローカル変数領域の最小限の大きさの取得とかです。

(define (f)
 (let (x) ; 1
  (let (y) ; 2
   :
  ))
 (let (z) ;1
  :
 ))

(この場合ローカル変数領域の大きさは2、という風に求めたい)

573 :(define (´∀`) 'マターリ):03/05/21 17:50
こんなんでよかったら・・・。
(define (hoge f a)
(let loop ((a a) (level 1) (max 1))
(cond ((null? a) max)
((pair? (car a)) (loop (cdr a) level (loop (car a) (+ level 1) (if (> (+ level 1) max) (+ level 1) max))))
(else (f (car a) level max) (loop (cdr a) level max)))))

574 :デフォルトの名無しさん:03/05/21 17:57
>>573
それでバッチリです。
ありがとうございました!


575 :(define (´∀`) 'マターリ):03/05/21 21:37
深さだけならこれでいいと思う。
(define (depth a)
(if (list? a) (+ 1 (apply max (map depth a)))
0))

576 :デフォルトの名無しさん:03/05/23 01:53
>>678
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&c2coff=1&q=pdf2txt&btnG=Google+%8C%9F%8D%F5&lr=lang_ja

577 :デフォルトの名無しさん:03/05/23 01:54
誤爆すた

578 :(define (´∀`) 'マターリ):03/05/23 01:59
これでもいいか。
(define (depth a)
(if (pair? a) (max (+ 1 (depth (car a))) (depth (cdr a)))
0))

579 :デフォルトの名無しさん:03/05/24 01:47
FreeBSD で scm を ports から入れているのですが、(require 'curses) すると
dyn:link: /usr/local/lib/scm/crs.so: Undefined symbol "wrefresh"
と言われてしまいます。どうしたらよいのでしょうか。

580 :デフォルトの名無しさん:03/05/24 17:13
UNIX USER 2003年7月号
6月7日発売 特別定価1,580円
特別企画「使って学ぶ!Gaucheによる Schemeスクリプトプログラミング」

http://www.unixuser.jp/next.html

581 :デフォルトの名無しさん:03/05/24 18:15
Guileかと思ったらGaucheかー!
河合さん本人の記事かな?

582 :デフォルトの名無しさん:03/05/24 18:44
よ〜し、父ちゃんUNIX USER買うぞ〜


583 :デフォルトの名無しさん:03/05/25 15:26
ちょっと疑問に思ったんですけど、
apply という手続きを apply を使わずに定義することはできるのでしょうか。
自分自身を使わずに定義できない手続き(及び構文)をプリミティブというのでしょうか?

584 :デフォルトの名無しさん:03/05/25 17:06
>>583
できるけどさあ

>自分自身を使わずに定義できない手続き(及び構文)をプリミティブというのでしょうか?
自分自身を使わずって、
もうちょっと質問の仕方考えろよー

585 :デフォルトの名無しさん:03/05/25 17:47
>>580
文法はなんとなくわかったけど、使い道がよくわかってないので、
とても楽しみ。

586 :デフォルトの名無しさん:03/05/25 17:58
>>584
過去ログに car と cdr を他のプリミティブ手続きで定義したものが
あったのですが、プリミティブかどうかは定義できるできないに関わらず
仕様で決っているという解釈でよいですか?
apply については調べたら eval との相互再帰だと分りました。すいません。
なんにせよかなり原始的な手続きだということが分かって安心しました。

587 :デフォルトの名無しさん:03/05/26 03:28
http://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview21.html

588 :デフォルトの名無しさん:03/05/26 04:37
>>587
参考になった

589 :デフォルトの名無しさん:03/05/26 17:42
>>587
Gauche の河合さんのインタビュー。
次の友達の輪は ポール・グラハムになりそうだな。


590 :山崎渉:03/05/28 12:45
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

591 :デフォルトの名無しさん:03/05/28 17:48
qschemeがビルドできない
configureでlibgmpのテストがエラーになってしまう

592 :デフォルトの名無しさん:03/05/28 20:15
OSとバージョンぐらい書けよ

593 :デフォルトの名無しさん:03/05/28 21:32
日経ソフトウエアで特集されてたCurlってブラウザ上で動くLispなの???

http://www.cag.lcs.mit.edu/curl/
http://www.curl.com/html/

594 :デフォルトの名無しさん:03/05/28 21:42
なにかと思ったらカールか。
予想通り全然ブレイクする気配なし。

595 :デフォルトの名無しさん:03/05/28 22:29
「webで」っていうだけで、
「日経ソフトウェア」にこんなマイナーな言語取り上げられるんだから笑っちゃうよね…

596 :デフォルトの名無しさん:03/05/29 17:54
え、カ^ルてLispなの?

597 :デフォルトの名無しさん:03/05/29 19:43
Lispにゃ見えんが・・・

598 :デフォルトの名無しさん:03/05/29 19:51
なんか、ただ括弧を{}に変えただけって気もする

599 :デフォルトの名無しさん:03/05/29 20:15
糞だな

600 :デフォルトの名無しさん:03/05/29 20:34
LISPと違うのは
1)ピリオドを跨いでシングルメソッドディスパッチを可能にした。
2)コロンを跨いで型を書ける様にした。
3)()→{}に変えた。
4)macroが無くなってる様な気がする。
5)消えたリスト関数群

1)はCLOS程の機構は必要ないと判断したのかな。
2)の影響で、数値計算とかは型を明示しない同等のLISPコード
よりは効率的になる。
ただし見る限りvectorとかのコンテナはいままで通り型無し。
コンテナにアクセスする度にタグの付け外しが必要。
3)の意味はあんまり無さそう。気分の問題?
理由を聞いても多分適当なコジツケを聞かされるだけだろう。
4)のmacroが無いのははっきりいって退化。
5)つまりデータ=コードではなくなったという事か?

発想が俺と同レベルだよ・・・MITの奴等(;´д`)

601 :デフォルトの名無しさん:03/05/29 22:01
サブセットどころかサブサブサブセットぐらい?

602 :デフォルトの名無しさん:03/05/30 03:31
Linux kernelにSchemeを組み込み
http://slashdot.jp/linuxkernel/03/04/29/0742257.shtml?topic=2

603 :デフォルトの名無しさん:03/05/30 06:03
>>600
重要なのは言語じゃないだろ

604 :デフォルトの名無しさん:03/05/30 17:48
何が重要なんだろう・・・

605 :デフォルトの名無しさん:03/05/30 17:50
ライブラリ

606 :デフォルトの名無しさん:03/05/30 17:56
ちなみにmacroを見つけた。
macros.curlというファイル。
結局リスト処理は健在だった。

607 :デフォルトの名無しさん:03/05/30 23:15
実はLISPの方言だという事を必死に隠してる様に大笑い
MITのやつらもたいしたことないな


608 :デフォルトの名無しさん:03/05/31 13:49
>>417
逝ってきて、謎が2つ残りました。

あのみかんみたいなのは、どうやって使うんだろう。
perlの人、なにがしたかったんだろう?

609 :デフォルトの名無しさん:03/05/31 18:36
LispはProgrammable Programming Languageと言われ,
問題領域に合わせた言語を作ってしまい,それを用いて問題を解くそうですが,
作った言語はLispと同じくS式で書かれているのですよね?

ライブラリとは何が違うのでしょうか?
マクロも用いて新たな構文を作ったりするとそれはもう別言語であるということ?
自分で作ってみないとわかんないなぁ….イメージしやすい簡単な事例をキボンヌ

610 :デフォルトの名無しさん:03/05/31 19:24
>>609
> ライブラリとは何が違うのでしょうか?

構文が変る。

C言語でLispのインタプリタを書いた。
このLispのインタプリタはC言語のライブラリか? 新たに出来た言語処理系か?

> イメージしやすい簡単な事例をキボンヌ

TCL->Scheme
http://www.colorstudy.com/static/ianb/old/tcl-scheme/
REDUCEの記号モード
http://www.kudpc.kyoto-u.ac.jp/Service/Application/REDUCE/reduce3.7/node250.html

611 :デフォルトの名無しさん:03/06/01 04:31
Gauche release 0.7

612 :デフォルトの名無しさん:03/06/01 07:37
elispを読み書きできるようになりたくてlispを勉強することに
決めました。なんとなく応用がききそうなschemeをチョイスした
んですけどscheme書ければelispは簡単に理解できますかね?
common-lispとどっちにしようか迷ったんですけど。

とりあえず入門SchemeのPDFを読みつつ、rtrsjをたまに見て勉強
してます。あと日本語処理が楽そうなのでGaucheを使ってます。

リストって概念に感銘を受けました。

613 :デフォルトの名無しさん:03/06/01 10:35
>>609

Lisp is a chameleon
http://www.paulgraham.com/chameleon.html


614 :デフォルトの名無しさん:03/06/01 15:35
mapcar

615 :デフォルトの名無しさん:03/06/01 20:47
WiLiKiに書き込む時に使う言葉も新たな言語と考えてOK?

616 :デフォルトの名無しさん:03/06/02 00:18
どなたかカレンダーの作り方を教えてください
お願いしますm(_ _)m

617 :デフォルトの名無しさん:03/06/02 00:31
>>616
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&c2coff=1&q=%83J%83%8C%83%93%83_%81%5B%82%CC%8D%EC%82%E8%95%FB&lr=

618 :デフォルトの名無しさん:03/06/02 23:24
schemeで、関数のevalを末尾に置いた場合は、
それも末尾再帰するんでしょうか?

619 :デフォルトの名無しさん:03/06/03 00:17
>>618
eval の最後も末尾扱いだったはず
R5RSに書いてある

620 :デフォルトの名無しさん:03/06/04 17:52
ほんとだった。
隙がないなあ。

621 :デフォルトの名無しさん:03/06/06 19:26
Lisp ってどんなとこで使われてるんですか? Web とかと相性良さそうだけど,
なんか具体例キボンヌ.

622 :デフォルトの名無しさん:03/06/06 21:26
>>621
Yahoo Store

623 :デフォルトの名無しさん:03/06/07 14:04
Lispで3Dグラフィックを扱う手段ってあるのでしょうか
OpenGLインターフェイスを備えた処理系とか.

624 :デフォルトの名無しさん:03/06/07 14:45
>>623
gauche

625 :デフォルトの名無しさん:03/06/07 15:21
UNIX USER 発売日。

626 :デフォルトの名無しさん:03/06/07 15:31
>>623
CL-SDL

627 :デフォルトの名無しさん:03/06/07 16:10
shiroたんが書いたのね

628 :デフォルトの名無しさん:03/06/07 16:31
>>622 それはすでに過去の話では…今は C++ なんじゃなかったっけ?

629 :デフォルトの名無しさん:03/06/07 17:02
>>628
もしそれが本当だとしたら運営者の頭がおかしくなったとしか考えられない

630 :デフォルトの名無しさん:03/06/07 18:11
phpに切り替えた、と効いたが

631 :デフォルトの名無しさん:03/06/07 18:17
悪貨は良貨を駆逐する。

632 :デフォルトの名無しさん:03/06/07 18:41
>>628
PHPのはず。

633 :デフォルトの名無しさん:03/06/07 18:47
ますます頭がおかしいとしか。

634 :デフォルトの名無しさん:03/06/07 19:06
phpで幸せになれたんなら、それでいいじゃない。

635 :デフォルトの名無しさん:03/06/07 19:19
システムのコアと、そこにアクセスする表層部分を混同するなよ。

636 :フォルトの名無しさん:03/06/07 19:43
今月のUNIX USERに載ってる記事どうでしたか?

637 :デフォルトの名無しさん:03/06/07 20:19
>>623
CMUCL, SBCL, GCL, Allegro, MCL 用の OpenGL インターフェースはある。

638 :デフォルトの名無しさん:03/06/07 21:09
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Shiro%3aUnixUser0307&l=jp

639 :デフォルトの名無しさん:03/06/07 22:04
gauche用のopenglモジュールはcygwinじゃできないそうですが、
できるようにするのは結構大変なんですかね?

640 :デフォルトの名無しさん:03/06/07 22:46
>>639
cygwinでopengl動けばできるとおもうけど。
作りもFFIで関数呼ぶ程度でしょ。
関係ないけど、おれconfigure嫌いなんだよね。
移植しずらくない?shその他諸々動く環境前提ってのが駄目すぎる。

641 :デフォルトの名無しさん:03/06/07 23:10
>>640
そういうのを吸収するのが auto〜 なんだが
それに最低限 sh はあるでしょう
sh も無い環境なら他の部分でも色々移植に問題が出てくると思うが

642 :デフォルトの名無しさん:03/06/07 23:12
>>640
そうか? configure 動かない環境なんて、素の Windows くらいだろ。

643 :デフォルトの名無しさん:03/06/07 23:14
そのwindowsに移植しようとしてる連中が実際困ってたみたいだが。
(shiroさんのWLikiのサイト)

644 :デフォルトの名無しさん:03/06/07 23:14
configureのチェック結果をきちんと使っていないプロジェクト多すぎ

645 :デフォルトの名無しさん:03/06/07 23:17
configureで変化する変数とかの一覧出力ってできないの?
その一覧を元に手動で設定するとか、
そういう手段があるなら教えてくれ。
そっちの方が早い。

646 :デフォルトの名無しさん:03/06/07 23:26
そうやってみんな、だいなしにしちゃうんだ!

647 :デフォルトの名無しさん:03/06/08 00:00
>>643
じゃあ Windows なんか使わなきゃいいじゃん。バッカじゃないの?

648 :デフォルトの名無しさん:03/06/08 00:22
>>647
おまえ、頭膿んでるだろ

649 :デフォルトの名無しさん:03/06/08 01:58
>>648
はぁ?本気で言ってんのかよ?
そこまで苦労して Windows 使いたいなんて、おまえの方が頭膿んでるだろ。

650 :デフォルトの名無しさん:03/06/08 02:15
で、結局バカの一言で終わりなの?
都合が悪いとバカ扱いですか。そうですか。

651 :デフォルトの名無しさん:03/06/08 04:19
やーいやーい、バーカバーカ

652 :デフォルトの名無しさん:03/06/08 04:36
まったり逝こうぜ

653 :623:03/06/08 11:06
>>624 >>626 >>637
情報ありがとうございます。
とりあえずgauche-glを試そうかと思ったらcygwinではだめだとか。
Windowsを常用しているのでcygwin+gaucheでいけるといちばんありがたかったのですが・・・。
というわけでLinuxで試してみます。

654 :デフォルトの名無しさん:03/06/08 14:12
>>645
config.statusでしょ。

>>640は馬鹿だと思うが


655 :デフォルトの名無しさん:03/06/08 16:43
gauche-sdlからopenglつかえるかな?と思って、makeしようとしたけど、
コンパイルできませんでした。
これもgauch-glの下の制限と同じ理由からなんでしょうか?
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aCygwin&l=jp

こんなエラーがでてきます。
gauche-sdl.c:56: initializer element is not constant
gauche-sdl.c:56: (near initialization for `Scm_SdlRectClass.cpa')
以下似たようなエラーがずらずら・・・

656 :デフォルトの名無しさん:03/06/08 17:00
うーん,Lisp だった頃の Yahoo Store ってどんな感じで動いてたんでしょう?
Web サーバーまで Lisp 製?それとも Apache とかと連携してたのかなぁ?

657 :デフォルトの名無しさん:03/06/08 18:28
知りません

658 :デフォルトの名無しさん:03/06/08 18:32
>>632
phpになったって事は、退化してるわけだよね。
考えられない。
もしかして拡張子だけで判断してるんじゃ・・?

659 :デフォルトの名無しさん:03/06/08 18:36
使用スクリプト言語をYahoo独自のものからPHPに変えると発表した。
あくまでもスクリプト言語をね。

660 :デフォルトの名無しさん:03/06/08 19:29
だからコアと、とインターフェースを混同すんなっつの

661 :デフォルトの名無しさん:03/06/10 04:18
windows2000上で日本語&GUIがあつかえるフリーなLisp scheme処理系ありませんか?


662 :デフォルトの名無しさん:03/06/10 18:42
cygwinのgaucheてgtk使えないの?

663 :デフォルトの名無しさん:03/06/10 20:15
>>662
ttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?p=Gauche%3aCygwin&l=jp#0

664 :デフォルトの名無しさん:03/06/10 22:18
>>660 コアは Lisp だという事ですか?
とりあえず mod_lisp で遊んでみようっと。

665 :デフォルトの名無しさん:03/06/10 23:04
>>664
おまいさんがデータベースを用いたシステムを構築するとして、
データベースシステムそのものを php で書くか?
つまり、そういうことだよ。

666 :入門者:03/06/12 01:37
http://www.dynamiclearningcenter.com/exercises/create-string-spec.html
にある問題の解答はこんな感じかと思うのですが、上級LISPERの方にもっと他の
書き方があるぞとかここがよくないとかご指摘いただけるとうれしいです。なんか
先生とかじゃないと解答のページへアクセスできないようなので。
formatを呼んでるところの違いがtとnilだけなのがどうにかならないかなとは
思うのですが。

(defun create-string (str1 str2 str3 &key (to 'result))
 (cond ((eq to 'result)
     (format nil "~a~a~a" str1 str2 str3))
    ((eq to 'print)
     (format t "~a~a~a" str1 str2 str3))
    (t
     (error "invalid argument to keyword :to"))))

667 :デフォルトの名無しさん:03/06/12 02:08
>>666
Commno Lisp の環境がないのであてずっぽうで。

(defun create-string (str1 str2 str3 &key (to 'result))
  ((or (and (eq to 'result) identity)
       (and (eq to 'print) print)
       (error "invalid argument to keyword :to"))
   ((format nil "~a~a~a" str1 str2 str3))))

CL って値と関数の name space 別々だったっけ?
だとしたら多分駄目カモ

668 :デフォルトの名無しさん:03/06/12 02:11
あ、思い出した。
apply かませばいいんだっけか?

あれ、apply は elisp だったか?いかん、混乱してきた

669 :デフォルトの名無しさん:03/06/12 03:15
formatの第1引数に式を埋めこむとか.

(defun create-string (str1 str2 str3 &key (to 'result))
(format (case to
('result nil)
('print t)
(otherwise (error "invalid argument to keyword :to")))
"~A~A~A" str1 str2 str3))


670 :デフォルトの名無しさん:03/06/12 03:28
>>666
こんなんでどう? case 使ってみた。
(defun create-string (str1 str2 str3 &key (to 'result))
 (format (case to
      ((result) nil)
      ((print) t)
      (t (error "invalid argument to keyword :to")))
     "~a~a~a" str1 str2 str3))


671 :670:03/06/12 03:29
あ、かぶった、ごめん

672 :670:03/06/12 03:35
つうか、format よりも (concatenate 'string str1 str2 str3) のがよさげだな。

673 :デフォルトの名無しさん:03/06/12 07:31
いろいろ考えるのは楽しいが、>>666が素直。


674 :デフォルトの名無しさん:03/06/12 10:12
素直ではあるがスマートではない

675 :デフォルトの名無しさん:03/06/12 10:53
(defun create-string (str1 str2 str3 &key (to 'result))
 (cond ((eq to 'result)
     (format nil "~a~a~a" str1 str2 str3))
    ((eq to 'print)
     (format t (create-string str1 str2 str3)))
    (t
     (error "invalid argument to keyword :to"))))

676 :デフォルトの名無しさん:03/06/12 11:54
;; 漏れならこーだな.
(defun create-string (s1 s2 s3 &key (to 'result))
(let ((s (concatenate 'string s1 s2 s3)))
(case to
('result s)
('print (format t s))
(otherwise (error "invalid argument to keyword :to")))))


677 :デフォルトの名無しさん:03/06/12 12:33
(create-string "~a" "~a" "~a" :to 'print)
は大丈夫なの?

678 :デフォルトの名無しさん:03/06/12 13:55
しまった.(format t "~A" s) としなきゃダメですね….

679 :デフォルトの名無しさん:03/06/12 14:07
display みたいなのないの?

printのときにくっつけた文字列は必要なのかな。
(for-each display (list str1 str2 str3))
みたいなのどうかな。

680 :デフォルトの名無しさん:03/06/12 15:31
Common Lisp 的には (mapcar #'princ (list s1 s2 s3)) とか.
でも文字列を連結するのが題意なんでないの?

681 :デフォルトの名無しさん:03/06/12 17:44
(define (puts . x)(for-each display x)(newline))
(define (display* . x)(for-each display x))


682 :入門者=666:03/06/12 23:04
ども、いろんな例を提示していただいてとても勉強になります。
669,670のおかげでcaseマクロの使い方なんとなくわかりました。サンキューです。
674の言うようにLISPでのスマートな記述が自然にできるようになるにはやっぱり
経験積むしかないんでしょうね。676の書き方は正直、気が付かなかったです。カコイイ。
すかさず突っ込みを入れられる677もすごいなぁと思ったです。

このスレに来てる人達が賢いのか、それとも賢くないとLISP使いこなせないのか。
僕は"Beating the averages"読んで片手間にCommon Lispの勉強始めたばかりなんで
まだまだわからないことがいっぱいです。どれくらい経験積むと不自由なくLISP使える
ようになるんですかねぇ・・・cltl2(洋書)で購入したものの、正直その分厚さに圧倒されてます。

683 :デフォルトの名無しさん:03/06/12 23:08
cltl2は入門者が読むものじゃないでしょ。
ANSI Common Lispにしといたら?

684 :デフォルトの名無しさん:03/06/12 23:21
>>682
Common Lisp は仕様がでかいからね。使いこなせるようになるまでに、ある程
度経験はいると思う。自分で、しこしこ作った関数が CLtL2 でもともとあっ
た、なんてのはよくこと。勉強するだけなら Scheme がいいのでは?

685 :デフォルトの名無しさん:03/06/12 23:33
今なら cltl2 よりも HyperSpec のが良い。
>>684 別に Common Lisp から入ってもいいんじゃないかなぁ。漏れが
Common Lisp 派だからかもしれないけど、自作関数とかぶったら実装と
比較して勉強にもなるから無駄にはならんと思う。

686 :デフォルトの名無しさん:03/06/12 23:36
schemeは勉強用であって実用には使えないですか?

687 :デフォルトの名無しさん:03/06/12 23:41
実用にも使えるんじゃない?

688 :デフォルトの名無しさん:03/06/13 00:09
Common Lisp も Scheme も両方使ってます。使い分けは
cmucl: OpenGL とか
gauche: 日本語とかネットワークとか

689 :デフォルトの名無しさん:03/06/13 03:12
以前はcommon lisp使ってたけど、
gaucheが日本語使えるので、
すべてこっちに移行中


690 :デフォルトの名無しさん:03/06/13 20:48
LISPって速いな。
試しにcmucl動かしたらなんかえらい速かった。

691 :デフォルトの名無しさん:03/06/13 23:33
そうそう、大したもんだよなー。simple stream とか standalone executable
生成とか開発も活発で期待アゲ。これで国際化してくれたら文句無しだが…漏れ
がへたれじゃなかったら自分でがんがるんだが。

692 :デフォルトの名無しさん:03/06/14 05:48
仕事は ACL、趣味は Gauche でやってまつ。サポートとかを考えると、仕事で
Gauche 使うのはちょっと勇気がいります。

693 :デフォルトの名無しさん:03/06/14 07:21
lispで仕事してるなんてうらやましいですな。
周りにlisp使える人がいないので、lispを使おうと提案しても
却下されてしまう(´Д⊂グスン

694 :デフォルトの名無しさん:03/06/14 09:37
独 立 し る

俺は、もうそうせざるを得ない状況(ry

695 :デフォルトの名無しさん:03/06/14 11:05
ACL以外でWindowsのGUIが使えるLispってありますか?

696 :デフォルトの名無しさん:03/06/14 12:25
Windows版のACLで使えるOpenGLインターフェイスを探してみたところ
http://www4.ncsu.edu/~moriedl/software/body.html
くらいしか見つかりませんでした。
現在のACLのバージョンが6.2なのにこのライブラリはバージョン5用に作ったと書いてあります.
試しにalisp.exeでサンプルプログラムを動かしてみたところ,きちんと画面は表示されたのですが,ウィンドウを閉じたあとトップレベルが入力を受け付けない状態になってしまいます.
これは仕方のないことなのでしょうか。そうだとしたらとても不便だ。
だれかこの辺の事情について何かご存知ないでしょうか。

また,他のOpenGLインターフェイスの情報があれば教えてください。
お願いします。

697 :デフォルトの名無しさん:03/06/14 19:07
>>696 windows は良く知らないが、 http://cl-sdl.sourceforge.net/ とかどう?

698 :デフォルトの名無しさん:03/06/14 19:14
>>695 GCL から ttp://www.japi.de/ 使えるとかいうメール
を comp.lang.lisp で見かけたような気がする。調べてみては?

699 :デフォルトの名無しさん:03/06/15 12:19
ちょっとわらった。CPU time で 10 秒しかつかえんけど。
% telnet prompt.franz.com

700 :デフォルトの名無しさん:03/06/15 15:21
よし、その先を目指せ

701 :入門者=666:03/06/15 16:39
Dynamic Learning Centerの続きです。何のヒネリもないつまらない解答しか思い浮かばない
のですが、こんなもんなんでしょうか。

(defun double-number (n)
 (typecase n
  (number (+ n n))
  (t (error "argument is not a number"))))

(defun hours-in-1999 ()
 (* 365     ; days in 1999
   24))    ; hours per day

(defun is-a-list? (arg)
 (typecase arg
  (null 'empty-list)
  (list 'list)
  (otherwise 'something-else)))

>> 683
ANSI Common LispってPaul Grahamのですよね? これも一応購入してちょっとづつですが
読んではいます。On Lispみたく製本された状態で入手できなくなるのがイヤなので気になった
本は片っ端から購入してあります(汗
Stephen SladeのObject-Oriented Common LispとかSonya E. KeeneのObject-Oriented
Programming in Common Lisp: A Programmer's Guide to CLOSとかもありますが
最初に読破すべきはやっぱりANSI Common Lispですか?

702 :デフォルトの名無しさん:03/06/15 17:39
ちょっと古いけどこれもいい本なんじゃないかと思われる。
http://www.amazon.co.jp/exec/obidos/ASIN/0201083191/qid%3D1055665073/249-2969182-6032346
前半が文法の説明で後半がサンプルという構成です。
サンプルがAI的なものばかりで「Lisp=人工知能用言語」という偏見に寄与しそうな気もしますが。

703 :デフォルトの名無しさん:03/06/15 19:13
>>699
なにこれ?
トライアル版を公開してなんか意味があるんか。。

|WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|WARNING: Allegro CL will expire in 35 days.
|WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|International Allegro CL Trial Edition
|6.2 [Linux (x86)] (May 21, 2003 12:21)
|Copyright (C) 1985-2002, Franz Inc., Berkeley, CA, USA. All Rights Reserved.
|
|This development copy of Allegro CL is licensed to:
| Ahmon Dancy, Franz Inc.
|
|;; Optimization settings: safety 1, space 1, speed 1, debug 2.
|;; For a complete description of all compiler switches given the
|;; current optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).
|CL-USER(1):


704 :デフォルトの名無しさん:03/06/15 21:51
>>698
Java+JNIを使ったGUIキットでつか?

705 :デフォルトの名無しさん:03/06/15 22:10
UU 誌の Gauche の特集で .emacs の設定例が書かれていましたが
Web 上で見られるところありませんか?


706 :デフォルトの名無しさん:03/06/15 23:01
emacsにモジュール化の計画はないのかな…

707 :デフォルトの名無しさん:03/06/15 23:06
>>706 elisp は使いにくいyo!

708 :デフォルトの名無しさん:03/06/16 09:01
>>705
これでいんじゃないの? M-x run-scheme
(setq scheme-program-name "/usr/local/bin/gosh -i")
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process. " t)

709 :デフォルトの名無しさん:03/06/16 10:00
>>706 もうちょっと具体的に教えて。


710 :デフォルトの名無しさん:03/06/16 10:55
>>709
UU 誌買えよ。

711 :デフォルトの名無しさん:03/06/16 17:53
会社の乖離道にUU売ってる本屋がない

712 :デフォルトの名無しさん:03/06/16 23:03
>701 まぁ、そんなもんだろうな… easy だけあって簡単だ。

713 :デフォルトの名無しさん:03/06/16 23:12
Common Lisper の .emacs キボンヌ!

714 :デフォルトの名無しさん:03/06/17 01:17
>>713
(add-to-list 'load-path "~/elisp/emacs-guile-0.2")
(require 'guile-scheme)
(setq initial-major-mode 'scheme-interaction-mode)
*scratch* が Scheme。あ、Common Lisp じゃないや。

715 :入門者=666:03/06/17 01:57
>>702
了解。amazonに速攻で発注してみました。

>>712
どもです。残る問題を順次片付けていくです。

716 :デフォルトの名無しさん:03/06/17 03:09
>>701
つまらない解答っていうより問題の方がつまらない。
再帰をさせる問題の方がLispができるようになると思うんだけど。

717 :デフォルトの名無しさん:03/06/17 13:35
>>713
ふつー ilisp 使うだろ。ぐぐってみれ。

718 :デフォルトの名無しさん:03/06/18 18:09
LISP覚えるって事は、やっぱりemacs使わないとだめなんでしょうか?

719 :デフォルトの名無しさん:03/06/18 18:11
普通のエディタでやれるよ。

720 :718:03/06/18 18:23
使用エディタがWZでもLISP使いを名乗っていいですか?

721 :デフォルトの名無しさん:03/06/18 18:49
でも、emacs の支援機能はあったほうが快適。S 式単位の編集機能、ilisp に
よる lisp 処理系との連携とか、関数にカーソル合わせて CLHS を一発で引くとか。
あるのと無いのでは大違いだと思う。

722 :718:03/06/18 18:56
じゃ、だめなんですね?

723 :デフォルトの名無しさん:03/06/18 19:49
>>722
あなたの場合はだめです。

724 :デフォルトの名無しさん:03/06/18 23:14
質問です。
Schemeの勉強がてら、Javaで書いたプログラムをGaucheに
移植しようとしているのですが、UDPによる受信のところでつまづいています。
(use gauche.net)
(define (main arg)
(let ((socket (make-socket |PF_INET| |SOCK_DGRAM|))
(address (make <sockaddr-in> :host "127.0.0.1" :port 8080)))
(socket-bind socket address)
(let ((in (socket-input-port socket)))
(display "Waiting...\n")
(let ((line (read-line in)))
(display "Received.\n")
(display line)))
(socket-close socket)))
(read-line in)のところでブロックされた後、該当ポートにパケットを
送信しても制御が帰ってきません。ちなみに送信側は次のコードです。
送信できてることは受信側をJavaで作って確かめることができました。
(use gauche.net)
(define (main arg)
(let ((socket (make-socket |PF_INET| |SOCK_DGRAM|))
(address (make <sockaddr-in> :host "127.0.0.1" :port 8080)))
(socket-connect socket address)
(let ((out (socket-output-port socket)))
(display "Sending...\n")
(display "Hello\n" out)
(display "Done.\n"))
(socket-close socket)))

どこが間違ってるんでしょうか?
環境:Windows2000,Cygwin

725 :デフォルトの名無しさん:03/06/19 01:56
ttp://www.ravenbrook.com/doc/2003/05/28/contest/
2ちゃんねら〜の総力を結集して入賞を目指してみないかとか書いてみるテスト。

726 :デフォルトの名無しさん:03/06/19 07:09
>>724
バッファリングされてんじゃない

と、よく読まずに(ry)

727 :デフォルトの名無しさん:03/06/20 03:58
>>724
TCP ならいけるの?
本題とは関係ないが、socket-close とかは unwind-protect しとくのが無難。
Scheme なら dynamic-wind かな?

728 :デフォルトの名無しさん:03/06/20 09:00
a

729 :724:03/06/20 09:09
(read-line in)のところを(read-block 65516 in)のように変更すると、
とりあえず、受信できました。UDPではread-lineは使えないんですかね。

>> 727
TCPだと問題ないです。


730 :デフォルトの名無しさん:03/06/21 01:43
>>729
gauche.netのAPI自体良く知らないんだけど、
UDPは、当然buffering I/Oじゃないでしょ。
行単位の読み込みは、buffering I/Oとしか馴染まないもんね。

PF_INETの言葉で言えば、stream通信じゃなくてdatagram通信。

731 :デフォルトの名無しさん:03/06/23 11:41
>>724>>727
gauche なら、call-with-client-socket とかの方がよいカモ

732 :デフォルトの名無しさん:03/06/23 12:40
それってTCPしか使えないような...

733 :デフォルトの名無しさん:03/06/24 09:11
お前らかっこつけすぎ

734 :デフォルトの名無しさん:03/06/24 21:59
リストと引数が2の述語を受け取って
述語が真になるグループに分ける手続きってどう書けばいいんですかね。

> (hoge = '(1 1 1 2 2 3 3))
((1 1 1) (2 2) (3 3))

(define (hoge f a)
 (let loop ((r '()) (a a))
  (if (null? a) (reverse r)
    (loop (cons (filter (lambda (x) (f (car a) x)) a) r)
       (filter (lambda (x) (not (f (car a) x))) (cdr a))))))
これだと何度もフィルターにかけるので遅くて・・・。

735 :デフォルトの名無しさん:03/06/24 23:44
仕様がよくわからんが
(hoge < '(1 3 2 4)) だったら ((1 3) (2 4)) となるのか?
((1 2 4) (3)) ってのもありな感じがするが。

736 :Common Lisp 見習い:03/06/24 23:47
ANSI Common Lisp を趣味で読んでる見習いです.

(defun hoge (fn lst &optional acc)
(labels ((f (x lst rest result)
(if (null lst)
(values (nreverse rest) (cons x result))
(if (funcall fn x (car lst))
(f x (cdr lst) rest (cons (car lst) result))
(f x (cdr lst) (cons (car lst) rest) result)))))
(if (null lst)
(nreverse acc)
(multiple-value-bind (rest result)
(f (car lst) (cdr lst) nil nil)
(hoge fn rest (cons result acc))))))

とか考えてみましたが,まだ Scheme では書けません….

737 :736:03/06/24 23:50
>>735 げぇ,そういえば.モウダメポ

738 :734:03/06/25 00:53
>>735
=とかequal?とかの等しいかどうかを判定する述語を想定していたので、
<とかは考えてませんでした。
汎用性ないですかね。

739 :デフォルトの名無しさん:03/06/25 10:32
Scheme で複数のファイルに対して call-with-input-file する場合、

(call-with-input-file file1
 (lambda (p1)
  (call-with-input-file file2
   (lambda (p2)

みたいに書くとか、そう展開されるマクロを書くしかないですか?


740 :デフォルトの名無しさん:03/06/25 11:57
リストを返すようにして、そのリストを処理する手続きをつくるとか。
(hoge (call-with-input-file file1 (lambda (p1) ...)
(call-with-input-file file2 (lambda (p2) ...))

741 :デフォルトの名無しさん:03/06/25 19:06
>>739
continuation の呼びだしある場合、これではまずいかもしれない。
(define (call-with-multiple-input-file files proc)
(let ((ports '()))
(dynamic-wind
(lambda () (set! ports (map open-input-file files)))
(lambda () (apply proc ports))
(lambda () (map close-input-port ports)))))

742 :デフォルトの名無しさん:03/06/25 19:16
(let ((p1 (open-input-file file1)) (p2 (open-input-file file2)))
...
(close-input-port p1) (close-input-port p2))

743 :順調に下がってまいりました:03/06/26 00:48
ttp://freesw.onshored.com/wwwdist/imho/
にあるIMHOをOpenBSD3.3/i386で使いたいと思いOpenBSDにデフォルトで
入っているApacheにmod_webappを組み込むとapachectl startで必ず
Duplicate connectionと文句を言われてApacheが起動できません。
ググってもそれらしい情報見つけ出せないで困っているんですが、どなたか
IMHOの動作に成功した方いらっしゃいます?CMUCLのリリースは18eです。

744 :デフォルトの名無しさん:03/06/26 10:53
IMHO CMUCL で検索すると FreeBSD + CMUCL 18e で動かしてるって人のページ
がひっかかるのだが…

745 :743:03/06/26 22:53
「よろずや」って謎のタイトルのついてるページですよね? >>744
そこを見てFreeBSDでいけるんならOpenBSDでもいけるっしょ、くらいの軽いノリで
突っ込んでみたんですけどうまくいかないんですよねぇ・・・

そもそもがDebian GNU/Linux向けに開発,パッケージ化されているようなので
感触としてはOpenBSD3.3/i386のApacheとIMHOと一緒に配布されているmod_webappの
仕様の整合性が取れてないっぽいです。jakartaプロジェクトからmod_webappのソース
取って来ても似たような状況だったのでLISPの問題じゃないと思います。スレ汚しスマソ。

便乗質問になりますがCMUCLでPortable Aserve運用してる方、もしいらしたら
使用感(特にパフォーマンス)どんな感じか教えていただけますか? comp.lang.lispとか
./見てると「遅くて使いもんになら〜ん」という趣旨の投稿を見かけたので。

746 :デフォルトの名無しさん:03/06/27 02:35
そのサイトに昔PortableAserve+cmucl遅いってネタがあったぞ。で mod_lisp ウマーって話だった

747 :734:03/06/27 17:15
734です。あのあと何度か改良をして
filterのかわりに条件を満たすものと満たさないものを
一緒にして返す手続きで置き換えたり、
=のような述語を受け取るのをやめて
リストの要素を数値化する手続きを受け取るようにして
ソートすることにしたり、
他のところを見なおして数値リスト限定でグループ分けをするようにしたりして、
最終的にはグループ分けの手続きを使わずに
ソートした数値リストを直接処理するようにしました。

C言語版と同じようになってしまい、
Lispらしさのかけらもないコードに・・・。

748 :デフォルトの名無しさん:03/06/27 18:16
(defun hoge (fn lst)
(loop with acc = nil
with rest = nil
for e in (cdr lst)
if (funcall fn (car lst) e) do (push e acc)
else do (push e rest)
finally (return (value acc rest))))
Common Lisp 使ってるみなさん,loop って好きですか?自分はイマイチ….

749 :デフォルトの名無しさん:03/06/27 18:29
>>748
734の問題か?
Common Lisp知らないのであれなんだが、(car lst)は入るの?
(特にloopを知らない。名前付letみたいなもん?)
(hoge '= '(1 1 1 2 2 3 3))だと
((1 1) (2 2 3 3))にならない?

750 :デフォルトの名無しさん:03/06/27 19:06
そういやそうですね.お恥ずかしい.覚えたての loop が使ってみたかっただけだっ
たのです.まだ良くわかってないですが,使いドコロによっては便利な予感なのですが.


751 :734:03/06/27 19:33
参考までに私の改良を。
条件を満たすものと満たさないものを両方返す手続きで
2度filterにかける無駄を回避。
748さんのはこのdivideに近いと思います。
(define (divide f a)
 (let loop ((x '()) (y '()) (a a))
  (cond ((null? a) (list (reverse x) (reverse y)))
     ((f (car a)) (loop (cons (car a) x) y (cdr a)))
     (else (loop x (cons (car a) y) (cdr a))))))

(define (hoge f a)
 (let loop ((r '()) (a a))
  (if (null? a) (reverse r)
   (apply (lambda (x y) (loop (cons x r) y))
       (divide (lambda (x) (f (car a) x)) a)))))

752 :734:03/06/27 19:34
hogeを述語のかわりに数値化する手続きを受け取るようにして
数値順にソートすることでdivideがすぐに処理を打ち切れるようにした。
Lispの昔の本でリストを集合として扱う時に
ソートすると便利だという話を思い出したり。
(define (divide f a)
 (let loop ((x '()) (a a))
  (if (or (null? a) (not (f (car a)))) (list (reverse x) a)
    (loop (cons (car a) x) (cdr a)))))

(define (hoge f a)
 (let loop ((r '()) (a (sort a (lambda x (apply < (map f x))))))
  (if (null? a) (reverse r)
   (apply (lambda (x y) (loop (cons x r) y))
       (divide (lambda (x) (= (f (car a)) (f x))) a)))))
今見るとdivideもこのロジックだと
述語のかわりに数値化する手続きを受け取らせたほうがきれいかな。

753 :734:03/06/27 19:34
数値化する手続きをソートで適用しまくるのはやっぱり遅いので
プログラム全体を見直し、数値化したリストだけを処理することにして
そのあとで数値化する前のリストを処理することに。
同じ数値が一つか二つしかないことが多いので
divideを取り込んで、手続き呼び出しの無駄を省いた。
(define (hoge a)
 (let loop ((r '()) (x '()) (a (sort a <)))
  (cond ((null? a) (reverse (if (null? x) r (cons (reverse x) r))))
     ((or (null? x) (= (car a) (car x)))
      (loop r (cons (car a) x) (cdr a)))
     (else (loop (cons (reverse x) r) '() a)))))
返ってくるリストにfor-eachでlengthをあてて使ってるだけになったので
この手続き自体も使わないことにした。

754 :デフォルトの名無しさん:03/06/27 20:21
なるほど,こーやって開発してくのかー.ためになります.

755 :デフォルトの名無しさん:03/06/28 06:26
>>751
SRFI-1にpartitionていうのがあるよ
あらかじめソートしてあって、途中で探索を打ち切れるなら span が使える。


756 :デフォルトの名無しさん:03/06/28 22:43
'((a b c) (d e f) (g h i))
というリストを要素毎に組み合わせて、
=>
((a d g) (a d h) (a d i)
(a e g) (a e h) (a e i)
(a f g) (a f h) (a f i)

(b d g) (b d h) (b d i)
(b e g) (b e h) (b e i)
(b f g) (b f h) (b f i)

(c d g) (c d h) (c d i)
(c e g) (c e h) (c e i)
(c f g) (c f h) (c f i))
というパターンのリストを作りたいんですが、
どうやればいいでしょうか?
こういう所でmapという関数を使うのかな。

757 :デフォルトの名無しさん:03/06/28 23:08
あ、解決しました・・・。
(define (test s)
(apply append
(map
(lambda (x)
(apply append
(map
(lambda (y)
(map (lambda(z) (list x y z))
(caddr s)))
(cadr s))))
(car s))))

(test '((a b c) (d e f) (g h i)))
=>((a d g) (a d h) (a d i)
(a e g) (a e h) (a e i)
(a f g) (a f h) (a f i)
(b d g) (b d h) (b d i)
(b e g) (b e h) (b e i)
(b f g) (b f h) (b f i)
(c d g) (c d h) (c d i)
(c e g) (c e h) (c e i)
(c f g) (c f h) (c f i))

758 :デフォルトの名無しさん:03/06/28 23:13
list-of マクロとかがいいかも。
(list-of (list x y z) (x in '(a b c)) (y in '(d e f)) (z in '(g h i))

scheme 版:
ttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?p=Scheme%3a%a5%de%a5%af%a5%ed%a4%ce%b8%fa%cd%d1&l=jp#9
Common Lisp 版:
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0009

759 :デフォルトの名無しさん:03/06/28 23:18
>>757
もうちょっと一般化して、
(define (test s)
 (let loop ((r '()) (s s))
  (if (and (pair? s) (pair? (cdr s)))
   (apply append
    (map
     (lambda (x) (loop (cons x r) (cdr s)))
     (car s)))
   (if (pair? s)
    (map (lambda(z) (reverse (cons z r))) (car s))
    s))))

>(test '((a b c ) (d e f) (g h i) (j k l)))
=>((a d g j) (a d g k) (a d g l) (a d h j) (a d h k) (a d h l) (a d i j) (a d i
k) (a d i l) (a e g j) (a e g k) (a e g l) (a e h j) (a e h k) (a e h l) (a e i
j) (a e i k) (a e i l) (a f g j) (a f g k) (a f g l) (a f h j) (a f h k) (a f h
l) (a f i j) (a f i k) (a f i l) (b d g j) (b d g k) (b d g l) (b d h j) (b d h
k) (b d h l) (b d i j) (b d i k) (b d i l) (b e g j) (b e g k) (b e g l) (b e h
j) (b e h k) (b e h l) (b e i j) (b e i k) (b e i l) (b f g j) (b f g k) (b f g
l) (b f h j) (b f h k) (b f h l) (b f i j) (b f i k) (b f i l) (c d g j) (c d g
k) (c d g l) (c d h j) (c d h k) (c d h l) (c d i j) (c d i k) (c d i l) (c e g
j) (c e g k) (c e g l) (c e h j) (c e h k) (c e h l) (c e i j) (c e i k) (c e i
l) (c f g j) (c f g k) (c f g l) (c f h j) (c f h k) (c f h l) (c f i j) (c f i
k) (c f i l))
なんてどうかな。

760 :デフォルトの名無しさん:03/06/29 00:03
むむ、考えているうちに先を越された。
(define (combination ls)
(if (null? ls)
'(())
(apply append (map (lambda (y)
(map (pa$ cons y)
(combination (cdr ls))))
(car ls)))))

(print
(combination '((a b c) (d e f g) (h i j) (k l))))

-- Haskell版
combination (x:xs) = concat $ map (\y -> (map (y:) (combination xs))) x
combination _ = [[]]

761 :デフォルトの名無しさん:03/06/29 00:25
うーむ、みんな頭いいな。
>>759のrは累積変数というやつだな。
データ構築は再起的でも、繰り返しの応用で記述できるのか。

762 :デフォルトの名無しさん:03/06/29 02:17
759の括弧や1文字のアルファベットは蓮の穴に見える・・・

763 :無名λ式:03/06/29 08:45
関数型言語のZF記法だと、(>>758がLisp版)
[[x y z] | x <- [a b c], y <- [d e f], z <- [g h i]]
だな。>>760はBirdの本の奴と殆んど同じだね。

764 :デフォルトの名無しさん:03/06/29 12:52
gaucheのutil.combinationsにcartesian-productってのがあったよ。

765 :(define (´∀`) 'マターリ):03/06/29 13:33
(define (test s)
 (define (f x y)
  (apply append (map (lambda (a) (map (lambda (b) (cons a b)) y)) x)))
 (fold-right f '(()) s))

766 :デフォルトの名無しさん:03/06/30 03:13
emacs lisp,scheme,common lispを使いこなせるようになりたい
と思ってるんですが、勉強の順番として
scheme => elisp => clisp
で行こうと思ってます。なんか問題ありますか?

767 :デフォルトの名無しさん:03/06/30 03:24
ない

768 :デフォルトの名無しさん:03/06/30 03:29
ただし、綺麗好きには scheme => elisp の段階が嫌になるカモ

769 :デフォルトの名無しさん:03/06/30 04:35
scheme => elisp より scheme => clisp のがいいよ。elisp は言語としては
大したことないし、参考になる綺麗なコードも少ない。ただ、一番ユーザが多い。

770 :デフォルトの名無しさん:03/06/30 04:52
>>767-769
schme => clisp って流れのがいいみたいですね。
問題のelispは他の2言語が分かればすぐマスター出来るような
感じですか?今 入門schmeっていうPDFファイルで勉強してる
んですが。schemeにはdefineだけなのにelispでは def* なる
表現がいっぱいあるみたいですね。

771 :デフォルトの名無しさん:03/06/30 05:34
基本をやっておけば、あとはライブラリの習得程度の違いじゃないかな。
入門schemeは文字コードを変換する2章以降はいらないと思う。
再帰やリスト処理を練習したほうがいい。
基本の手続きや構文を知ってても、組み合わせて使えないと。

772 :デフォルトの名無しさん:03/06/30 11:22
入門Schemeって分りやすい?
自分はつまんなすぎて途中まで読んで嫌になった。
R5RS の方がいい。

http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
個人的に好きなのはここ。


773 :デフォルトの名無しさん:03/06/30 17:02
入門Schemeは分かりやすいのかよく分かりません。。
1章だけ読んでR5RSに移行する予定。

その後ピアソんから出てるプログラミングSchemeか
SICP買ってみようと思ってるんですけど、この2冊
両方やる必要ありますかね?

774 :(define (´∀`) 'マターリ):03/06/30 19:03
(define (test s)
 (let loop ((r '(())) (s (reverse s)) (t '()) (a '()) (b '()))
  (cond ((and (null? s) (null? a)) (reverse r))
     ((null? a) (loop '() (cdr s) (reverse r) (car s) (reverse r)))
     ((null? b) (loop r s t (cdr a) t))
     (else (loop (cons (cons (car a) (car b)) r) s t a (cdr b))))))

775 :デフォルトの名無しさん:03/07/01 01:36
hxxp://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/
根性で全部落としてみた。現在シコシコDVDに焼きこみ中。
DivX版だけでいいかと思いきや音が吹っ飛んでてほとんど講義の内容聞き取れない部分が
あったりするのでMPEG版も必須かと。HDDもDVDも大した値段じゃないしね。管理は面倒だが・・・

776 :デフォルトの名無しさん:03/07/01 18:10
>775
なにこれ?
講義の録画?

777 :デフォルトの名無しさん:03/07/01 18:35
英語聞き取れねぇ・・

778 :デフォルトの名無しさん:03/07/01 18:41
EVERYBODY SAY IT, MASSACHUSETTS!


779 :775:03/07/01 23:43
>776
そ。MITでコンピュータサイエンス専攻する学生は避けて通れないあまりにも有名な
SICPの講義をHPの従業員向けに行ったときの様子だそうな。
ヨソサマのガッコの講義を回線代程度で受講できるなんていい時代になったもんです。

780 :デフォルトの名無しさん:03/07/02 02:11
教科書(SICP)の内容を超えた話をしてるなら見てみたいけど、
デカいね・・。

781 :デフォルトの名無しさん:03/07/02 04:26
http://www.ai.mit.edu/docs/articles/good-news/good-news.html
これ読んだ人いる?

782 :デフォルトの名無しさん:03/07/02 06:35
>>781
93年に書かれたもののようだけど,この内容で10年前のものって
有効期限切れじゃないの?

783 :デフォルトの名無しさん:03/07/02 16:49
>>782
"Worse is better"、「悪い方が良い」原則、というのは
聞いた事があるんじゃないですか。
Lisp界隈では基礎教養と言える文献だと思いまつ。
知ってて損はないかと。
日本語訳もどっかで見た事があるような気がしまつ。




784 :デフォルトの名無しさん:03/07/02 19:27
諸事情でschemeのコードをperlに移植したいんですが、
schemeの階層のあるリストは、perlのデータ型で表現できますか?

あと、linuxで一般的に利用されそうなscheme処理系ってなんでしょうか?
それがわかれば移植する必要は多分無いです。

785 :デフォルトの名無しさん:03/07/02 20:48
libguileをプログラムに組み込んでいます。
load-extensionでDLLを読み込みたいのですが、
MinGW版のguile-1.4では該当する関数がないようなので、
今日あれこれして、guile-1.6.4をMinGWでコンパイルしました。
で、プログラムに組み込んでload-extensionすると落ちちゃいます。

何がわるいのかわかりませんが、extensions.cのload_extensionでおちるんだろうと。
何かわかる人いませんか?

guile-1.4でもDLLがよめたり、load-extensionがつかえるguileのMinGW版が
どこかにあれば問題ないのですが。

どなたかご教授ください。

786 :デフォルトの名無しさん:03/07/02 21:56
>>784
umb-scheme

787 :デフォルトの名無しさん:03/07/02 22:19
perl-lispという微妙なものみつけたんだけど、
これ動くの?
http://search.cpan.org/src/GAAS/perl-lisp-0.05/lib/Lisp/

788 :デフォルトの名無しさん:03/07/02 22:21
信じれば動く

789 :デフォルトの名無しさん:03/07/02 22:48
>>784 gauche がいいと思う。

790 :デフォルトの名無しさん:03/07/02 22:53
両方入れてみて、判りやすそうな方にします。
ありがとうございました。

791 :デフォルトの名無しさん:03/07/02 23:31
umb-scheme って開発終了してるんじゃないの?
ftp.cs.umb.edu なんて名前すら引けないし

792 :デフォルトの名無しさん:03/07/02 23:44
うちのLinuxにはSCM入れているけど。
自分でコンパイルしたのかな。

793 :デフォルトの名無しさん:03/07/03 00:38
>>791
どっちも遅いよ。
用途によりけりだけど。

794 :デフォルトの名無しさん:03/07/03 00:38
>>790

795 :デフォルトの名無しさん:03/07/03 19:57
DBの読み書きをするCGIを作りたいのですが、グイーラーとゴーシュとどちらが向きでしょうか?

796 :デフォルトの名無しさん:03/07/03 20:07
bigloo という手もある

797 :デフォルトの名無しさん:03/07/03 21:04
ちっさいschemeくれ
くれ!

798 :デフォルトの名無しさん:03/07/03 21:12
>>795
グイーラーって知らないのだが、ゴーシュで良いのでは?

>>797
tinyschemeは?


799 :デフォルトの名無しさん:03/07/03 21:26
tinyは試したけど遅かった>797
でもlinuxのカーネルに組み込めるんだよね。
module化しないのかな。

800 :デフォルトの名無しさん:03/07/03 21:28
>>799
tinyCOBOLは?

801 :デフォルトの名無しさん:03/07/03 22:36
COBOL知りません・・

802 :デフォルトの名無しさん:03/07/03 22:38
>>797
biglooってインタプリタあるの?

803 :デフォルトの名無しさん:03/07/03 22:52
グイーラー? guile? ネタ?


804 :デフォルトの名無しさん:03/07/03 23:36
グイーラワラタage

805 :デフォルトの名無しさん:03/07/03 23:57
ゴーシュはWinで使えないみたいだなあ
コンパイルすればCygwinなら使えるのかもしれないけど
めんどくさい

806 :デフォルトの名無しさん:03/07/04 00:03
それは「使えない」ではなく「使う気がない」だ。

807 :デフォルトの名無しさん:03/07/04 00:05
ど根性guile

808 :デフォルトの名無しさん:03/07/04 00:07
>805
バイナリ公開してほしいね。
ちなみにcygwinでも「動く」までは行くよ。
いくつかエラーとか出たけど。
使用に耐えるかどうかはわからない。
単純なコードなら問題なさそうだけど。
確かに、これのためだけにcygwin入れるのは非常に面倒だ。

809 :デフォルトの名無しさん:03/07/04 00:09
configureが異常に長い。

810 :デフォルトの名無しさん:03/07/04 00:11
今時windowsで動かないなんて笑っちゃうよ
cmuclも動かないけど

811 :デフォルトの名無しさん:03/07/04 00:14
cygwinインストールしたらグイーラーが標準でついてくるから
こっち使えば良いか

812 :デフォルトの名無しさん:03/07/04 00:15
グイーラーなんて知らん

813 :デフォルトの名無しさん:03/07/04 00:39
>>802
ある

814 :72ではないです:03/07/04 01:20
guileがいる

815 :デフォルトの名無しさん:03/07/04 01:26
日本語と一番相性のいいCommonLispってなんですか?

816 :デフォルトの名無しさん:03/07/04 02:26
>>815
clisp.
カネがあるならAllegro CL.
SchemeでよければGauche.いじょ.

817 :デフォルトの名無しさん:03/07/04 03:15
>>816
Winなら,clispの他にxyzzy lisp.
WinでSchemeならcygwinのグイーラー(w.いじょ.

818 :デフォルトの名無しさん:03/07/04 03:26
>>817
グイーラーって言ってみたかったに100ペソ

819 :デフォルトの名無しさん:03/07/04 13:19
如何に巧みにレスに「グイーラー」という単語を盛り込むことができるかを競うスレ。

820 :デフォルトの名無しさん:03/07/04 16:27
Schemeってグイーラーって読むんじゃなかったの?

821 :デフォルトの名無しさん:03/07/04 22:17
もうguileネタはいいよ……。

822 :デフォルトの名無しさん:03/07/04 23:52
さて、問題は継続なわけだが

823 :デフォルトの名無しさん:03/07/05 00:33
なんだよいきなり

824 :デフォルトの名無しさん:03/07/05 01:02
LISPって何が面白いんですか?
ハマったきっかけを教えてくだされ。>先輩

825 :デフォルトの名無しさん:03/07/05 01:09
再帰パターンを探す。

826 :デフォルトの名無しさん:03/07/05 01:26
CPS

827 :デフォルトの名無しさん:03/07/05 01:28
複雑なデータ構造が簡単に書ける

828 :デフォルトの名無しさん:03/07/05 01:56
かっこいい

829 :デフォルトの名無しさん:03/07/05 04:14
言語名がカコイイ

830 :デフォルトの名無しさん:03/07/05 09:31
なんでこんなSchemeの処理系ってたくさんあるわけ?
統一してくれないと困っちゃうんだが。

831 :デフォルトの名無しさん:03/07/05 10:06
作るのが簡単だから。

832 :デフォルトの名無しさん:03/07/05 10:36
仕様さえ統一されてればいい。SRFIもあるし。
http://srfi.schemers.org/

833 :デフォルトの名無しさん:03/07/05 11:48
自分はまた処理系作ろうとか考えてるわけです。テヘ。
現在、継続やdynamic-windの実現方法で頭を悩ませております。

ところで、実装手法について述べた文書なんてありますかね?
既存の処理系をいくつか見たんですが、内部の詳細についてはほとんど
述べられていないようです(見落としてるかもしれません)。

みなさんはセルや環境フレームの物理レイアウトには
興味・・・ないですよねぇ・・・さすがに・・・

834 :デフォルトの名無しさん:03/07/05 12:29
> ところで、実装手法について述べた文書なんてありますかね?

手元にあるものから適当にひろってみたけど

- Space-Efficient Closure Representations
- Tail-recursive Stack Disciplines for an Interpreter
- Representing Control in the Presence of First-Class Continuations
- Don't Stop the BIBOP: Flexible and Efficient Storage Management for Dynamically-Typed Language

とかですか? それとももっとソースコードよりのおはなし?

> みなさんはセルや環境フレームの物理レイアウトには
> 興味・・・ないですよねぇ・・・さすがに・・・

そういうの好きな人は結構いると思いますけど。

835 :デフォルトの名無しさん:03/07/05 12:39
>>834
参考にさせていただきます!

>とかですか? それとももっとソースコードよりのおはなし?

そろそろ設計に移ろうかと考えているので、
ソースコード寄りのネタがうれしいッス。

836 :デフォルトの名無しさん:03/07/05 13:52
>>833
ネタ:
ループや関数呼び出しの様な、普通の制御については完全にGCレス
にできる。なるべくセルを使わずスタックで扱う様に気を使う。
小さい数値を即値で表現する様にし、関数の引数をスタック上に作る。
末尾呼び出しのフレーム除去等を管理し、環境も最初はスタック上に
構築して、クロージャや継続フレームの生成段階で初めてヒープに移す。
このとき、スタック上の環境はヒープへのリンクに変更する。

これらはインタプリタのレベルででき、セルで状態構築する処理系
(mini-schemeやtiny-schemeなど)の5倍以上のスピードが出せる。
コード量もあまり変わらない。ただし実装は気を使うので少し難しい。
ついでに、インタプリタではマクロの展開が遅い要因の1つなので、
一度展開した結果をキャッシュすれば、最低限の構文だけ組み込み、
その他は全てマクロであっても、かなりの速度差がつく。
(素直に組めば、この時点でguileよりも速くなる)

gaucheの様な、evalでVMにコンパイルする系に対しては速度でまだ
負けるが、上の実装でコンパイラとVMを用意すればgaucheを超えて速くなり、
コード量、実行ファイルサイズはgaucheの何分の1かで済む。
GCレスにすると、実行時のnativeコードへの変換も楽になる。

837 :デフォルトの名無しさん:03/07/05 14:09
その処理系をグイーラーと名づけよう。

838 :デフォルトの名無しさん:03/07/05 14:25
>>836
>なるべくセルを使わずスタックで扱う様に気を使う。
>小さい数値を即値で表現する様にし、関数の引数をスタック上に作る。
>末尾呼び出しのフレーム除去等を管理し、環境も最初はスタック上に
>構築して、クロージャや継続フレームの生成段階で初めてヒープに移す。
>このとき、スタック上の環境はヒープへのリンクに変更する。

gaucheもそうやってるよ。gaucheの「コンパイラ」はかなり単純。

上の方針でのボトルネックのひとつは、クロージャや継続を「生成」
する時点でヒープへのコピーが発生すること。使われ方によっては
ファーストクラスである必要のないクロージャや継続がたくさん
あるので、ヒープへ移すのはlazyである方が良い。

クロージャに関してはフロー解析をすればある程度最適化できる。
継続でコピーをlazyにやる方法は"copyless continuation"で
探せば数本の論文が見つかると思う。

gcを自分で書くのなら、Henry BakerのCheney on the MTAの方法
も使えるかもしれない。オブジェクトは全てスタックアロケート、
手続き呼び出しは全て継続渡し、スタックがいっぱいになったらgcで
生きてるオブジェクトだけheapに移動、という方法だ。
chickenが使っている。

既存の処理系のコードを読んで、適宜論文を参照するようにすると
色々勉強になる。


839 :デフォルトの名無しさん:03/07/05 14:41
>>833
ネタ2:
ポインタが4バイトならconsセルは8バイト。最初のビットが奇数ならatom。
ポインタを配列のインデックスで表現すれば32bitも必要ない。
24bitもあれば十分だし、そのぶん別の状態に使う。GCで管理するヒープは
セル専用にし、vectorやstringの様な可変長オブジェクトはヘッダセル以外
は別の領域から取る。セル専用にすると速い。GCマークフラグは別テーブルに
持たせる。ただしこの設計はヒープがリニアで取れる時でしか使えない。
話はここからだ。
ポインタをインデックスで実装すれば、ヒープのリニアイメージをそのまま
ファイルに書き出せる。(実行時アドレスを保持している場合は適切な変換が必要。)
これで処理系の実行状態のsuspend/resumeが可能になる。resumeで関数呼び出し
を行ってschemeプログラムを起動できる様にもできる。
このイメージは配置を保証すれば実行環境に依存しない。
環境依存コードをschemeで書かない限りWindowsでもLinuxでも同じCPUなら動く。
作成したメモリーメージを処理系に埋め込めば、suspendはできなくなるが、
実行ファイル単体での配布が可能になる。

840 :ネタ@中毒者:03/07/05 14:51
>>838
確かにCPSで書かれると不利になるね。
ローカルで完結するクロージャについてをスタック上で
まかなえばいいんだろうけど、フロー解析が必須になる。
>継続でコピーをlazyにやる方法は"copyless continuation"で
このコピーレスって、mini-schemeの様にGCで回収させる事かな?
対象がセルじゃなく、スタックである分速いのかもしれないけど、
GCの起動回数とメモリ移動が増える分、どうなるかわからない気がする。

841 :ネタ@中毒者:03/07/05 14:57
これはどうだろう。
local-lambdaという構文を用意し、このクロージャは
定義したレキシカルスコープから外へは出ない事を
ユーザーに明示させる。スコープから出た場合の
動作は不定、じゃまずいからヒープに移動しない等の、
何らかのエラーを返す。

842 :ネタ@中毒者:03/07/05 15:02
↑よく考えたらクロージャの破棄タイミングがわからないから
駄目だ。スコープから抜ければ破棄されるけど、
ループなんか回されたらもう駄目。

843 :ネタ@中毒者:03/07/05 15:22
ネタ3:
上の実装であればGCはマーク&スイープで十分。
ヒープがセル専用なので断片化を気にする必要がないからだ。
マーク&スイープはオブジェクトの参照とマークテーブルの
書き換えだけで済む。さらにスイープは遅延できる。
コストはコピー>マーク&スイープ>マーク&遅延スイープ
ただし、所詮マーク&スイープなので生存オブジェクトが
多くなると局所性とマークのコストが問題になる。

844 :ネタ@中毒者:03/07/05 15:30
>>838
>gaucheもそうやってるよ。gaucheの「コンパイラ」はかなり単純。
gaucheはたしか末尾呼び出しのフレーム調整の最適化が
できてなかった。最新版だと違う?

845 :838:03/07/05 17:02
>>844
>末尾呼び出しのフレーム調整の最適化
って? フレームの削除を末尾呼び出し毎にやるんじゃなくて、
いくつかまとめてやるとか、そういうこと?


846 :ネタ@中毒者:03/07/05 18:35
↑最適化じゃなくて、ただの末尾呼び出し
こういうやつが遅い
(define (ack m n)
 (cond ((zero? m) (+ n 1))
  ((zero? n) (ack (- m 1) 1))
  (else (ack (- m 1) (ack m (- n 1))))))

847 :833,835:03/07/05 19:57
うおお、怒涛のような書き込み・・・
ポインタ&勉強方法等、ありがとうございます。

ひとつ質問があります。セルの中身の表現に、下位数bitを使って
その値が000ならばポインタ、001ならば・・・などというふうな
やり方をよく見かけます(というかほとんど?)。

これってメモリ効率やパフォーマンスを追求したときのの結果なんで
しょうか?それとも歴史的事情でもって「アレもああしてたから
なんとなくそうしてみた」的なノリでこうなってるんでしょうか。

メモリをジャブジャブ使える環境だったら、タイプと値を別々に
持たせていいような気もしますが・・・
単純に2倍だからさすがに無理があるか・・・

848 :デフォルトの名無しさん:03/07/05 21:12
((lambda a a) 1 2 3 4)
=>(1 2 3 4)
スタックにのせてわたすとすると
こういうのは関数のほうでリストに変えるの?

849 :デフォルトの名無しさん:03/07/05 21:21
>>847
セルの下位ビットをタグに使うのはNILというLisp処理系から
だったかな。それ以前は、BIBOPと言って、メモリページごとに
格納するオブジェクトを分ける方法が主流だった。メインメモリが
少ない場合、上位数ビットのみを見ればタイプがわかる。
アドレス空間が18bitとかの時代の話。

アドレス空間が大きくなると、BIBOPで最初に大きくメモリを
切り分けて置くのが難しい。次第に下位ビットタグが使われる
ようになった。

>メモリをジャブジャブ使える環境だったら、タイプと値を別々に
>持たせていいような気もしますが・・・

メモリにおかれるオブジェクトならそれでもまあいい。
ビットタグをワードに押し込む利点は、即値整数を
メモリアロケート無しでレジスタに置けることじゃないかな。



850 :デフォルトの名無しさん:03/07/05 21:33
>>847
> これってメモリ効率やパフォーマンスを追求したときのの結果なんでしょうか?

RISCの即値Jump命令でも使われる普遍的なアイデアだよね。(MSBだけど…)

851 :ネタ@中毒者:03/07/05 21:48
>>848
rest引数はクロージャの環境フレーム生成の時にスタックからリストに変換する。
apply呼び出しの場合はコピーの生成の有無とか色々ある。
コンパイラならその場合は直接(list 1 2 3 4)に変換するかも。

852 :デフォルトの名無しさん:03/07/05 21:58
LISP犬グイーラー


853 :名無しさん@xyzzy:03/07/05 22:29
>>824
SICPがすごい本で、その中で扱われているから。
アルゴリズムはschemeだとすごく分かりやすい。

854 :デフォルトの名無しさん:03/07/05 23:09
SICP凄い本っていう割りには、アメリカのAmazonで評価良くないな。

855 :デフォルトの名無しさん:03/07/05 23:28
アメリカにもDQNはいる
評価つけたやつが勘違いしていたという結論だった筈

856 :デフォルトの名無しさん:03/07/05 23:31
>>855
128人もレビュアーがいて、星3.5個なわけだが。
一人二人勘違いしてた所で、評価は変わらん。

857 :デフォルトの名無しさん:03/07/05 23:39
レビュー読んでみりゃわかるよ…

858 :デフォルトの名無しさん:03/07/05 23:45
見てくるのでリンクおながいします

859 :デフォルトの名無しさん:03/07/05 23:54
これかな
Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science)
http://www.amazon.com/exec/obidos/ASIN/0262011530/qid=1057416751/sr=2-1/ref=sr_2_1/104-6069702-5600745

860 :デフォルトの名無しさん:03/07/05 23:58
http://www.amazon.com/exec/obidos/ts/book-customer-reviews/0262510871/ref=pm_dp_ln_b_6/002-5141756-2944269

俺も作りかけの処理系に手を入れようかな。

861 :デフォルトの名無しさん:03/07/06 00:08
>>856
アンチが重複書き込みしている

862 :デフォルトの名無しさん:03/07/06 00:14
難しいのでクソじゃなかったの?

863 :デフォルトの名無しさん:03/07/06 00:56
難しいな。特に解らない数式が出てきたりすると。
ほとんどSchemeやアルゴリズムと関係ない所だ。

864 :デフォルトの名無しさん:03/07/06 01:02
MMXとか使うと速くなったりする?
自分で言ってて意味がわからないけど。

865 :デフォルトの名無しさん:03/07/06 02:05
レビュー読んでみりゃわかるよ…

866 :デフォルトの名無しさん:03/07/06 02:08
速くなります。

867 :デフォルトの名無しさん:03/07/06 02:19
>>865
そのMMXがわかるようになるレビューとやらは、なんのレビューだ?

868 :デフォルトの名無しさん:03/07/06 05:24
レビュー読んでみりゃわかるよ…

869 :デフォルトの名無しさん:03/07/06 05:26
そのなんのレビューかわかるようになるレビューとやらは、なんのレビューだ?

870 :デフォルトの名無しさん:03/07/06 09:49
グイーラーのレビュー。

871 :デフォルトの名無しさん:03/07/06 14:37
やってる本人は面白いと思ってるんだろうな>ぐいーら、レビュー

872 :デフォルトの名無しさん:03/07/06 15:47
実装の勉強のためにソース読むならclispよりSchemeの方が読みやすそうだな

873 :デフォルトの名無しさん:03/07/06 18:16
>>833
dynamic-windよりも多値が問題だと思う
ファーストクラスじゃないから後付けできないし。

874 :デフォルトの名無しさん:03/07/06 18:30
>>873
いや、実は、R5RSは多値をファーストクラスオブジェクトとして
実装することを禁止してはいない。
「call-with-valuesで作られる継続以外の継続は一つの値を取る」
とは書いてあるが、一つの値を取る継続に複数の値を渡した時の
動作は未定義。
だから、valuesは(値が一つの時以外は)特殊な「valuesオブジェクト」
に値をパックして返し、call-with-valuesはconsumerを呼ぶ時に
それをアンパックする、というアドホックな実装でも、R5RS準拠といえる。
もちろん性能は犠牲にすることになるが。



875 :デフォルトの名無しさん:03/07/06 20:27
じゃあ、valuesをファーストクラスにすべく、インタフェースを考えてみる

;多値の束縛
(define x (values 4 5)) => x
x => #<values 4 5>

;多値の判定
(values? x) => #t

;普通の評価
(+ x 1) => (+ 4 1) => 5

;多値の抽出
(call-with-values x (lambda (x y) y)) => 5

こんなんでいい?

876 :デフォルトの名無しさん:03/07/06 20:35
続き

;多値の変換
(values->list x) => (4 5)
(values->vector x) => #(4 5)
(list->values '(4 5)) => #<values 4 5>
(vector->values #(4 5)) => #<values 4 5>

;多値の参照/設定
(values-ref x 0) => 4
(values-set! x 0 3) => #<values 3 5>

つまりvaluesは特殊なvector型

877 :874:03/07/06 21:06
>>875, >>876
valuesを特殊なベクタとして実装するのはいいけど、
values?とかvalues->listなんかはその実装でしか
使えない(本当の多値を持つ処理系には移植しようがない)
からあんまり意味ないんでは。

また、valuesの戻り値がcall-with-values以外で使われる
場合の動作は完全に未定義。次のような動作は、実装しても
いいけど移植性はない。

(define x (values 4 5)) => x
(+ x 1) => (+ 4 1) => 5

あと、このようにvaluesのコンテナを用意する実装の場合、
値が一つだけの時を特別扱いするのを忘れずに。
(values 1) === 1 は常に成立しなければならない。


878 :デフォルトの名無しさん:03/07/06 22:17
(values 1 2)と(values 1 3)は常に等しくないの?

879 :デフォルトの名無しさん:03/07/06 22:37
>>877
そういう突っ込みを待っていたのです

>移植性
これは特に考えてなく、多値をオブジェクトとするからには、
それなりに使いやすいインタフェースを用意すべきかと思ったので。
性能については、call-with-values付きで呼ばれたとか、
評価中にわかると思うから、それで最適化できるかもしれない。
SRFIにvaluesのファーストクラス昇格を提案してみるとか。

>(values 1) === 1 は常に成立しなければならない。

(= (values 1) 1) => #t
これは成り立つと思います。(>>875の多値の判定)
処理系によっては
(eq? (values 1) 1) => #t
つまり、多値オブジェクトの振る舞いは、基本的に単値オブジェクトと
同じということにする。
values関係の関数を呼んだときだけその本性を現す、とか。



880 :デフォルトの名無しさん:03/07/06 22:44
あーでも、オブジェクトの参照で、かならず多値判定が必要になるから
効率悪いかも

881 :デフォルトの名無しさん:03/07/06 22:48
ちなみに
(= (values 1 2 3) 1) => #t
です。

>>878
(= (values 1 2) (values 1 3)) => #t
です。

多値同士の比較は別個に用意する必要があります。
(values-equal? (values 1 2) (values 1 3)) => #f

882 :デフォルトの名無しさん:03/07/06 23:19
継続といえば、コールバック関数上での振る舞いが問題になると思う。
これのおかげでマシンスタックを退避とかしないといかんし。


883 :まるちぽすと:03/07/06 23:28
ここはCommon LispよりSchemeな擦れだってことは知ってますが、せっかくだから聞いて下さい。
LisperのPaul Grahamが絶版になったCLについての著書On LispをPDFで配っているのですが、
そいつを勉強を兼ねて翻訳しています。
今年の始めに手を付け始め、25章の本のうちやっと7章まで終わりました。
著者の許可はとってません。勝手にやってるだけ。まずかったら引っ込めます。
まだWizard Bookも読んだことない廚ですが、サイトを覗いてやって下さい。
なんかコメントがあったらここなり私のメールアドレスなり適当に。
user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.{pdf,dvi}.bz2

# これで後にはひけなくなった...

884 :デフォルトの名無しさん:03/07/07 00:18
また、かわいそうな子が・・・。

885 :デフォルトの名無しさん:03/07/07 08:19
>>883
Paul Grahamにメール出してみてはいかが。
既に翻訳出版の話が進んでいるとかでない限り、
快く了承してくれると思いますよ。


886 :874:03/07/07 08:39
>>879, >>881
>処理系によっては
>(eq? (values 1) 1) => #t
>つまり、多値オブジェクトの振る舞いは、基本的に単値オブジェクトと
>同じということにする。

これは「処理系によっては」じゃなくて、eq?にならないとまずい。
R5RS的にはどんな手段でも(values 1)と1の結果は区別できない。
処理系独自の述語で区別するぶんには構わないけど(実装の詳細ということで)。

> (= (values 1 2 3) 1) => #t
> (= (values 1 2) (values 1 3)) => #t

CLと同じセマンティクスにするってことね。それは処理系独自の
拡張と考えられるから良いと思う。

>SRFIにvaluesのファーストクラス昇格を提案してみるとか。

それじゃ多値の意味が無いような…
(+ 1 2 3) という手続きを呼ぶ時に、[1 2 3]という
オブジェクトを + に渡しているんだ、と解釈するように
するならいいけど。

Jonathan Reesのrrrs-authorsの議論を見てみそ。
http://zurich.ai.mit.edu/pipermail/rrrs-authors/1986-October/000605.html




887 :デフォルトの名無しさん:03/07/07 17:09
>>883
> 著者の許可はとってません。勝手にやってるだけ。
まず、許可とれ。
そして、出版してくれ。PDFじゃ読みたくならん。


888 :デフォルトの名無しさん :03/07/07 21:58
>>883
>>ここはCommon LispよりSchemeな擦れだってことは知ってますが
OnLispってマクロについて書かれた本だったような。それならschemeでも
十分役立つと思います。

889 :デフォルトの名無しさん:03/07/08 03:15
翻訳 "(,,゚Д゚) ガンガレ!"

890 :デフォルトの名無しさん:03/07/08 17:48
OnLispは出版物になってるから、
翻訳に関する権利関係がちゃんと画定しているかもしれないので、
確認した方がいいですよ。

891 :デフォルトの名無しさん:03/07/08 21:45
OnLisp の texinfo 版は許可もらってんのかね?

892 :デフォルトの名無しさん:03/07/09 02:05
犯罪というものは訴える人間がいるから成立するのだよ。
もし芳しくない返事が返ってきたとしても、どっか無料鯖にアップしとけ。
翻訳者の名誉なんか求めてないだろ?とりあえず全部訳したら俺が神認定
してやるよ。

893 : :03/07/09 11:54
犯罪っつーか権利侵害な

894 :flatline (883):03/07/09 16:44
>>885 ある程度できたらメールしようかな、と...
実は4月以来進んでいないのです。それで動機付けにここに公開したという訳。
>>887 プリンタくらい持ってるでしょ。
>>888 >>889 どうもです。
>>890 一度絶版になって公開されている本を出版するような出版社は少ないと思ったんですが...
>>891 何ぃぃぃぃぃそんな便利なものがぁぁぁぁぁ
PDFからコピペするのがどれ程面倒だったのかと小一時間(ry
>>892 >>893 これはPaulの権利の侵害ではないと言えますよね。
そして私のような個人が翻訳して配る行為を縛る権利は本来誰にも
(現実的にはどの出版社にも)ありません。

ま、いずれはPaulにメールして承諾もらいますよ。くれるはず。
あとはShiro Kawaiさんとかはぎゃ教授とかにも教えたら喜んでくれるかも?
で、中身についての意見きぼんぬ。あんまり分かってないので間違ってるかも。
ただ、作業の続きは期末試験終わった8月位になります。すんませんね。

895 :891:03/07/09 16:53
…知らなかったのかYO!! 漏れも某 Lisp ページの管理人さんから
聞いて知ったんだが.非公式だからマイナーのなんかな?

On Lisp の texinfo 版
http://t2100cdt.kippona.net/linux/lisp/

texinfo で作ってくれ〜 PDF や ps はつかいにくい〜

896 :デフォルトの名無しさん:03/07/09 20:15
>>894
On Lispは再版されるらしいぞ。
http://groups.google.com/groups?dq=&hl=ja&lr=&ie=UTF-8&c2coff=1&selm=add24301.0306271142.2b67e898%40posting.google.com


897 :デフォルトの名無しさん:03/07/09 20:43
つうか翻訳した分だけでいいからWikiで公開してくれ。
本人が放置しても作業が進む可能性を残すべし。

898 :デフォルトの名無しさん:03/07/09 20:46
| >>892 >>893 これはPaulの権利の侵害ではないと言えますよね。
| そして私のような個人が翻訳して配る行為を縛る権利は本来誰にも
| (現実的にはどの出版社にも)ありません。

痛すぎる…


899 :デフォルトの名無しさん:03/07/09 21:08
再版されるのか...絶対買おう。


900 :デフォルトの名無しさん:03/07/09 22:01
>>898
ttp://www.hyuki.com/trans/ によると
まず、翻訳そのものには許可は不要です。
翻訳したものの頒布には著作権者の許可が必要です。
ということですよね。


901 :デフォルトの名無しさん:03/07/10 00:19
ちょうど comp.lang.lisp で似たようなネタやっとるな…

902 : :03/07/10 11:20
>>900
あなたが>>883であると想定して書込みます。

それはたぶん私的使用のための翻訳を言っているのだと思いますが、
WEB上に出してしまうと、
アクセス制限でもしてない限り私的使用とは言えませんよ。
いずれにせよ、絶版になったからといって、
当然に出版社側の権利が消滅するわけではないので、
ちゃんと聞いたほうがいいです。
あなたの労力は高く評価しますが、
手続は踏んでおかないと色々面倒なことになるかもしれず、
その労力が無駄になりかねませんよ。

903 :デフォルトの名無しさん:03/07/10 14:13
>>900にある
>翻訳したものの頒布
=WEB公開だろ。落ち着け>>901

904 :902:03/07/10 15:32
>>903
それは僕に言ってるんですかね

そうだとしても、あなたの言ってることが
私の言ったこととどう矛盾しているのか分かりませんが

905 :デフォルトの名無しさん:03/07/10 15:52
http://headlines.yahoo.co.jp/hl?a=20030710-00000464-reu-ent

906 :flatline:03/07/10 18:49
えーーと、私は基本的にコテハンな人なのでよろしく。
で、まさか再版の方向で進んでいるとは...
それではさすがにやばそうなのでPDFおよびDVIファイルの公開を停止しました(w
>>895 Texinfoはまだ日本語を使うと微妙にDVIの見出しとかが変になるので... でも考えてみます。
>>897 Wikiとかうpローダとか使い慣れないのですいません。
>>898 おっ釣れた,,でも一匹だけかつまらん
>>900 >>902 分かってはいるのですが、どうせ絶版なら多少承諾が前後してもいいだろ、と思ったわけです。
しかしそうも言っていられない。
>>905 「ハリーポッターをドイツ人有志が独訳」
しかしハリポタは購買層が広いからそれでも売れるのでしょうが、On Lispの場合はもめるかも。

「私の翻訳は違法、出版社も揉め事を避けて邦訳を出版せず」となると日本のlisper全体に迷惑が行って
ヤヴァイので慎重に行くことにします。今英語のできる友人にメールの文章の添削を頼んでいます。
# PDF公開なんかより出版しる!という声もあった位だから購買意欲を削ぐことにはなってませんよねえ?

907 :デフォルトの名無しさん:03/07/10 21:54
Oh my gosh!


908 :900:03/07/11 06:39
>>903
ありがとん。


909 :デフォルトの名無しさん:03/07/12 05:50
絶版とか何とか言う前に、著作権違反だっつーの。
著作権のイロハを学んでこい。(w

910 :デフォルトの名無しさん:03/07/12 11:33
要するに英語で連絡とる面倒さと、事後承諾拒否のリスクを秤にかけてるんだろ。どのみち迷惑だからヤメレ

911 :デフォルトの名無しさん:03/07/12 13:39
このままだと釣りや煽りが出てきそうなんで話の整理

だから翻訳したものを無許可で公開するつもりですなんて
誰も言ってないっつーの
無許可公開には問題があるんじゃないかって話がでてきて
「じゃあ自分の勉強のためにただ翻訳するだけなら
著者の許可を得なくてもいいんですね」
「そうだよ。でも翻訳したものをwebに載せるのは
頒布になるから許可がいるね」
というやりとりがなされただけ。
ちょっと落ち着け>誰かさん

912 :911:03/07/12 13:53
つーか著者に連絡するって本人が書いてるじゃん
著作権について奇妙な理解の仕方をしてるみたいだけど
間違った行動さえとらなければこのスレ的には別にどうでもいいし
著作権についての議論やひけらかしがしたい人は別板でどうぞ

913 :デフォルトの名無しさん:03/07/12 14:02
許可が取れれば問題無いと思う。
でも、今の時点では許可とってないので、問題あり。

914 :デフォルトの名無しさん:03/07/12 14:36
>>911
おまいは話の発端を読み直せ。
明らかに権利侵害を行なっていたことが読み取れるから。

>>906
こういうのは「知らなかった」なんて言い訳が通用しないのは当然として、
「絶版だから大丈夫だろうと思った」なんていう勝手な決め付けは
自らのオツムが足りてないことを公言してるようなもんだよ。
判断を下すのは権利者であっておまいではない。

915 :デフォルトの名無しさん:03/07/12 16:04
NGとかにもこういう話になると途端に活気づく奴がいてウザイネ

916 :デフォルトの名無しさん:03/07/12 16:09
そんだけ非常識な香具師が多いってことだろ

917 :デフォルトの名無しさん:03/07/12 21:52
無知とは言え、よかれと思ってやった人の行動を情け容赦なく罵倒する914。
914はさぞかし素晴らしい何かを成し遂げているのだろう。
ああ、完全無欠の914!


918 :デフォルトの名無しさん:03/07/12 22:12
関係ない話は他所でおねがいします。

919 :デフォルトの名無しさん:03/07/12 22:28
そんなcdrん事よりlispの話しないcar?

920 :デフォルトの名無しさん:03/07/12 22:29
>>917
良かれと思ってやる犯罪者を確信犯と呼びますな。
犯罪者は確信犯だろうが、情け容赦なく罵倒するのが妥当。

921 :デフォルトの名無しさん:03/07/12 22:38
ついに"犯罪者"呼ばわりでつか…

922 :デフォルトの名無しさん:03/07/12 22:45
>>921
犯罪者呼ばわりしてる人などいないが。
法律のことは良く知らないが、著作権侵害をしているなら、
もしかしたら犯罪者かもな。

923 :デフォルトの名無しさん:03/07/12 22:45
良スレだったのに、(・ー・)オワッタナ・・・

924 :デフォルトの名無しさん:03/07/12 22:49
DrSchemeで、拡張子がpltのアーカイブファイルがあるんですが、
これはどうやって解凍するんでしょうか?

925 :デフォルトの名無しさん:03/07/12 23:00
よかれと思ってやっても犯罪は犯罪。

926 :デフォルトの名無しさん:03/07/13 01:43
いいから、著者と連絡取れ。
公開する、しないはそれからだ。

927 :デフォルトの名無しさん:03/07/13 03:34
>>911
実際のところはそれすら自明ではないんですがね。

928 :デフォルトの名無しさん:03/07/13 15:45
誰か次スレ立てられる人います?
自分は規制が掛かって立てたれなかった。
一応次のテンプレ用意しましたので、どなたかお願いします。
(リンク関係は量があるので、立った後に貼ります)

↓テンプレ
--------------------------------------------------
LISP Scheme Part8

過去スレ
Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/test/read.cgi/tech/1002584344/
Part3: http://pc.2ch.net/test/read.cgi/tech/1008220265/
Part4: http://pc.2ch.net/test/read.cgi/tech/1016211619/
Part5: http://pc3.2ch.net/test/read.cgi/tech/1023091882/
Part6: http://pc3.2ch.net/test/read.cgi/tech/1031560687/
Part7: http://pc2.2ch.net/test/read.cgi/tech/1042167213/
関連リンクは>>2-10あたり

929 :デフォルトの名無しさん:03/07/13 16:51
著作権では、私的複製は許されるけど、私的翻訳は許されなかったはず。

930 :デフォルトの名無しさん:03/07/13 17:17
ほぇ?

931 :デフォルトの名無しさん:03/07/13 20:14
何を今更、しかも的外れなことを

932 :デフォルトの名無しさん:03/07/13 22:15
的外れ?まさに、私的翻訳をやってるように見えるし、
それがOKと勘違いしてるやつがこのスレに
いるように見受けられるが。

933 :デフォルトの名無しさん:03/07/13 22:34
WEBで公開してる以上私的じゃないな。

934 :デフォルトの名無しさん:03/07/13 23:15
>932
そろそろ空気読めよ。

935 :デフォルトの名無しさん:03/07/14 00:11
>>928
html化してるぞ全部

936 :デフォルトの名無しさん:03/07/14 00:16
かくしん-はん 【確信犯】

道徳的・宗教的・政治的な信念に基づき、自らの行為を正しいと信じてなされ
る犯罪。思想犯・政治犯・国事犯など。


937 :デフォルトの名無しさん:03/07/14 00:32
(gc)

938 :デフォルトの名無しさん:03/07/14 00:51
これからは英語論文も英文マニュアルも英語のまま丸暗記しますから
どうか安らかにgcされてください>932

939 :デフォルトの名無しさん:03/07/14 01:27
著作権侵害とならない範囲での翻訳ならいいだろう。
脳内翻訳とかな。

940 :デフォルトの名無しさん:03/07/14 01:41
>>938
英語論文に日本語訳を書き込んでセミナーに臨むのも禁止だかんな
明日は覚悟しとけよ!

941 :デフォルトの名無しさん:03/07/14 01:43
厳密に言えばそれも違法だろうな。
ただ、量が少なければ著作性は認められないから良いかもしれないが。

942 :デフォルトの名無しさん:03/07/14 01:44
軽犯罪といったところか。

943 :デフォルトの名無しさん:03/07/14 02:06
1. まず自分で勝手に翻訳をし、
2. 翻訳ができた段階で著作権に連絡を取り許可をもらって頒布する

こういうのはよくあるんじゃないかと思うんだけど、
1. の段階で法律違反なのですか?
許可を取らないと、1. すら駄目ということですか?

944 :デフォルトの名無しさん:03/07/14 02:10
>950 は次スレお願いします。

あ、テンプレに翻訳物の著作権絡みの話題禁止って書いておいて下さい。

945 :デフォルトの名無しさん:03/07/14 02:39
どうしても著作権の話したけりゃ、Lispで書け!

946 :デフォルトの名無しさん:03/07/14 02:45
【殺しの】ライセンス【道で拾った】
http://pc2.2ch.net/test/read.cgi/tech/1045006087/

↑これがライセンス総合スレらしいけど、放置されてるから著作権についての議論に使えば?

947 :デフォルトの名無しさん:03/07/14 02:51
↓テンプレ
--------------------------------------------------
LISP Scheme Part8

過去スレ
Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: http://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: http://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: http://pc2.2ch.net/test/read.cgi/tech/1042167213/
関連リンクは>>2-10あたり

948 :デフォルトの名無しさん:03/07/14 02:55
他の板のLispスレ

Lisp使いの数→@マ板
http://pc.2ch.net/test/read.cgi/prog/1031179059/l50
Lisp@UNIX版
http://pc.2ch.net/test/read.cgi/unix/1019926525/l50

949 :デフォルトの名無しさん:03/07/14 21:54
>>938-943
ちょっとわかりにくいけど、著作権法43条によって、私的な翻訳
や、教育上の翻訳も許されます。

第30条は確かに複製だけを対象にしてるように見えますが。

950 :デフォルトの名無しさん:03/07/15 04:30
S 式は英語ではなんというのですか?

951 :デフォルトの名無しさん:03/07/15 04:39
http://theory.lcs.mit.edu/~rivest/sexp.html

>>950
次スレよろ。

952 :デフォルトの名無しさん:03/07/15 07:41
>>951
高林さんの次のも見つけたけど、さっぱりわからない。
http://namazu.org/~satoru/unimag/10/
英語・日本語どちらでもいいから、もっとわかりやすい説明ないですかね?

953 :デフォルトの名無しさん:03/07/15 07:58
アトムは S式である
x と y が S式ならドット対 (x . y) も S式である

これでいいと思うけど、Lispで扱うのはみんなS式だよ。

954 :山崎 渉:03/07/15 09:52

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

955 :デフォルトの名無しさん:03/07/15 16:54
その「Lispで扱う」の解釈がちょっと

956 :デフォルトの名無しさん:03/07/15 17:19
何がわからないんだ?

957 :950:03/07/15 17:44
自分は lisp 使いじゃないです。
S 式を知りたくてこのスレッドにたどり着いたので。

958 :955:03/07/15 18:22
コードはS式として書くけど、データ型はいろいろじゃんという事が言いたかった

959 :デフォルトの名無しさん:03/07/15 18:45
色んな拡張があるので(read)で読みこめれば、なんでもS式かな。
それはそうと、俺はクソプロバイダのせいで次スレ立てられない。
誰かよろしく。

960 :デフォルトの名無しさん:03/07/15 19:03
次スレ
http://pc2.2ch.net/test/read.cgi/tech/1058263391/l50

961 :デフォルトの名無しさん:03/07/20 02:12
mada
tsukaeru
yo
n


962 :山崎 渉:03/08/02 02:30
(^^)

963 :山崎 渉:03/08/15 16:57
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

240 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)