LISP Scheme Part7
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNGPart1: 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あたり
0002デフォルトの名無しさん
NGNG日本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の入門サイト。
0003デフォルトの名無しさん
NGNGhttp://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
0004デフォルトの名無しさん
NGNGCommon Lisp the Language, 2nd Edition(英語)
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
CommonLispの仕様書です。
アルゴリズム言語Schemeに関する第五改訂報告書 R5RS(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
http://www.biwa.ne.jp/~mmura/scheme/tspl.html#r5rs
日本語訳はここ以外にもあるそうです。
Scheme Requests for Implementation SRFI (英語)
http://srfi.schemers.org/
Scheme Frequently Asked Questions (英語)
http://www.schemers.org/Documents/FAQ/
0005デフォルトの名無しさん
NGNGSICP(英語)
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/
0006デフォルトの名無しさん
NGNGSchemeで書かれた正規表現ライブラリ
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行の実装
0007デフォルトの名無しさん
NGNGMinischeme: 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/
0008デフォルトの名無しさん
NGNG乙カレ〜。
Bibliography of Scheme-related Research
http://library.readscheme.org/
Scheme関連の論文リンク集
0009デフォルトの名無しさん
NGNGPart6: http://pc3.2ch.net/test/read.cgi/tech/1031560687/
0010名無しさん@XEmacs
NGNG"ANSI Common Lisp" 買ったsage。
0011デフォルトの名無しさん
NGNG漏れも買った。でも読んでない…。
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018LISPスレ住人その1
NGNG判別できるのは、
>>10-13
>>16-20
>>22-27
>>30-32
>>34-37
>>39-41
これでok?
0019LISPスレ住人その1
NGNG最近人いないなあ・・・
0020名無しさん@Emacs
NGNG入ってるみたいなんだけど、これの歴史的な理由を御存じの方います? 何か MLD に
も入ってるみたいでびびった。
0021山崎渉
NGNG0022デフォルトの名無しさん
NGNGこんなのがあるんだね
既出?
0023デフォルトの名無しさん
NGNG一度いってみたいなあと思ってます。
その時はよろしこ(藁
0024デフォルトの名無しさん
NGNGせかんど
さーど
ふぉんど
ふぁいぶんど
0025デフォルトの名無しさん
NGNG資料を見てみると、だいぶしまいの方まで来てるぞ。
行く前に終わってるんじゃないか。(W
0026デフォルトの名無しさん
NGNGたしかに漏れは終わっている部類の人間だが、
そんなことは関係なし。先生に会いに行くのだ(藁
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG申し込んだけどまだ2章。だめぽ.....。
0031山崎渉
NGNG0033デフォルトの名無しさん
NGNG内部エンコーディングがEUC-JPのGaucheを使って、Shift-jisコードを
16進数で表示しようとしています。
(char->integer #\あ)とすることによって、内部エンコーディングを
10進数で表示できました。しかし、Shift-JISの表示は分かりませんでし
た。
(char->integer (ces-convert #\あ "EUCJP" "SHIFTJIS"))では、String
がchar->integerに渡されるためにNGでした。
御面倒ですが、アドバイスをお願いします。
0034デフォルトの名無しさん
NGNGchar->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))))
0035デフォルトの名無しさん
NGNGLISPのLIの字も出てこんなあ。けしからん。
お叱りの言葉と「 不充分・不完全である」
にチェック入れてフィードバックすた。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG(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))))
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG具体的にコードまで教えていただきありがとうございしました。
理解できました。
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG必要ないんじゃないだろうか。
0042C++厨
NGNG0043デフォルトの名無しさん
NGNG>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 購読者な神よ、ウプキボンヌ!
0044山崎渉
NGNG0045デフォルトの名無しさん
NGNGlisperは普段どこ行ってるの?
0046デフォルトの名無しさん
NGNGこれ、面白い。
0047デフォルトの名無しさん
NGNG「123ページのdefpackageの呼び出しでは、引数にはストリングしか使わなかっ
た。シンボルを使うこともできたのだが、これは危険なことがある。なぜか。」
というのがありますが、具体的にどうまずいのか思いつきません。
御存じの方いらっしゃいましたら御教示下さい。
123ページの…というのは
(defpackage "MY-APPLICATION"
(:use "COMMON-LISP" "MY-UTILITIES")
(:nicknames "APP")
(:export "WIN" "LOSE" "DRAW"))
という一般的な例です。
0048デフォルトの名無しさん
NGNG引数がシンボルだと、defpackage形式を読み込むパッケージによっては
意図しているのと違うパッケージのシンボルを指してしまうことが
あるからかなあ。
パッケージ違いによるバグは結構はまる。プログラムコードをいくら
睨んでもわからないから。
0049デフォルトの名無しさん
NGNGシンボルじゃなくてキーワードを使うのはどうなんでしょう?
(defpackage :mypackage (:use ...))
みたいな。文字列だと *readtable* を考慮するのが面倒なんですが…。
皆 :UPPERCASE なんで気にしなくていいんですかね?
0050デフォルトの名無しさん
NGNGキーワードもシンボルなのだが、それはそれとして、
キーワードを使用するのは極めて一般的です。
005147
NGNGなんかそういうことが起こりそうだなあという気はするのですが、
今日は色々試していたのですが残念ながら中々そういう事態をうま
く作りだせませんでした。
お心あたりがありましたら、例を頂けると有難いです。
それとは別に、試行錯誤しているうちに一つ発見したのは、
読み込む側のシンボルテーブルを汚染してシンボルを作ってしまう
ために、useしようとしたパッケージがたまたま重なった名前を
exportしていると、シンボルが衝突してしまうということですね。
0052デフォルトの名無しさん
NGNGParadigms of Artifical Intelligence Programming
を買ちゃった age
005347
NGNGあー面白かった。
ちょっと悔しいのが、型宣言をうまく使えなかったことで、高速化
を扱った9章の練習問題にて(例に出てきた)レイトレーサのプログ
ラムに型宣言を追加せよ、というのがあったのですが、これに型宣
言を追加するとかえって遅くなってしまいました。その前のCLOSの
章の練習問題にてdefstructをクラスにしたものをベースに、あち
こちにsingle-floatの宣言を入れてついでに多く使われてるものは
inlineも指定したんですが、型宣言を入れる前には追い付けずじまい。
どうするのがいいのやら。
005447
NGNG_clips.cのexecvでlisp.runを起動させて
lisp.run側で処理をするんだとは思うのですが、
このlisp.runのソースはどれなんでしょうか?
clisp/src/spvw.dがソースかとも思ったんですが、
cのコードっぽいけどなんかcのソースファイルじゃないし・・・
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG英語のSICP読むの諦めて
図書館で日本語訳借りてきた俺にはだめぽ
0059デフォルトの名無しさん
NGNG(http://pc.2ch.net/test/read.cgi/prog/1031179059/383))
0060拒食症
NGNG(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))))))))))
0061拒食症
NGNG0062名無しさん@XEmacs
NGNG0063
NGNGhttp://nis-www.lanl.gov/~rosalia/mydocs/learn_libguile_toc.html
http://nis-www.lanl.gov/~rosalia/mydocs/learn_libguile.ps
おまえらも遊びませんか?
0064
NGNGhttp://www.cs.utexas.edu/users/bdbryant/guile-for-ada/guile-tut_toc.html
見て遊んできます。
0065デフォルトの名無しさん
NGNGhttp://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)のような
;;リストを作成する
のような考え方でよいのでしょうか
漏れならこう書くが、合ってるかどうかは知らん。
ANSI Common Lisp持ってないし。
(defun pos+ (l)
(let ((n -1))
(mapcar #'(lambda (x) (+ x (incf n))) l)))
0067デフォルトの名無しさん
NGNG私もちょうど同じところでひっかかりました。
それと、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)))))
どこかに練習問題の模範回答はないんかな?
0068デフォルトの名無しさん
NGNG>>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))
0069
NGNG最近卒論でちょっとしたシミュレータを作っていまして、
そのシミュレーションシナリオの記述言語として lisp を採用してみたいと思っています。
一般的に C/C++ に lisp インタープリタとしての機能を付け加えたいとき、
なにかおすすめのライブラリなどはありますでしょうか?
Scheme でも OK なのですが、 libguile はちょっと敷居が高いと感じていまして。
0070
NGNGをみると 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.
だったりします。
0072デフォルトの名無しさん
NGNG他の動的な言語もそうだけど、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/
0074
NGNG詳しいレスありがとうございます。
GC 周りでは気をつけなければならないことが多そうですね。
注意深くやりたいと思います。
もう少し借用させて頂けそうな lisp / scheme の実装を
探してみたいと思います。
問題の本質とは関係ありませんが、
お偉方は Windows しか使えないので最終的には Win32 な
バイナリを吐く必要があるのも、困難な点の一つです。
Gauche / Guile は cygwin 環境下で動いているようです。
さすがに Native Win32 環境下では難しそうですね。
自分のマシンは Linux (Debian GNU/Linux 3.0r1) と IBM AIX 5L です。
AIX は借り物ですけど。
007572
NGNG0076デフォルトの名無しさん
NGNGlibguile か librep がいいんじゃない。
この2つははじめから組み込みを意識して作られていますから。
C への組み込み方法がドキュメントに載ってるよ。
007772ではないです
NGNG昔のGuileは激遅だったので。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG組み込みならSIODも軽くていいかもね。
0080デフォルトの名無しさん
NGNGGuileとSCMは枝分かれしたのがずいぶん前だからね。
一本化ってできなかったのかなー
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG/ †|. ┃ < 我が偉大なる神 Emacsに祈りを捧げよ
|`ー┐λ \_____________
|::.ヽ丿.┃
|::. |.| ┃
ノ::::...ノ | ┃
 ̄` ̄ ̄ ̄´ ̄ ̄
0084デフォルトの名無しさん
NGNG再帰使ったほうが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)))))
0085デフォルトの名無しさん
NGNGだからじゃないか?
0086デフォルトの名無しさん
NGNGこの本に関して質問です。
原書と翻訳版とでページ数がかなり異なりますが、何か理由があるのでしょうか?
(どこかのしょうが削られているとか、、、)
それと、日本語訳はうわさどおり、読みにくいものなのでしょうか?
0087デフォルトの名無しさん
NGNGSICP第2版は翻訳版の方が紙がだいぶ大きい。
(版形っていうんだっけ?)
0088デフォルトの名無しさん
NGNGhttp://science.2ch.net/test/read.cgi/rikei/1046173479/l50
0089デフォルトの名無しさん
NGNG(if (eq? status :next)
(process-rule config mail field-name
(cdr patterns) command param)
:last))))
のように :next とか :last とかあるんですがこれって何か意味があるんでしょ
うか? ソースや info 見ても手掛かりを見つけられなかったのですが。。。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG単純に symbol として使っているみたいですね。if 文が keyword 引数を取っ
ているのかと勘違いしてました。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGできるだけWeb上に情報が多い奴がいいんだけど
0096デフォルトの名無しさん
NGNG2) Emacs
3) Common Lisp
0097デフォルトの名無しさん
NGNGquoteやlambda辺りがちゃんとしてれば、何でもいい気がする。
結局は何からスタートしても、大抵のソースは慣れで読める様になるし。
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGScheme: Gauche
Common Lisp: CLISP, CMU Common Lisp
あたりか? emacs + ilisp と組み合わせて使うのがお勧めだ。
金出す気があるなら、黙って Allegro Common Lisp を買え。
0100デフォルトの名無しさん
NGNGPersonal版とか作って欲しい
0101デフォルトの名無しさん
NGNGhttp://www.pink-angel.jp/betu/linkvp/linkvp.html
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG標準でTCP/IP や Tk へのインターフェース、正規表現有り。
Windows/UNIX で動く移植性の高さ!
http://www.newlisp.org/
0105デフォルトの名無しさん
NGNGschemeの末尾再帰最適化やcontinueationは無いみたいね。
#'も無いから、schemeっぽく書けるLISPという感じ?
ソースをちょろっと見た感じでは、
インタプリタ駆動で、コンパイラの類は正規表現の変換を除いて無し、
外部モジュールに頼る都合かcase sensitive、真偽値はtrue/nil、
eq系述語が無い(=で代用)とか、色々特殊っぽい。
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGemacsやxyzzyとか。
エディタ付きだし、
下手に他の処理系探すよりお勧め。
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNGありがとうございます♪今落としてきました。
とても使いやすくていい感じです♪
さぁ、俺lisper目指すぞ
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNG調べても出てこないよ・・・
0113デフォルトの名無しさん
NGNG修行が足りん!
ttp://www.afis.to/~start/xyzzy/textEditor/lisp_keyword.html
ttp://www.geocities.jp/madoinu/xyzzy/note/use_reference.html#keyword
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNGをを、サンクスです。もうすこし修行してみます。
0116デフォルトの名無しさん
NGNGpcre.dll(や.so)を使うわけにはいかなかったのかねえ。
まあ使い方わからんけども。
0117デフォルトの名無しさん
NGNGShow'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の下にディレクトリが?
0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGbyte-compile-file
ってこれくらい調べりゃ簡単にわかるだろが。
0121デフォルトの名無しさん
NGNGANSI Common Lisp の 5 章の問題 4 「svref の代わりに case を使え.」
case でどうやってベクタを読むの?
0122デフォルトの名無しさん
NGNGテーブルルックアップをcase文のハードコーディングで置き換えろってことだろ。
0123
NGNG以下の仕様でどこか作ってくれ
1:ANSI Common lisp 対応
2:HotSyncでPCからマクロや関数を自動追加可能
3:3万以下
(・∀・)イイ!
0124デフォルトの名無しさん
NGNG0125123
NGNG入力補助をしてくれる機能があれば(・∀・)イイ!
もちろんボタンと文字列の組み合わせは
(setf f10 "(hogehoge ")
のように外部から変更可にすれば(゚д゚) ウマー
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNGLISPのポケコンは昔あった気がするけど、今更な機能なんだろうね。
PDA向けの処理系探してきて、カスタマイズするしかない。
0128121
NGNG;; ほかにも,4 章の問題 1 で array-dimensions を自分で設計するのかと勘違いし,
;; aref だけでベクタの大きさを知る方法があるのかと悩んでしまいました.
ところで,
* どうして scheme の map は Common Lisp の mapcar のように
要素を取り出す順番を保証しないのでしょうか.
わざと不便なことをしているのでしょうか.
これでは高尚な「写像」中に汚い破壊的操作ができません.
* Common Lisp では末尾再帰を必ず最適化するわけではないそうですが,
せっかくできる最適化をしない処理系なんてあるのですか?
0129123
NGNG>PDA向けの処理系探してきて、カスタマイズするしかない。
向けのLISPってあったっけ?探してみよう。
0130123
NGNG#p2で書き込むと時々文字が抜けちゃうなぁ
0131デフォルトの名無しさん
NGNG>* どうして 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のスペシャリストが
書く様な複雑怪奇な再帰を使ったコードが完全に最適化される
可能性は低いと思います。
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGschemeのmapの仕様の理由は >>131 に同意。
順序が重要なら、srfi-1にmap-in-orderというのがある。
0135128
NGNG> 例えば下の様なmapの実装だと、
「先頭からやるのが一番合理的」という観念にとらわれていました.
順序を保証しない場合のメリットもあるんですね.
> 破壊操作を前提とするなら、専用のmapを作るか持ってくる
> 必要があります。
>>134
> 順序が重要なら、srfi-1にmap-in-orderというのがある。
やはり需要があるみたい.頭のトンがった方々のコードをたくさん読めば
「map は写像なり」って言い切れるようになりますかね.
> まともな処理系ならコンパイルすれば最適化されると思います。
...
> 可能性は低いと思います。
「なんでも再帰」の相互末尾再帰がカッコいいなと思ったんですけれど,
これじゃちょっと残念ですね.
0136デフォルトの名無しさん
NGNG出来るなら日本語対応の。
馬鹿な質問だからsage
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG(do ((a x (cdr a))
(b '() (cons (f (car a)) b)))
((null? a) (reverse b)))
0139デフォルトの名無しさん
NGNGError: attempt to apply non-procedure 1.
ついやってしまうのだが。
0140デフォルトの名無しさん
NGNG簡単に作れるから規格にはでてないだけでしょう。
(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使わなくても簡潔に書けるかもしれないし。
0141デフォルトの名無しさん
NGNGなんかおれ、構文思い出せなくて、いつもnamed-let使ってますが。
0142デフォルトの名無しさん
NGNG(if (...) ...
(begin .... (loop ...))))
こんな形になるときは使ったほうがいいんじゃない?
(do ((...))
((,,,) ,,,))
....)
ってなるから。
0143デフォルトの名無しさん
NGNG> 簡単に作れるから規格にはでてないだけでしょう。
簡単に作れちゃう scheme だからこそ,モジュール機能が処理系依存なのが
もったいない気持ちになることがありませんか?
> あとmap-in-order使う例を教えてよ。
> 工夫すればmap-in-order使わなくても簡潔に書けるかもしれないし。
>>65-68 では Common Lisp なものの,
先頭から適用されることを期待したコードがあったので,
scheme では map に落とし穴(誰も掘ってない?)があるのを思いだしたんです.
>>136 clisp. 日本Lispユーザー会サイトには処理系ごとの日本語の可否が載ってます.
>>139 私は C で (atan 1) * 4 としてしまう事の方が多いです.
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG>CMUCL should work on the following combinations of operating system
>and architecture:
http://www.cons.org/cmucl/platforms.html
0146デフォルトの名無しさん
NGNGschemeならループか
(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使うのと同じことだけど。
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNGあえてISLISP使うメリットって、あんまりなさそうな気がする。
ISLISPでも動く様に書く、って人はいるかもしれないけど。
でも、日本人が率先して使わなかったら、なんの為の規格なんだろうね。
使ってるとしたら一部の大学とかじゃないかな。
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNGちょっとした計算とかスクリプトに oki lab. の islisp 使っていたけど、サイト消滅しちゃいました。
tisl と OpenLisp は bignum がなくて使いにくいので、今は Ruby を使っていたり。
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGmaximaとか?
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNGのことだろ
0156デフォルトの名無しさん
NGNGの著者だったのね。
0157デフォルトの名無しさん
NGNGおれもそれ最近知った。
だからどう、ってわけでもないけど。
0158デフォルトの名無しさん
NGNGtisl って bignum 無いんだぁ。
更新しないのかなぁ と他力本願してみる。
0159デフォルトの名無しさん
NGNG統計言語GNU R(Sのクローン)はSchemeに皮をかぶせて作ったと聞きましたが,本当?
0160(define (´∀`) 'マターリ)
NGNG過去スレより微分
(define (deriv f)
(if (null? f) '()
(map + (cdr f) (cons 0 (deriv (cdr f))))))
(deriv '(1 2 3))
(2 6)
0161デフォルトの名無しさん
NGNGおかげで、当時はMSのJVMはかなり動作が速かったです。
でも、GC周りをMSの人間が十分把握できなくて、いじれなくなり JVM の開発をやめたという噂も。(ォ
0162デフォルトの名無しさん
NGNGs/(null? f)/(null? (cdr f))/
みたいですよ.なんと言うか,余計にもう一回やろうとしてエラーになります.
「かけ算は足し算の繰り返し.」基本なんですね.
;; 過去スレにあるはずが,ググルからは出てきませんでした.
0163デフォルトの名無しさん
NGNGじゃあ alist を使うメリットって?
設定を書くようなときだけ?
0164(define (´∀`) 'マターリ)
NGNG(if (or (null? f) (null? (cdr f))) '()
(map + (cdr f) (cons 0 (deriv (cdr f))))))
(map + '() (cons 0 '()))
ができんよな。うちのは()を返すけど。
過去スレPart5の786あたりから。別のやり方だけど。
0165デフォルトの名無しさん
NGNGalistは順序が必要なデータ構造、
例えば構文解析用のスタックとして良く使う。
0166162
NGNG> (map + '() (cons 0 '()))
> ができんよな。うちのは()を返すけど。
うちの guile 1.4 はヘコたれてしまいます.
シュガーではなくて,ここで () を返すのが正しいと思うんですが,残念です.
0167デフォルトの名無しさん
NGNGどうですか?
(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"
0168(define (´∀`) 'マターリ)
NGNG(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))))))
0169デフォルトの名無しさん
NGNGcons*とかlist*
つーのがあるよ。どっちも意味は同じ。
(list* 'a 'b 'c) => (a b . c)
0170デフォルトの名無しさん
NGNG0171(define (´∀`) 'マターリ)
NGNG(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))))))
0172デフォルトの名無しさん
NGNGあとでsplitも作ってみます。
正規表現はつかえませんが。
0173デフォルトの名無しさん
NGNGあと、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" "" "")
0174(define (´∀`) 'マターリ)
NGNG(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))))))
0175(define (´∀`) 'マターリ)
NGNGその位置を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)))))
0176デフォルトの名無しさん
NGNG0177dynamic-winder
NGNG(call/cc (lambda (c) (set! conti c)))
(dynamic-wind
(lambda () (conti 'new))
(lambda () 'hoge)
(lambda () 'after))
)
とやると、'afterは、どうなるのでしょうか?
現在tinyscheme-hack中で、どうしましょうと考えているのですが、、、
0178デフォルトの名無しさん
NGNGtinyschemeは色々不具合あるから、動作の参考にはならんと思うが、
継続は、beginとかletのシーケンス上から取ってきた場合と、
トップレベルから取ってきて実行した場合で、動作に違いがある。
トップレベルでの各動作は、仕様が決まってないので処理系に依存する。
petite-schemeの場合、
シーケンス上にあるなら、newnewnewnewnewnewnewnew....
と永遠に繰り返されて、hogeやafterには移らない。
これは多分、どの処理系でも同じ。
トップレベルにあるなら、newを一回実行して停止する。
これもhogeやafterには移らない。
トップレベルをシーケンスとみなさない処理系なら、
この動作になると思う。
0179dynamic-winder
NGNG177です。
ということは、大くの処理系において
まんなかに制御がはいらないかぎり、
いわゆるwind-outは、発動しないのですね。
それは、R5RS(でしたっけ)にありましたっけ?
もしかして、処理依存?
tiny-schemeの目につく不具合(continuation)は、なおしましたが、
他にも不具合があるのでしょうか?
もし知ていれば、おしえてくれませんか?
また、ほかにもっとまともな、小さい処理系があれば、教えてくれませんか?
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG(defmacro defclass (name direct-superclasses direct-slots &rest options)
(expand-defclass name direct-superclasses direct-slots options))
0182178
NGNGbefore区間では継続をまだ取り出してないので、こういう動作になる。
結局この辺は実装を見た方が早い。
call/ccを上書きするdynamic-windのポータブルな実装がWeb上の
どっかにあったと思う。
R5RSにはhogeまで到達した時のbefore/afterの呼び出しタイミング
についてしか言及されてない筈。
tiny-schemeの不具合について昔調べた限りでは、組み込みの
リスト処理関数全般と、内部定義(define)の適用順序がおかしかった。
実装者はセルのポインタ付け替えに慣れてない気がする。
全体的に結構いいかげんな作りなので、もし手を加えていくなら、
元のmini-schemeからの拡張部分は全て疑った方がいいかも。
0183178
NGNG他の小さい実装としては、SECDR-Schemeがお奨め。
中身はmini-schemeの兄弟みたいな物なので、mini-schemeが
読めるなら、難易度的にあんまり変わらない。
ただしこっちはVMで動く。構成はmini-scheme大して変わらないけど、
SECDR(Stack/Env/Code/Dump/Return)という5つのレジスタを使う。
VMからのブートストラップで動くので、解析は多少難しいかもしれない。
schemeコードによるVMへのcompiler/disassemblerが付属する。
速度的にはmini-schemeとたいして変わらないけど、オペコードを
細かくするなり、VMを最適化していけば、それなりの速度にはなるはず。
0184dynamic-winder
NGNGすいません、へたれものでSECDR-Schemeへのポインタが分かりません。
もしよろしければ、SECDR-Schemeへのポインタをしめしてください。
tinyschemeをもそうとう直しているので、
(conitnuation,dynamic-wind,list*,apply,,,,,などなど)
このままいくか、それとも?
でも、小さい実装系のソース元すべてが、
モリワキさんであることは、ちょっと驚き。
日本人は、Lisp/Scheme系が得意なのか?
0185178
NGNGSECDR-Scheme1.0.tgz
ここにアップしました。お早めに。
http://www.42ch.net/UploaderSmall/source/1047314983.tgz
0186dynamic-winder
NGNG内部は、相当おもしろそうですね。
研究してみます。
そもそもなぜこのようなことをしているかというと、
現在、bourne-shellにschemeを組み込もうとしているからです。
(シェルでプログラムをしていて、速度的、機構的限界を感じたため)
0187デフォルトの名無しさん
NGNG完成したら公開きぼんぬ
0188dynamic-winder
NGNG私は、サイズに制限があるために、そのようなことをしていますが、
schemeをshellとして使うなら、scshがありますよ。
EPF,SREなど優れた機構もあります。
0189dynamic-winder
NGNGどんなもんでしょうか?(でも、Cでローレベルサポートの方がいいかも)
transp-letは、
(transp-let let ((a b)) (define c a))
-> (begin (define c '()) (let ((a b)) (set! c a)))
という代物です。
0190dynamic-winder
NGNG((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)))))))
0191dynamic-winder
NGNG(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))))))))
0192dynamic-winder
NGNG0193デフォルトの名無しさん
NGNG0194名無しさん@Emacs
NGNGnavi2ch使ってないんですか?
0195デフォルトの名無しさん
NGNG[14]> (defgeneric price (x) (:method-combination +))
*** - DEFGENERIC PRICE: The only valid method combination is STANDARD : (:METHOD
-COMBINATION +)
こんなん出るんですが・・・
0196178
NGNGclos.lispに
> ;; 3. Apply method combination:
> ;; Only STANDARD method-combination is implemented.
って、書いてあるよ。
0197178
NGNGhttp://zurich.ai.mit.edu/pipermail/rrrs-authors/1992-August/001461.html
これがdynamic-windのポータブルなやつ。
mini-schemeとかでも動くと思う。
0198195
NGNGありがとうございます
clos.lispなんて一回も目を通していませんでした>反省しる!オレ
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGマジですか!?教えてください。お願いします。
ちなみにこれってどうですか?
ttp://www.lispworks.com/downloads/lw-personal-edition.html
0202デフォルトの名無しさん
NGNGxyzzyはDLLの関数を呼べるんで、
(require "wip/winapi")
(c:define-dll-entry winapi:HWND CreateWindow (引数) "user32")
などとしてやる。
詳しいことはMLなど参照。
xyzzy Mailing List Archive
ttp://www3.tok2.com/home/xyzzy/
lispworksは知らない。
0203デフォルトの名無しさん
NGNG最高にサンクスです。LISPでWINGUIができるとは夢のようです。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNGschemeのappendをどなたか lambda式で書いてくれませんか?
0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNGジョークですか?
R5RSの関数って、いや結構例外多いなと思いまして、、
multi-arg-applyって?
何につかうんでしょうか?
0209デフォルトの名無しさん
NGNG(let rec ((x ())
(l lst))
(if (null? x)
(if (null? l)
()
(rec (car l) (cdr l)))
(cons (car x) (rec (cdr x) l)))))
0210デフォルトの名無しさん
NGNG(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)
最後のリストはコピーしない。
いま作ったやつだから、間違ってるかも。
0211デフォルトの名無しさん
NGNGおそらく
(if (null? l)
()
(rec ...)
このへんがちょっとちがう
それは、まあべつに難しかないですが、
なんでこれほど複雑にしなければならないのかが
分からない。
0212デフォルトの名無しさん
NGNGそのために実行速度を無用に落としているような、、、
特に無引数のappendは解せない。
このようなappendが使われるのは、
歴史的理由でしょうか?それも何か理由があってでしょうか?
0213デフォルトの名無しさん
NGNGwin98で実行したら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は大丈夫だったが、
おまえらの使ってる処理系では大丈夫ですか?
0214デフォルトの名無しさん
NGNG(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))))
0215デフォルトの名無しさん
NGNG気にしないでください。
0216デフォルトの名無しさん
NGNG略しすぎ。
何言わんとしてるんだかさっぱりわかんね。
>ifが、末尾の場合にしか効いてなくて、
>そのために実行速度を無用に落としているような、、、
?
セルを消費するのを効率悪いと言ってるのなら、
append!という破壊関数もあるけど。
>特に無引数のappendは解せない。
(append)
のことか?
これが何か?
>このようなappendが使われるのは、
>歴史的理由でしょうか?それも何か理由があってでしょうか?
appendは昔からあるから、歴史的理由なんじゃないかな。
知らんけど。
0217デフォルトの名無しさん
NGNGってなんで通らないの?
ラムダ式って引数にできないの?
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNGすいません・・・lisperの道は遠いなぁ。
今までC++しか触ってなかったからとまどってしまう。
確かに凄い言語だと思うけどね。
特にマクロは凄い、と思う(自身ないけど)
0221(define (´∀`) 'マターリ)
NGNG(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セルを少なくしたかったからでしょう。
0222(define (´∀`) 'マターリ)
NGNG(defun func (x) (* x x)) とか
(let ((func (lambda (x) (* x x)))
(funcall func 6))
とかなら動くんじゃない?
0223(define (´∀`) 'マターリ)
NGNG(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)))))
0224デフォルトの名無しさん
NGNGやりたいのはこうかな?
(defmacro func (f x)
`(,f ,x))
(func (lambda (x) (* x x)) 6)
0225デフォルトの名無しさん
NGNG0226217
NGNG(defmacro func (x &rest rst)
`(,f ,@rst))
0227224=226
NGNG0228224=226
NGNG(defmacro (f &rest rst)
`(,f ,@rst))
0229デフォルトの名無しさん
NGNG最近schemeの勉強し始めたばかりなんですが、
有理数を使える処理系を教えてください。
0230デフォルトの名無しさん
NGNGkawa Scheme
MIT Scheme
(Petite)Chez Scheme
は使えるよ。>有理数
0231append の はなし
NGNG無引数の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 と考える人がいた場合、
それもまた合理的であり、人の考えかたによって左右されるようなものを
標準とするのは、どうも納得がいかないというところがあります。
0232デフォルトの名無しさん
NGNG0233append の はなし
NGNGappendの引数を、最低1つにするという
まあ、内部構造からすると自然なことをどうしてしないのか?
過去との互換性で、そのようになっているのだとすれば、
どのようなときに重要になってくるのか、
これがあるから外せないという場面、
を知りたいなとおもいまして、、、、
0234デフォルトの名無しさん
NGNG論理構造としてそうあるべきだから。
それが嫌なら、(+) => 0。(*) => 1、(and)=>#t、(or)=>#f
もダメだよね。
0235append の はなし
NGNG本当にそうですか?
andは、順次評価していき、
すべて評価しおわったときに#tになるというのは分かります。
R5RSのマクロを見れば分かります。
しかし、appendは、それとおなじように定義しようとしても、
論理構造として、そうあるべきとは、なりません。
それは、引数一つのappend が、それそのものであるように、
どのようにしても引数一個の状態を再帰的に引数ゼロ個の場合を
使って定義できないというところに問題があるのです。
ちなみに
(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
したがって(+ NIL) => 0 となります。分かっているとおもいますが、、
0236append の はなし
NGNG(append a) => (append a (append NIL)) => copyed-list-a
となります。
a => (c d . e) だったばあい、
どうしようもないような
気がします。
0237デフォルトの名無しさん
NGNG内部定義って、どうして直接参照不可なの?
コンパイラ内の最適化を促すため?
(let ()
(define ada '())
(define aba '())
(set! ada ...)
(set! aba ...) ...)
なんてやられたら、あんまかわらんような?
0238デフォルトの名無しさん
NGNG>(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.
これで何を判れと?
もしかしてドット対の事を言ってるの?
0239(define (´∀`) 'マターリ)
NGNG(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 にならないといけないようなので。
0240デフォルトの名無しさん
NGNGつーか、どうもおかしいな。
一回でも処理系さわった事ある?
ちなみに、1個以上の引数を取りたいなら、
(define (append x . y) 〜)
という方法もあるんだが。
0241デフォルトの名無しさん
NGNGそれからCommon Lispって今でもまともに使っても大丈夫な言語ですか?
0242デフォルトの名無しさん
NGNG((car '(+ - *)) 1 2) => Error: attempt to apply non-procedure +.
なんでですか?
0243(define (´∀`) 'マターリ)
NGNG((car (list + - *)) 1 2) => 3
0244242(勉強中)
NGNGありがとうございます。
quateとlistのまだ違いがわかってないようです。
(define a 1)
(list + a 2) => (#<procedure +> 1 2)
(quote (+ a 2)) => (+ a 2)
確かに結果がちがいますね。ゆっくり勉強します。
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG>考え方の前提がおかしいんじゃないか?
>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 '())
0247デフォルトの名無しさん
NGNG(atom-flatten '(a b c (d e f ()) d ()))
-> '(a b c d e f () d ())
0248デフォルトの名無しさん
NGNGもしかして
'(a b c d e) => '(a b c d e ())
とおもっていませんか?
(とかんがえれば、あなたのいっていることが通じる。
そうでなければ、もうしわけない)
'(a b c d e) => '(a b c d e . ())
ですよね,,,
0249238
NGNGまずね、
ちゃんと読め。
>>235の、
>(+ a b c NIL) => (+ a (+ b c NIL)) => (+ a (+ b (+ c NIL))) => (+ a (+ b (+ c (+ NIL))))
>したがって(+ NIL) => 0 となります。分かっているとおもいますが、、
これは、ドット対のつもりだったのか?
ちなみにschemeではNILと書いてもただのシンボルであって、
defineされてなければエラーになる。
この前提さえ間違ってるから、既に話がかみ合ってない。
0250238,240
NGNG>>246
>(append '()) なのか (append . '()) なのか 書いてください。
(append) もしくは (append . ())
ね。
所で、>>240 の話は無視ですか?
>>246
>(length) -> ?
>つまり、(length . '()) -> ?
これは単にエラーにすべき。
なぜならlengthは1引数を取る関数と定義されているので。
で、気になったのは、
君は固定引数の関数についてさえ、引数足りてなかったら、
定義と無関係に、勝手に#fを返す様にしたいのか?
それを仮に踏まえたとすると、
例えばこれはどうなるの?
((lambda(x) x))
エラーとせずに、#fを返すの?
0251238,240
NGNG>もしかして
>'(a b c d e) => '(a b c d e ())
>とおもっていませんか?
おもっていません。
もしかしてバカにされてるのかなあ。
0252246
NGNGNIL == . '() とすれば、あっているでしょうが、
NILのときは、きばってかきませんでしたが、
どうしてもというので246にきばってかいています。
それをよんでいないのは、あなたでしょう。
(そのようなことは、いわれずともわかっています。
処理系も複数個よんでいます。)
ところで、あなたが、238で不明瞭だった点を明かしていません。
>appendの'()を否定するって事は、
(append '()) ですか? (append . '())ですか?
0253246
NGNGの記事は、時間がずれておりました。
もうしわけありません。なかったことにしてください。
#fを返すのいみがわかっていただけてないようです。
つまり、appendが無引数でよばれるような状態つまり、
(append . '())はエラーでもかまわないのではないかといっているのです。
0254246
NGNG申し訳ありません。
記事そのものにも書いておきましたが。
でも、じっさいあなたの書いた
>238
の記事には、(しかも、すべて)そうありましたが、、、、
簡略のためにかいたというのでしたら、指摘の行き過ぎでした、
申し訳ありません。
0255246
NGNGappendは、
r5rsにのってある関数で、標準関数として登録されています。
それは、無引数のappendを受けつけるようになっています。
そこで、
私の疑問は、そのわりに、どうしてこのようになっているのか
知りたいというものでした。
0256238,240
NGNG>(append '()) ですか? (append . '())ですか?
それは>>250で書いたので読み返してね。
>>253
>つまり、appendが無引数でよばれるような状態つまり、
>(append . '())はエラーでもかまわないのではないかといっているのです。
appendは可変個の引数、つまり
「0(または1)個以上の引数を取る」
とは考えられないのかな。
それが嫌なら>>240の様に引数の個数を強制しろって
事を言いたかったんだけど、伝わってないみたいね。
>>255
今R5RSを見た限りでは、
(append list ...)
と書いてあるから、(listと...を別個に解釈して、)
1個以上の引数を取る様にも見えるなあ。
まあどっちでもいいけど。
0257246
NGNG#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が一個邪魔なようなきがします。
まあ、それだけといえばそれだけですが、
ちょっと関数の返り値に関連性がないなとおもいまして、、、
0258デフォルトの名無しさん
NGNG0259(define (´∀`) 'マターリ)
NGNG(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)))))))
0260デフォルトの名無しさん
NGNGappendが無引数を許すようになっているのは、ほとんどの実装では
(append ())と(append)の内部表現が同じだからである。(ここで()はquoteされていないことに注意せよ)
そして違う内部表現を使ってこれを識別できるようにすると実装の効率がものすご〜く悪くなる。(重要:そうする必要もないしね)
ちなみにappendのR5RSでの定義は
(append list ...) 「0個以上のリストを引数に取る(Cとちがって1個以上とは読まないことに注意せよ)」
でも、R5RSには最後の引数はなんでも良いと書いてある。
(append '(1 2) 3) -> (1 2 . 3)
が動作するのはその為だ。
結局のところ「大人ってズルイ」ってことかもね。
0261260
NGNG「(append . ())と(append)の内部表現が同じ」だった^^;
0262260
NGNG>(append . '())はエラーでもかまわないのではないかといっているのです。
ちなみに、これは普通の実装なら立派なシンタックスエラーとなる。
なぜなら(append quote ())と同じ内部表現となるからだ。
若者よ、精進じゃ!
0263260
NGNG. の右側に引数を書くのってあり?と思う者もいるかもしれないので、念のため
「ありじゃ」
(list . (1 2)) -> (1 2)
年寄りは小便の切れが悪くてすまん m(_ _)m
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGhttp://www.rojoma.com/~robertm/clike/
MzScheme と Guile でしか使えないけど。
なんでscheme自身で書かないんだろう。
0266デフォルトの名無しさん
NGNGhttp://homepage3.nifty.com/digikei/
0267デフォルトの名無しさん
NGNG例えば
(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 してしまえば問題ないわけですが、それだと名前がよごれるのでこれはどうする
のがふつうなんでしょうか。
0268268
NGNG0269デフォルトの名無しさん
NGNG必要な名前だけimportすりゃいいんじゃないの?
0270デフォルトの名無しさん
NGNGなんていうか、動くようにすることはできるのです。
しかし例えば、いろいろな数値クラスに to-string を定義して
ストリーム出力を全部それでやってもらうときなんかに
ストリームの方で全部 import しなくちゃならないんで、なんか変だなあと思うのですが。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG逆に型推論だけLISPやSchemeに持ってこれないものですか?
リスト構造的に全体で使うのは無理だから、
例えば数値→数値の時だけ使うとか。
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNGランチャから新しいプロセスを開始できなかったりする.
(bye) すると急にスタンバイしたり新しいアプリが始まる.
これはWin98が悪いのか?CLISPが悪いのか?漏れのマシンの低スペックが悪いのか?
別にいいんだけどさ.
あと誰かCLISPのForeign Function InterfaceのWindozeにおける可能性と使い方を
解説してるサイト見つけたら教えて.
0277デフォルトの名無しさん
NGNGCLISP FFI でぐぐったら日本のページほとんどヒットしなかった。
とりあえずperlのinline Cみたいな事をする試み?
http://www.stat.uiowa.edu/~luke/xls/projects/callback/callback.html
より高性能なcmuclのwindows-portがあれば話は早いんだろうけど、
なんで頓挫しちゃったんだろうねえ。
0278デフォルトの名無しさん
NGNGhttp://book.2ch.net/test/read.cgi/bizplus/1048561280/l50
から来ました〜
>>123
ttp://www2b.biglobe.ne.jp/~houmei/restore/ai1000/
0279デフォルトの名無しさん
NGNGwin2kで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にならないのはバグですか、仕様ですか?
0280デフォルトの名無しさん
NGNG浮動小数点の精度の限界でそ
有理数が使えるのなら、それを使うのも手
0281デフォルトの名無しさん
NGNGGUI を作成可能なフリーの Common Lisp 処理系がありましたら教えて下さい。
0282デフォルトの名無しさん
NGNG正規表現の最短マッチというのはないのでしょうか?
0283デフォルトの名無しさん
NGNGUNIX系だとX用があるみたい。
http://www.cliki.net/Graphics%20Toolkit
http://www.cliki.net/index
Windowsだと聞いたことないな。
cygwin経由で使うか、xemacs,xyzzyとか。
0284デフォルトの名無しさん
NGNGpregexpでできるよ
http://www.ccs.neu.edu/home/dorai/pregexp/pregexp.html
のマニュアルの
3.3.2 Non-greedy quantifiers
参照。
0285デフォルトの名無しさん
NGNGLispWorksというところの処理系が教育用にフリーで(制限付きだが)開放されていた.
それはたしかGUIが開けたはず.
0287281
NGNGどうもありがとうございます。
環境も書かずに済みません。今、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 を使って
みようかとも考えています。取り敢えずは処理系を色々と試してみるつもりです。
どうもありがとうございました。
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNGext以下のcharconvとかuvectorとかがうまく
コンパイルできないのですが、私だけでしょうか?
0291デフォルトの名無しさん
NGNG0293290
NGNG調べてなかったすいません
逝ってきます
0294デフォルトの名無しさん
NGNGうちはいくつかmake後のtestかなんかでエラーでたけど、
簡単な動作やった限り、特に支障はなかったよ。あんまり参考にならんか。
例のPerl.scmを公開してるページに書いてある方法に習った。
cygwinのパッケージは、一から入れ直して、Develop全部落とした。
一週間ぐらい前の話。
gcc -v
gcc version 3.2 20020927 (prerelease)
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNG別にいいんじゃない。ちゃんと処理系として成り立っているのなら。
0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNGども。ドキュメントには emacs lisp と common lisp と scheme の良いトコ取り
と書いてあります。gnome が入っていれば、大抵 rep と rep-gtk もインストール
されているので、可搬性が高いかなと思ってます。
0299デフォルトの名無しさん
NGNGということが多い気がする
0300デフォルトの名無しさん
NGNG日本人じゃないの?
0301デフォルトの名無しさん
NGNGワロタ
http://www.melt.kyutech.ac.jp/~melt/Seminars/SICP/
0302デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme/gauche/index-j.html
2003/3/30
Gauche release 0.6.8: メンテナンスリリース
0303デフォルトの名無しさん
NGNG↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
0304デフォルトの名無しさん
NGNGlet* があれば let は必要ないと思うのですが,
必要なのですか?
0305デフォルトの名無しさん
NGNGこういうのを総称型っていうのかな。
(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"
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNG意味違うじゃん。
(let ((x (+ x 1))(y x)) ...)
の様な時に困る。
そもそもlambdaの直呼び出しの構文唐だから、
let*より存在意義あるよ。
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNGこんなのどうでしょ。
(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)))
0310デフォルトの名無しさん
NGNG文字列と数値に限定するのは、まずいんではないかと。
0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNGx->numberはgauche.
引数の型によるディスパッチはCLOS系OOを持ってる処理系なら
使えるね。stklos, guile, gaucheあたり?
0313デフォルトの名無しさん
NGNGマルチに改造して使ってます。結局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))
左みたいな構文糖衣のトランスレーター作りたくなる。
0314デフォルトの名無しさん
NGNG簡単だし、やったこともある。
でも obj.m(x)は素直にやるとobj.m と (x)に分かれちゃうなあ。
0316デフォルトの名無しさん
NGNG0317313
NGNGデータとしてのS式は否定しないけど、
開発効率が全然違います。
pregexp.scmを逆変換自動生成したsample
http://210.143.102.80/upload/source/d/1340.zip
この逆変換自動生成もML風言語による成果物です。
0318313
NGNG0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGACLはどう?
http://www.franz.com/downloads/
60日間のトライアルライセンスだけど
何回でも延長できる。
0321320
NGNGhttp://jp.franz.com/doodler/index-j.htm
0322デフォルトの名無しさん
NGNG> 開発効率が全然違います。
という根拠は?
「見た目」が多少違うぐらいで変わるとは思えないが
0323313
NGNGsample見てもらえば判ると思いますが、
いくつか列挙すると、
・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
→S式だと括弧の対応を常に気にする必要あり。エディタの補助必要。
・ネストが減る。
→S式だとlet多用するだけで地獄。
・意味的な違いはほとんどないので、大抵のschemeのコードなら逆変換してメンテできる。
・良く使う関数を演算子として書ける。
string-append("a" "b" "c" ...) → "a" + "b" + "c" ...
これだけでも全然違います。
S式定数はそのまま埋めこめる様になってるんで、
移行の手間はありませんでした。
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG> ・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
特定のエディタを常に使用しているのなら問題無い
> S式だと括弧の対応を常に気にする必要あり。エディタの補助必要。
エディタの補助があるから括弧を自分で気にする必要が無い。
> ・ネストが減る。
> →S式だとlet多用するだけで地獄。
インデントレベルが違ってみえるだけでは?
インデントルール次第でなんとでも
> ・良く使う関数を演算子として書ける。
> string-append("a" "b" "c" ...) → "a" + "b" + "c" ...
(define s+ string-append)
としても同じようなものだし、構文すらいじっていない。
結局、好みの問題ということでは?
どれも S式を凌駕するような特徴には思えないんだが
0326デフォルトの名無しさん
NGNG勝手に作れば?という突っ込みは無し?
>>323
>> ・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
>特定のエディタを常に使用しているのなら問題無い
こ、答えになってないよ
>結局、好みの問題ということでは?
結局これでしょ。
>どれも S式を凌駕するような特徴には思えないんだが
ある意味で判るが、明確な根拠は?
0327デフォルトの名無しさん
NGNG>>> ・構文間違いがあっても特定しやすい。(適切なエラーとして検出できる可能性が高い。)エディタの補助不要。
>>特定のエディタを常に使用しているのなら問題無い
>こ、答えになってないよ
つまり、エディタが面倒なとこは補助してくれる、ってこと
>>結局、好みの問題ということでは?
>結局これでしょ。
>317 では
> 開発効率が全然違います。
といっているのだが? まるで根本から違うかのような書き方をして。
>>どれも S式を凌駕するような特徴には思えないんだが
>ある意味で判るが、明確な根拠は?
データとプログラムの表現が同じであるということ。
それ以外は 「見た目が多少違う」 程度だし。
あなたのいう 「ある意味」 とは?
0328デフォルトの名無しさん
NGNG0329324
NGNGそれとも,そういうのが専門の人だけ?
0330デフォルトの名無しさん
NGNG分野にもよるけど、マクロがまともに使えないと開発効率は下がる気がする。
0331デフォルトの名無しさん
NGNG今でも一番愛する言語は scheme だけど,
a.foo(x).bar(y).baz(z)[i]
の味を覚えてしまって,
(list-ref (baz (bar (foo a x) y) z) i)
が正直ちょっとつらく…
0332デフォルトの名無しさん
NGNG見た目を変換してるだけで。
0333326
NGNG>つまり、エディタが面倒なとこは補助してくれる、ってこと
いや、だから。つまり313=323さんは、S式を快適に使うには
エディタの補助が必要という点が、欠点だと言ってるのでしょ?
それを327さんは反論?としてエディタの補助が有れば良いというのが
それでは313=323さんの発言を認めているんじゃ・・・・ということです。
それとも私が勘違いしている?
0334デフォルトの名無しさん
NGNG「S 式は開発効率が高いか否か」という話をしているのでは?
エディタの補助についての議論は、正直どうでもいいんですけど、
S 式を採用している Lisp が他の言語と比べて開発効率が高い理由の 1 つは、
マクロを使って、ユーザが新しい構文を作ったり、対象としている問題に
適した言語を作ったりできることだと思うので、
S 式をやめて ML 風の記法を採用することによって、 >>327 の言う
> データとプログラムの表現が同じであるということ。
が失われてしまうと、マクロによる利点がなくなってしまい、
得るものより、失うもののほうが大きいのではないかと思います。
もちろん、対象とする問題によっては ML 風の記法のほうが開発効率
が高いことはあるでしょうが。
0335313
NGNG自分としてはデータ表現のS式は有効だと感じてますが、
コードにまでそれを強制する必要はないと思ってます。
S式を捨てるというわけではないです。
(というか、S式にかなりの部分依存してます。)
それと、S式の出力が欲しい時はいつでもexpandできるので、
逆変換してもcondとか以外は元通りになります。
繰り返しますが、エディタの補助がいらないのは十分なメリットです。
いつでもemacsなどを使える状況とは限らないし、
メモ帳しか知らない人でも楽に記述できます。
S式と比べて、記述したり修正する時間はだいたい半分以下です。
0336313
NGNGマクロも普通の関数と同様に定義できます。
(基本的に評価規則は変化しない)
ただし、今のところ目的コードは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"
となります。(+を総称化してれば不用ですが)
0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNGDylan風味?
確かにemacs使えない環境で編集しなくちゃならいときS式は辛い。
しかし逆にemacs使える環境では、\M-\C-tとか\M-\C-SPCとか
使いまくるとめちゃくちゃ効率が良くてもう戻れない。
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNGメモ帳(程度の編集環境)しか使えない環境というのは有り得るんでは。
クライアントの手元のPCで設定直すとか。
0342デフォルトの名無しさん
NGNG> 開発効率が全然違います。
というのは、まともなエディタが無い、という通常はまず無いような状況を
あたかもよくある状況であるかのように前提を設定した場合、ということ?
0343デフォルトの名無しさん
NGNGつーかS式は元々人間には読みずらいから、こういうフロントエンドを
作るってのは有効だろう。(ただGuileのC-likeはやりすぎな気がする。
あっちはS式捨ててるし。)
CommonLispやEmacsLispでもこういうのがあればいいな。
0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNGLispWorks ってどうよ?
Personal Edition はダウンロードしてみたんだけど、
使い込んでいる人の感想希望。
やっぱ、ACL よりはしょぼいのかねぇ。
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG>やっぱ、ACL よりはしょぼいのかねぇ。
そういう事は試してから言え
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG実際のところXMLのタグ記法よりはマシって程度じゃない?
pretty-print必須だし。
そういやPaulGrahamが新しい方言作ってたみたいだけど、
結局S式が枷になってる風に見えたよ。
0351デフォルトの名無しさん
NGNGpretty-print が必要なのはS式に限らず、ほぼどんな構文でも同じだし
少なくとも、わしにゃ1番読みやすい
0352デフォルトの名無しさん
NGNGlist 処理多用するようなとこだと、かえって読み書きがつらそうな感じがした。
mexp 派の人はそうでもないのかな?
0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNGたしかmeta expression
0355デフォルトの名無しさん
NGNGって、>>348か。マンセーならM式を説明してみろ
0356デフォルトの名無しさん
NGNGほれ
ttp://www.em.edu.waseda.ac.jp/~moriya/education/CAI/infomath3/LISP.pdf
>>352
Lispだってリスト表現は、ドット表現を変換したものだし・・・
だいたいM式もS式も相互変換可能だし・・・
見た目や書きやすさ印象は別にして強さは、一緒のはず
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNGそのリンクの内容じゃ説明になってないだろ。
そもそもM式をそこで使う意味がわからん。
0359デフォルトの名無しさん
NGNGうん、もちろん強さは同じだから、見た目とか書きやすさの問題として。
defun とか cond とかは楽しいんだけど…
セミコロンも、 S式の括弧みたいに、慣れれば気にならなくなるのかな…
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGM式言ってる人は、使ったことあるの?
0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNGでもウィンストンの本がはやってS式だけになった。
結局理論より実用優先。
0364デフォルトの名無しさん
NGNGMLとかHaskellってM式じゃなかった?
Lispとは大分ちがうけど
0365かおりん祭り
NGNG〜oノノハヽo〜
( ^▽^)/⌒\ , −-
((ニ[二=( こんなのがございま−−==≡≡す♪ ))
/∧=:|| \_/ `ー‐‐'
じ/___/
0366デフォルトの名無しさん
NGNGぜんぜん違うだろ。
適当な事言うな。
0367デフォルトの名無しさん
NGNGCPSで書くときもidentityあればいいし。
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNG理論って?
実用って?
具体的には何をさしてるの?
0371デフォルトの名無しさん
NGNGxyzzy
emacs
で慣らすとか。
0372デフォルトの名無しさん
NGNG>理論って?
純数学とか基礎論とか透明参照性とか・・・
>実用って?
手続きとか副作用とか構文糖とか・・・・
てっところ?みんなは如何思う?
>>368
schemeだけどDr.Scheme
へぼいけどbiggnerモードのstepperは魅力的
0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNG簡単に言うと、call/ccで渡された継続を関数形式で呼び出すと、
いつでもその継続を取得した直後に制御が移る、
でいいんじゃないかな。
0375368
NGNGこのスレ的にはschemeというのが優性っぽいですね。
違いがまだちょっとわからないですけど。
0376デフォルトの名無しさん
NGNG簡単に言えばスレッドみたいなもんだ。
(call/ccの実装でスレッドを使っているものが多いし)
call/ccでスレッドを停止し、そのスレッドを返す。
もちろん受け取ったスレッドは、何時でも(元の環境下で)再開できる。
0377デフォルトの名無しさん
NGNG> 簡単に言えばスレッドみたいなもんだ。
違うし
継続は継続であってスレッドではない
継続を用いてスレッド (というかコルーチン) を実現することは可能だが、
それは本質ではない。
このあたりはちゃんと理解しておいた方がよい。たとえあまり使わないとしても。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG>違うし
そのとおり。
>継続は継続であってスレッドではない
名前が違うし。(藁
判らん人に理解を促そうとしてるのに、変なツッコミ入れるね。
数学屋なの?
0380デフォルトの名無しさん
NGNGs/理解/誤解/ であろ。
人にものを説明するスキルがないと思われ。
0382377
NGNGたんに指摘しただけで一切説明はしようとしていないし
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG>>373 以上のレスは出ないような。
0387379
NGNG>>379-380
>たんに指摘しただけで一切説明はしようとしていないし
で、何を指摘したかったの? 0文字以上1文字未満で答えよ。
>>380
>s/理解/誤解/ であろ。
Lisperがperl使うなー。
>人にものを説明するスキルがないと思われ。
そかも。消えます。
0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNG>>374
アセンブラのjump先のラベルみたいなもの
0390デフォルトの名無しさん
NGNGその時点でのスタックの中身
0391デフォルトの名無しさん
NGNG>>s/理解/誤解/ であろ。
>Lisperがperl使うなー。
これが perl?
0392デフォルトの名無しさん
NGNG突っ込まれたいとしか思えない
0393381
NGNGヒットした 16 件を全部読んだら継続について理解出来るはず。
それでも駄目だったら gauche-devel-jp の過去ログを見れば幸せになれるよ。
0394374
NGNG(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の返り値になる。
0395374
NGNG(let ((x (call/cc (lambda (k) k))))
(x (lambda (ignore) "hi")))
⇒"hi"
…わかりません。
どうやら、xに継続?が入るらしいのですが・・・。
(((call/cc (lambda (k) k)) (lambda (x) x)) "HEY!")
⇒"HEY!"
…謎。
こんな感じですが、よきアドバイス期待しております。
0396373=394=395
NGNG0397デフォルトの名無しさん
NGNG(display x)(newline)
(x (lambda (ignore) "hi")))
とかで x の束縛を表示すると理解しやすいかもしれません。
0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGkに継続が渡されて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!"
0400デフォルトの名無しさん
NGNG(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"
0401デフォルトの名無しさん
NGNGみなさんどれを使ってますか?
aclはちょっと高いから別物だとしても
他の三つの違いがいまいち分りません。
0402デフォルトの名無しさん
NGNG0403デフォルトの名無しさん
NGNGgcl の開発って続いているの?
GNU では gcl よりも clisp が良さそうだけど.
0404デフォルトの名無しさん
NGNGもっといろいろあってもいいと思うのに。
0405デフォルトの名無しさん
NGNGSRFI-1
0406404
NGNGどうも。助かりました。
0407デフォルトの名無しさん
NGNG例外以外に使えるネタは無いのか?
良いイディオムは無いのか?
誰か教えて。
0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGだと、場合によっては面倒だよね。
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG継続という概念が登場してきた歴史を勉強してくらさい
そうすれば、その存在理由もわかりまっす
0412デフォルトの名無しさん
NGNGScheme48系はイメージを作って配布できるっぽい。
イメージとコアの2ファイルがいる。
0413デフォルトの名無しさん
NGNG0414407
NGNG馬鹿なので判りません。
出来れば教えてください。
0415デフォルトの名無しさん
NGNG「継続の使い方」
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html
というのがあった。
内容はコルーチンどまりだけど。
>>414
継続の歴史は、
Reynolds "The Discoveries of Continuations"
をがんばって読もう。
0416デフォルトの名無しさん
NGNGコルーチンの例が set! 使っててイヤン
0417デフォルトの名無しさん
NGNG情報キボンヌ
書類どっかにいった…
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNGどこらへんが?
トレースとかのデバッグ機能が普通はあるはずだが。
関数単位のテストが簡単にできたりとかもするし。
0421デフォルトの名無しさん
NGNGどの処理系使うかでぜんぜん違うでしょ。
普通なんていう言葉は、正確には定義できないので
使わないようにしましょう。
0422デフォルトの名無しさん
NGNGだからこそ「普通は」といってるわけで
0423Scheme 大好き
NGNG1. 現在使っている処理系は何ですか?
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 を選んだ (?) のは何故ですか?
0424デフォルトの名無しさん
NGNGエラーなのか、文字#\nとシンボルewlinrに分けるべきか、
どっちが正しいんでしょうか?
0425デフォルトの名無しさん
NGNGIf <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
0426山崎渉
NGNG0427デフォルトの名無しさん
NGNGChezSchemeはエラー
0428デフォルトの名無しさん
NGNGILISP では #\あ => Error: Wrong character name: あ. とエラーになる。
どうしてだろう?
0429デフォルトの名無しさん
NGNGttp://jp.franz.com/
0430デフォルトの名無しさん
NGNG日本語に対応してないってだけでわ?
0431山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0432山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0433デフォルトの名無しさん
NGNG苫米地ちゃん来るのかにょ?
0434デフォルトの名無しさん
NGNGどうやら、コンソールだとだめっぽい。
load すれば大丈夫だから、*terminal-io* が日本語だめなのかも。
日本語使うときはILISPあきらめて、IDEかな。
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNGメモリ消費しまくりだと思った。
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNGhttp://sbcl-internals.cliki.net/index
0440デフォルトの名無しさん
NGNGwww.ksky.ne.jp/~sakae/sicp/schemers-vi.html
0441デフォルトの名無しさん
NGNG#if 条件式(S式)
〜
#else
〜
#endif
を書ける様にするのはどうでしょうか?
cppと違い、#ifの条件式にlispやschemeのS式を直接書ける利点があります。
それに、ブロックコメントの#|〜|#と同じ様に、切りだし規則が
S式と分離してるので、
(if 式
(define hoge 〜)
(define hoge 〜))
の様に、括弧の数を合わせたりする必要がない。
(define hoge
#if (eqv? version ...)
〜)
#else
〜)
#endif
自分の処理系にhookとして入れてありますが、
開発のバージョンで切り分けるときなどに重宝してます。
0442デフォルトの名無しさん
NGNG#q/〜/
で文字列引用符の切り替え(この場合#\"→#\/)、
#<<END
〜
END
でperlのヒアドキュメントなど。
0443デフォルトの名無しさん
NGNG普通にifやcond使えばいいだけで魅力はないな。
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNGこれはよさそうだね。
CommonLispの場合はマクロ文字で似たような事はできる
(ただしあくまでも文字なので#if〜とは書けない)と思うけど、
schemeだと処理系に依存してしまう状況だからねぇ。
>>442のヒアドキュメントも欲しい。
SRFI辺りに取り込んでもいい気がする。
Gaucheもこういうの入れてくれないかな。
0446デフォルトの名無しさん
NGNGプリプロセッサ的なものはあってもいいけど(マクロでできるけど組み込みであると便利)、漏れはカッコの対応をエディタまかせなんで、対応がとれなくていいってのはあんまりメリットないなあ。
伝統的にやるならCommonLispの #+ と #- だろうけど、あれはあれで見にくい。
0447デフォルトの名無しさん
NGNGPetite Chez Scheme Version 6.0a
> '.
Error in read: unexpected dot (.).
> '..
..
> '...
...
> '....
....
> '.....
.....
> '.emacs
.emacs
ちょっと謎。
あと、
> '|.|
|.|
> '|..|
..
> '||
||
> (define (|| x) x)
> (|| 1)
1
縦棒|をシンボルとして使いたいんですが、そういう場合はどうすれば?
0448デフォルトの名無しさん
NGNG>[ ] { } |
> Left and right square brackets and curly braces and vertical bar
> are reserved for possible future extensions to the language.
0449デフォルトの名無しさん
NGNGfib[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/
0450デフォルトの名無しさん
NGNGでもちょっと実装がアレだった記憶が…
0451デフォルトの名無しさん
NGNGもったいないね。
たぶんPetiteとタメ張れるインタプリタってこれぐらいじゃない?
0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNGlinuxに組み込みだってぽ
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG(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 とかって末尾再帰にはなってないんでつか
0457デフォルトの名無しさん
NGNG(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)は効率がとても悪いです。何故でしょう?
0458デフォルトの名無しさん
NGNG全部末尾呼び出しになってないよ
0459デフォルトの名無しさん
NGNG(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))))
0460456
NGNG勉強になるです.
>>457
append するのにリストの尻までたどらなければならないけど
reverse する場合はそれが一回でいいから?
>>458
関数の一番最後のカタマリの中にさえ
呼び出しがあれば末尾だとおもいこんでますた……
軽く首つってきます
>>456
カコイイですアリガトウゴザイマス
0461デフォルトの名無しさん
NGNG(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)))))
0462デフォルトの名無しさん
NGNG(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)))))
0464デフォルトの名無しさん
NGNG(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))))))
0465デフォルトの名無しさん
NGNGちなみにそれも末尾呼び出しになってない。
0466464
NGNGってぐらいの意味だったんですけどね。
最近は末尾再帰でなくてもいいや、動けばいいやって感じです。
(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))))))
いつの日にか自動的に変換してくれますように。
0467デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#rec2tailrec
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGhttp://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
0477デフォルトの名無しさん
NGNG同時に括弧がマズーと思った。
0478デフォルトの名無しさん
NGNGそう思って ML とか Dylan とか使ってみたけど、今度は逆に括弧が無いのが気になった。
Lisp/Scheme のコードを沢山読んでると括弧が無い方が変に見える。俺おかしいかな?
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNGZ80でLISP動いてたのか。
Oh!MZにお世話になった人のスレ
http://pc.2ch.net/test/read.cgi/i4004/1009098920/
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNGこれでついに胸ポケットにScheme。
0485デフォルトの名無しさん
NGNGShift JIS なせいで日本語は厳しかったような。
0486デフォルトの名無しさん
NGNGバイトコードコンパイラじゃないやつ。日本語が通るやつ。
0487デフォルトの名無しさん
NGNG素人なのでよくわかりませんが、
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はトップレベルから下は
使えない様な。
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG私も素人ですが、トランスレータと書いたのがそれです。Chicken とか Stalin とか PLT
のとか Bigloo とか、ネイティブコードを作れる処理系は大抵 C にコンパイルしてから
ネイティブコードにコンパイルします。
Chez 欲しいなと思ってるのですが、Chez って日本語通りますか?
あと、Google で検索すると、Mac OS X 版の Chez があるような記述があったのですが、
実際に購入可能なのでしょうか? 購入する際は各プラットフォーム毎に課金されるの
ですか?
0490デフォルトの名無しさん
NGNGPetite Chez Scheme Version 6.0a
を見る限りでは、|〜|で囲めば日本語のシンボルとか使えるみたいよ。
(define |加算| +)
(define |減算| -)
(define |より小さい| <)
(define (|フィボナッチ| n)
(if(|より小さい| n 2) n
(|加算| (|フィボナッチ| (|減算| n 1)) (|フィボナッチ| (|減算| n 2)))))
(|フィボナッチ| 30)
=>832040
これを使えるというのかは知らないけど。
0491デフォルトの名無しさん
NGNGちゃんと0x5cがエスケープされる。
> (symbol->string '|ソース表計算|)
"ソ\ース表\計算"
0492デフォルトの名無しさん
NGNG(eq? (string->symbol s) '|ソース表計算|))
#t
少なくとも可逆ではある。
ただし、
> (char->integer(string-ref (symbol->string '|ソース表計算|) 0))
131
> (char->integer(string-ref (symbol->string '|ソース表計算|) 1))
92
0493デフォルトの名無しさん
NGNGcallback関数内での上位継続呼び出しじゃないだろうか。
stacklessにしても特別扱いしなきゃならない問題。
0494デフォルトの名無しさん
NGNGcommon lispといい、この人って言語仕様でかくするのが趣味なのか?
0495デフォルトの名無しさん
NGNG言語仕様とライブラリの区別はつくか?
0496デフォルトの名無しさん
NGNG0497マ板ハゲスレ住人
NGNGポール・グラハムの写真ありませんか?
0498デフォルトの名無しさん
NGNG「言語仕様でかくするのが趣味」ってことはないわな。
「lambdaがあるならletいらない(>>308)」schemeコンパイラの論文もあるし。
Common Lispについては、Steeleの考えだけでつくった仕様じゃないし…
MLの意見を集約していて爆発しちゃったんでしょう。
本人も今やり直すんなら修正したい点を井田さんのインタビューで答えてるしね。
0500マ板ハゲスレ住人
NGNGおお、ありがとう。
生意気そうなツラですね。
フサフサかー
0501デフォルトの名無しさん
NGNGgeneric types, operator overloading, and constant classes
これはライブラリか?
0502デフォルトの名無しさん
NGNGその辺りはガイ・スティールの趣味というより、世間の要請だ─ね。
C#だって同じ拡張を試みてるもんね。
しかし、VMといい、GCといい、genericsといい、Lisp屋は先見の明がありますな─(w
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG文法には含まれないけど、仕様には一部のライブラリが含まれると思う。
0505504
NGNG標準ライブラリがあるかどうかもしらん(^^;
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG見てきた。禿げと言語/ライブラリですか…
あっちでは環境を抜きに言語仕様を語れないと妙に力説している人がいるけど、
一度考えてみたらいいんじゃないかと思う。(しかも肌で感じるだとよ…)
Lispの世界では、その結果SchemeとEuLispという成果があるわけだし。(ISISPも?)
0508デフォルトの名無しさん
NGNGハゲフェチの人で気付いたわけですが(w
お互い影響を与えあってたのは事実だろうし(この辺どっち側からも文句つけられそうだが)、
一度そういう視点でみても罰はあたらんかな?とお気楽に考えちゃうのはネイティブじゃないから
なんだろうなぁ?と。
>あっちでは環境を抜きに言語仕様を語れないと妙に力説している人がいるけど、
>一度考えてみたらいいんじゃないかと思う。(しかも肌で感じるだとよ…)
たぶんGNUsmalltalkとかSmallScriptとかを引きあいに出した人もそういう感じなんだろうかな?と
好意的に解釈してみるのだが、肌で感じる部分がやはり入り口に立ってる人間に宗教臭いと思わせる
部分なのかな?>Smalltalk。
でもこの辺考えて見るとおもろいね。ちといろいろ遊んでみようかという気になってきますたよ。
0509デフォルトの名無しさん
NGNG#!/usr/local/bin/scheme
;;日本語のコメント
(display '日本語も表示できます)
(newline)
;;EOF
スクリプトを書いて、
スクリプトの一行目にインタプリタのパスを書いて、
パーミッションを与えて、
実行すると、
実行できる。
日本語もバリバリ。
ができるスキームってどれですか?
0510デフォルトの名無しさん
NGNGウホォ、いい男・・・
0511デフォルトの名無しさん
NGNGGaucheはどうなの?
0512デフォルトの名無しさん
NGNG>パーミッションを与えて、
>実行すると、
>実行できる。
どれでもできる。
0513デフォルトの名無しさん
NGNGはやく教えろハゲ
0514_
NGNG川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
0515デフォルトの名無しさん
NGNGtinyscheme
0516_
NGNG川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
0517_
NGNG川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
0518_
NGNG川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
0519bloom
NGNG0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNG0522_
NGNG川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
0523_
NGNG川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
0524_
NGNG川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
0525デフォルトの名無しさん
NGNG0526_
NGNG川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
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNGそれは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
それは「くだらねえ」って読むんですか?
0529デフォルトの名無しさん
NGNGttp://www.ksky.ne.jp/~sakae/sicp/cont.html
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNG分からん・・・
0532デフォルトの名無しさん
NGNGLisp では通常どーやるもんなんでしょうか? Common Lisp でも Scheme どっちでもいいから
教えて〜
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG漏れもよく知らんが、この辺を調べれば判ると思う。
(open path :ENCODING :binary)
(open path :element-type 'unsigned-byte)
(read-char) (write-char)
(read-byte) (write-byte)
0536デフォルトの名無しさん
NGNG読むときは、read-byte, read-byte, read-byte, read-byte で読んで、shift して数値を
足しこんでいくしかないんですね。
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGhttp://jp.franz.com/base/map_packages.html
0540デフォルトの名無しさん
NGNG小俣ちゃんから送られてきたメール会社で確認してみるよ。
0541デフォルトの名無しさん
NGNGちょー速い。
0542デフォルトの名無しさん
NGNG0543540
NGNGCLIMとかAllegroStore永久ラインセンスとか追加してくと2000万くらいには軽く手が届きますな。
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGAllegro ODBC使うだけの方がいいかぁ。
これだとEnterpriseかぁ。
これも高いのかなぁ?
0548540
NGNGProfessional 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
サイトライセンス以外は上記×ユーザ人数分なり。たけぇ〜。
0549デフォルトの名無しさん
NGNGということは、enterpriseかよ。
・・・自作すりゃいいのか?
そもそも、professionalに配布向け一式?が無いのはおかしいって。
アレグロさんよー
0550デフォルトの名無しさん
NGNG0551sage
NGNG米国Franz社から直接購入した場合のお値段キボンヌ。
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG金払わなきゃ駄目なの?こりゃ漏れには一生ムリポ…。LispWorks かなぁ。
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG実際どんな感じなんでしょうか?
シンボルの参照とか。
0558デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme/trans/hp-j.html
0559デフォルトの名無しさん
NGNG直接埋めこみ不可な定数(シンボルや文字列など)は
別テーブルとして持ってると思う。
((ネイティブコード ...) (定数 ...))
0560デフォルトの名無しさん
NGNGこれだけの金額になると会社にACL導入させるのも至難の業かと。
導入を決意させる必殺の口説き方とか知ってたらレクチャーおながいします。
0561デフォルトの名無しさん
NGNGそれなりの成果がある会社で
発言力のある上級lisperがいないことには。
0562デフォルトの名無しさん
NGNGcmuclなんかだと直接機械語になるし、アセンブルコードも見れるので
見てみるとよい。
0563デフォルトの名無しさん
NGNGためしに導入するにもきつい金額だ
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG漏れが見極めたいのはAllegroStoreがどれだけのもんかとかトライアル版では
利用できない機能のポテンシャルなんだが・・・
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNG破壊操作なしで作れるでしょうか?
こういう入力の場合は、
'(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 ))
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNG想像しただけなんで、深い意味はないです。
ご教授お願いします。
0570(define (´∀`) 'マターリ)
NGNG(let loop ((a a) (level 1))
(for-each (lambda (x) (if (pair? x) (loop x (+ level 1))
(f x level)))
a)))
0571デフォルトの名無しさん
NGNGカウントした中の最大値を繰り返しで呼び出される関数に渡したい
とした場合はどうでしょうか。
これも破壊操作無しでできるでしょうか?
そもそも、リスト中の階層の深さのピークを得るのが目的だったんです・・・。
'(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を得たい)
0572デフォルトの名無しさん
NGNG関数内で必要なローカル変数領域の最小限の大きさの取得とかです。
(define (f)
(let (x) ; 1
(let (y) ; 2
:
))
(let (z) ;1
:
))
(この場合ローカル変数領域の大きさは2、という風に求めたい)
0573(define (´∀`) 'マターリ)
NGNG(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)))))
0574デフォルトの名無しさん
NGNGそれでバッチリです。
ありがとうございました!
0575(define (´∀`) 'マターリ)
NGNG(define (depth a)
(if (list? a) (+ 1 (apply max (map depth a)))
0))
0576デフォルトの名無しさん
NGNGhttp://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
0577デフォルトの名無しさん
NGNG0578(define (´∀`) 'マターリ)
NGNG(define (depth a)
(if (pair? a) (max (+ 1 (depth (car a))) (depth (cdr a)))
0))
0579デフォルトの名無しさん
NGNGdyn:link: /usr/local/lib/scm/crs.so: Undefined symbol "wrefresh"
と言われてしまいます。どうしたらよいのでしょうか。
0580デフォルトの名無しさん
NGNG6月7日発売 特別定価1,580円
特別企画「使って学ぶ!Gaucheによる Schemeスクリプトプログラミング」
http://www.unixuser.jp/next.html
0581デフォルトの名無しさん
NGNG河合さん本人の記事かな?
0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNGapply という手続きを apply を使わずに定義することはできるのでしょうか。
自分自身を使わずに定義できない手続き(及び構文)をプリミティブというのでしょうか?
0584デフォルトの名無しさん
NGNGできるけどさあ
>自分自身を使わずに定義できない手続き(及び構文)をプリミティブというのでしょうか?
自分自身を使わずって、
もうちょっと質問の仕方考えろよー
0585デフォルトの名無しさん
NGNG文法はなんとなくわかったけど、使い道がよくわかってないので、
とても楽しみ。
0586デフォルトの名無しさん
NGNG過去ログに car と cdr を他のプリミティブ手続きで定義したものが
あったのですが、プリミティブかどうかは定義できるできないに関わらず
仕様で決っているという解釈でよいですか?
apply については調べたら eval との相互再帰だと分りました。すいません。
なんにせよかなり原始的な手続きだということが分かって安心しました。
0588デフォルトの名無しさん
NGNG参考になった
0589デフォルトの名無しさん
NGNGGauche の河合さんのインタビュー。
次の友達の輪は ポール・グラハムになりそうだな。
0590山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0591デフォルトの名無しさん
NGNGconfigureでlibgmpのテストがエラーになってしまう
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGhttp://www.cag.lcs.mit.edu/curl/
http://www.curl.com/html/
0594デフォルトの名無しさん
NGNG予想通り全然ブレイクする気配なし。
0595デフォルトの名無しさん
NGNG「日経ソフトウェア」にこんなマイナーな言語取り上げられるんだから笑っちゃうよね…
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNG0600デフォルトの名無しさん
NGNG1)ピリオドを跨いでシングルメソッドディスパッチを可能にした。
2)コロンを跨いで型を書ける様にした。
3)()→{}に変えた。
4)macroが無くなってる様な気がする。
5)消えたリスト関数群
1)はCLOS程の機構は必要ないと判断したのかな。
2)の影響で、数値計算とかは型を明示しない同等のLISPコード
よりは効率的になる。
ただし見る限りvectorとかのコンテナはいままで通り型無し。
コンテナにアクセスする度にタグの付け外しが必要。
3)の意味はあんまり無さそう。気分の問題?
理由を聞いても多分適当なコジツケを聞かされるだけだろう。
4)のmacroが無いのははっきりいって退化。
5)つまりデータ=コードではなくなったという事か?
発想が俺と同レベルだよ・・・MITの奴等(;´д`)
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNGhttp://slashdot.jp/linuxkernel/03/04/29/0742257.shtml?topic=2
0603デフォルトの名無しさん
NGNG重要なのは言語じゃないだろ
0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNGmacros.curlというファイル。
結局リスト処理は健在だった。
0607デフォルトの名無しさん
NGNGMITのやつらもたいしたことないな
0608デフォルトの名無しさん
NGNG逝ってきて、謎が2つ残りました。
あのみかんみたいなのは、どうやって使うんだろう。
perlの人、なにがしたかったんだろう?
0609デフォルトの名無しさん
NGNG問題領域に合わせた言語を作ってしまい,それを用いて問題を解くそうですが,
作った言語はLispと同じくS式で書かれているのですよね?
ライブラリとは何が違うのでしょうか?
マクロも用いて新たな構文を作ったりするとそれはもう別言語であるということ?
自分で作ってみないとわかんないなぁ….イメージしやすい簡単な事例をキボンヌ
0610デフォルトの名無しさん
NGNG> ライブラリとは何が違うのでしょうか?
構文が変る。
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
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNG決めました。なんとなく応用がききそうなschemeをチョイスした
んですけどscheme書ければelispは簡単に理解できますかね?
common-lispとどっちにしようか迷ったんですけど。
とりあえず入門SchemeのPDFを読みつつ、rtrsjをたまに見て勉強
してます。あと日本語処理が楽そうなのでGaucheを使ってます。
リストって概念に感銘を受けました。
0613デフォルトの名無しさん
NGNGLisp is a chameleon
http://www.paulgraham.com/chameleon.html
0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNGお願いしますm(_ _)m
0617デフォルトの名無しさん
NGNGhttp://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=
0618デフォルトの名無しさん
NGNGそれも末尾再帰するんでしょうか?
0619デフォルトの名無しさん
NGNGeval の最後も末尾扱いだったはず
R5RSに書いてある
0620デフォルトの名無しさん
NGNG隙がないなあ。
0621デフォルトの名無しさん
NGNGなんか具体例キボンヌ.
0622デフォルトの名無しさん
NGNGYahoo Store
0623デフォルトの名無しさん
NGNGOpenGLインターフェイスを備えた処理系とか.
0624デフォルトの名無しさん
NGNGgauche
0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNGCL-SDL
0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNGもしそれが本当だとしたら運営者の頭がおかしくなったとしか考えられない
0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNGPHPのはず。
0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNG0636フォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGCMUCL, SBCL, GCL, Allegro, MCL 用の OpenGL インターフェースはある。
0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNGできるようにするのは結構大変なんですかね?
0640デフォルトの名無しさん
NGNGcygwinでopengl動けばできるとおもうけど。
作りもFFIで関数呼ぶ程度でしょ。
関係ないけど、おれconfigure嫌いなんだよね。
移植しずらくない?shその他諸々動く環境前提ってのが駄目すぎる。
0641デフォルトの名無しさん
NGNGそういうのを吸収するのが auto〜 なんだが
それに最低限 sh はあるでしょう
sh も無い環境なら他の部分でも色々移植に問題が出てくると思うが
0642デフォルトの名無しさん
NGNGそうか? configure 動かない環境なんて、素の Windows くらいだろ。
0643デフォルトの名無しさん
NGNG(shiroさんのWLikiのサイト)
0644デフォルトの名無しさん
NGNG0645デフォルトの名無しさん
NGNGその一覧を元に手動で設定するとか、
そういう手段があるなら教えてくれ。
そっちの方が早い。
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNGじゃあ Windows なんか使わなきゃいいじゃん。バッカじゃないの?
0648デフォルトの名無しさん
NGNGおまえ、頭膿んでるだろ
0649デフォルトの名無しさん
NGNGはぁ?本気で言ってんのかよ?
そこまで苦労して Windows 使いたいなんて、おまえの方が頭膿んでるだろ。
0650デフォルトの名無しさん
NGNG都合が悪いとバカ扱いですか。そうですか。
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653623
NGNG情報ありがとうございます。
とりあえずgauche-glを試そうかと思ったらcygwinではだめだとか。
Windowsを常用しているのでcygwin+gaucheでいけるといちばんありがたかったのですが・・・。
というわけでLinuxで試してみます。
0655デフォルトの名無しさん
NGNGコンパイルできませんでした。
これも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')
以下似たようなエラーがずらずら・・・
0656デフォルトの名無しさん
NGNGWeb サーバーまで Lisp 製?それとも Apache とかと連携してたのかなぁ?
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNGphpになったって事は、退化してるわけだよね。
考えられない。
もしかして拡張子だけで判断してるんじゃ・・?
0659デフォルトの名無しさん
NGNGあくまでもスクリプト言語をね。
0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNGttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?p=Gauche%3aCygwin&l=jp#0
0664デフォルトの名無しさん
NGNGとりあえず mod_lisp で遊んでみようっと。
0665デフォルトの名無しさん
NGNGおまいさんがデータベースを用いたシステムを構築するとして、
データベースシステムそのものを php で書くか?
つまり、そういうことだよ。
0666入門者
NGNGにある問題の解答はこんな感じかと思うのですが、上級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"))))
0667デフォルトの名無しさん
NGNGCommno 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 別々だったっけ?
だとしたら多分駄目カモ
0668デフォルトの名無しさん
NGNGapply かませばいいんだっけか?
あれ、apply は elisp だったか?いかん、混乱してきた
0669デフォルトの名無しさん
NGNG(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))
0670デフォルトの名無しさん
NGNGこんなんでどう? 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))
0671670
NGNG0672670
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG(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"))))
0676デフォルトの名無しさん
NGNG(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")))))
0677デフォルトの名無しさん
NGNGは大丈夫なの?
0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNGprintのときにくっつけた文字列は必要なのかな。
(for-each display (list str1 str2 str3))
みたいなのどうかな。
0680デフォルトの名無しさん
NGNGでも文字列を連結するのが題意なんでないの?
0681デフォルトの名無しさん
NGNG(define (display* . x)(for-each display x))
0682入門者=666
NGNG669,670のおかげでcaseマクロの使い方なんとなくわかりました。サンキューです。
674の言うようにLISPでのスマートな記述が自然にできるようになるにはやっぱり
経験積むしかないんでしょうね。676の書き方は正直、気が付かなかったです。カコイイ。
すかさず突っ込みを入れられる677もすごいなぁと思ったです。
このスレに来てる人達が賢いのか、それとも賢くないとLISP使いこなせないのか。
僕は"Beating the averages"読んで片手間にCommon Lispの勉強始めたばかりなんで
まだまだわからないことがいっぱいです。どれくらい経験積むと不自由なくLISP使える
ようになるんですかねぇ・・・cltl2(洋書)で購入したものの、正直その分厚さに圧倒されてます。
0683デフォルトの名無しさん
NGNGANSI Common Lispにしといたら?
0684デフォルトの名無しさん
NGNGCommon Lisp は仕様がでかいからね。使いこなせるようになるまでに、ある程
度経験はいると思う。自分で、しこしこ作った関数が CLtL2 でもともとあっ
た、なんてのはよくこと。勉強するだけなら Scheme がいいのでは?
0685デフォルトの名無しさん
NGNG>>684 別に Common Lisp から入ってもいいんじゃないかなぁ。漏れが
Common Lisp 派だからかもしれないけど、自作関数とかぶったら実装と
比較して勉強にもなるから無駄にはならんと思う。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGcmucl: OpenGL とか
gauche: 日本語とかネットワークとか
0689デフォルトの名無しさん
NGNGgaucheが日本語使えるので、
すべてこっちに移行中
0690デフォルトの名無しさん
NGNG試しにcmucl動かしたらなんかえらい速かった。
0691デフォルトの名無しさん
NGNG生成とか開発も活発で期待アゲ。これで国際化してくれたら文句無しだが…漏れ
がへたれじゃなかったら自分でがんがるんだが。
0692デフォルトの名無しさん
NGNGGauche 使うのはちょっと勇気がいります。
0693デフォルトの名無しさん
NGNG周りにlisp使える人がいないので、lispを使おうと提案しても
却下されてしまう(´Д⊂グスン
0694デフォルトの名無しさん
NGNG俺は、もうそうせざるを得ない状況(ry
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNGhttp://www4.ncsu.edu/~moriedl/software/body.html
くらいしか見つかりませんでした。
現在のACLのバージョンが6.2なのにこのライブラリはバージョン5用に作ったと書いてあります.
試しにalisp.exeでサンプルプログラムを動かしてみたところ,きちんと画面は表示されたのですが,ウィンドウを閉じたあとトップレベルが入力を受け付けない状態になってしまいます.
これは仕方のないことなのでしょうか。そうだとしたらとても不便だ。
だれかこの辺の事情について何かご存知ないでしょうか。
また,他のOpenGLインターフェイスの情報があれば教えてください。
お願いします。
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGを comp.lang.lisp で見かけたような気がする。調べてみては?
0699デフォルトの名無しさん
NGNG% telnet prompt.franz.com
0700デフォルトの名無しさん
NGNG0701入門者=666
NGNGのですが、こんなもんなんでしょうか。
(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ですか?
0702デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/0201083191/qid%3D1055665073/249-2969182-6032346
前半が文法の説明で後半がサンプルという構成です。
サンプルがAI的なものばかりで「Lisp=人工知能用言語」という偏見に寄与しそうな気もしますが。
0703デフォルトの名無しさん
NGNGなにこれ?
トライアル版を公開してなんか意味があるんか。。
|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):
0704デフォルトの名無しさん
NGNGJava+JNIを使ったGUIキットでつか?
0705デフォルトの名無しさん
NGNGWeb 上で見られるところありませんか?
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGこれでいんじゃないの? M-x run-scheme
(setq scheme-program-name "/usr/local/bin/gosh -i")
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process. " t)
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGUU 誌買えよ。
0711デフォルトの名無しさん
NGNG0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG0714デフォルトの名無しさん
NGNG(add-to-list 'load-path "~/elisp/emacs-guile-0.2")
(require 'guile-scheme)
(setq initial-major-mode 'scheme-interaction-mode)
*scratch* が Scheme。あ、Common Lisp じゃないや。
0716デフォルトの名無しさん
NGNGつまらない解答っていうより問題の方がつまらない。
再帰をさせる問題の方がLispができるようになると思うんだけど。
0717デフォルトの名無しさん
NGNGふつー ilisp 使うだろ。ぐぐってみれ。
0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNG0720718
NGNG0721デフォルトの名無しさん
NGNGよる lisp 処理系との連携とか、関数にカーソル合わせて CLHS を一発で引くとか。
あるのと無いのでは大違いだと思う。
0722718
NGNG0723デフォルトの名無しさん
NGNGあなたの場合はだめです。
0724デフォルトの名無しさん
NGNGSchemeの勉強がてら、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
0725デフォルトの名無しさん
NGNG2ちゃんねら〜の総力を結集して入賞を目指してみないかとか書いてみるテスト。
0726デフォルトの名無しさん
NGNGバッファリングされてんじゃない
と、よく読まずに(ry)
0727デフォルトの名無しさん
NGNGTCP ならいけるの?
本題とは関係ないが、socket-close とかは unwind-protect しとくのが無難。
Scheme なら dynamic-wind かな?
0728デフォルトの名無しさん
NGNG0729724
NGNGとりあえず、受信できました。UDPではread-lineは使えないんですかね。
>> 727
TCPだと問題ないです。
0730デフォルトの名無しさん
NGNGgauche.netのAPI自体良く知らないんだけど、
UDPは、当然buffering I/Oじゃないでしょ。
行単位の読み込みは、buffering I/Oとしか馴染まないもんね。
PF_INETの言葉で言えば、stream通信じゃなくてdatagram通信。
0731デフォルトの名無しさん
NGNGgauche なら、call-with-client-socket とかの方がよいカモ
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG述語が真になるグループに分ける手続きってどう書けばいいんですかね。
> (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))))))
これだと何度もフィルターにかけるので遅くて・・・。
0735デフォルトの名無しさん
NGNG(hoge < '(1 3 2 4)) だったら ((1 3) (2 4)) となるのか?
((1 2 4) (3)) ってのもありな感じがするが。
0736Common Lisp 見習い
NGNG(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 では書けません….
0739デフォルトの名無しさん
NGNG(call-with-input-file file1
(lambda (p1)
(call-with-input-file file2
(lambda (p2)
みたいに書くとか、そう展開されるマクロを書くしかないですか?
0740デフォルトの名無しさん
NGNG(hoge (call-with-input-file file1 (lambda (p1) ...)
(call-with-input-file file2 (lambda (p2) ...))
0741デフォルトの名無しさん
NGNGcontinuation の呼びだしある場合、これではまずいかもしれない。
(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)))))
0742デフォルトの名無しさん
NGNG...
(close-input-port p1) (close-input-port p2))
0743順調に下がってまいりました
NGNGにあるIMHOをOpenBSD3.3/i386で使いたいと思いOpenBSDにデフォルトで
入っているApacheにmod_webappを組み込むとapachectl startで必ず
Duplicate connectionと文句を言われてApacheが起動できません。
ググってもそれらしい情報見つけ出せないで困っているんですが、どなたか
IMHOの動作に成功した方いらっしゃいます?CMUCLのリリースは18eです。
0744デフォルトの名無しさん
NGNGがひっかかるのだが…
0745743
NGNGそこを見てFreeBSDでいけるんならOpenBSDでもいけるっしょ、くらいの軽いノリで
突っ込んでみたんですけどうまくいかないんですよねぇ・・・
そもそもがDebian GNU/Linux向けに開発,パッケージ化されているようなので
感触としてはOpenBSD3.3/i386のApacheとIMHOと一緒に配布されているmod_webappの
仕様の整合性が取れてないっぽいです。jakartaプロジェクトからmod_webappのソース
取って来ても似たような状況だったのでLISPの問題じゃないと思います。スレ汚しスマソ。
便乗質問になりますがCMUCLでPortable Aserve運用してる方、もしいらしたら
使用感(特にパフォーマンス)どんな感じか教えていただけますか? comp.lang.lispとか
./見てると「遅くて使いもんになら〜ん」という趣旨の投稿を見かけたので。
0746デフォルトの名無しさん
NGNG0747734
NGNGfilterのかわりに条件を満たすものと満たさないものを
一緒にして返す手続きで置き換えたり、
=のような述語を受け取るのをやめて
リストの要素を数値化する手続きを受け取るようにして
ソートすることにしたり、
他のところを見なおして数値リスト限定でグループ分けをするようにしたりして、
最終的にはグループ分けの手続きを使わずに
ソートした数値リストを直接処理するようにしました。
C言語版と同じようになってしまい、
Lispらしさのかけらもないコードに・・・。
0748デフォルトの名無しさん
NGNG(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 って好きですか?自分はイマイチ….
0749デフォルトの名無しさん
NGNG734の問題か?
Common Lisp知らないのであれなんだが、(car lst)は入るの?
(特にloopを知らない。名前付letみたいなもん?)
(hoge '= '(1 1 1 2 2 3 3))だと
((1 1) (2 2 3 3))にならない?
0750デフォルトの名無しさん
NGNGたのです.まだ良くわかってないですが,使いドコロによっては便利な予感なのですが.
0751734
NGNG条件を満たすものと満たさないものを両方返す手続きで
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)))))
0752734
NGNG数値順にソートすることで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もこのロジックだと
述語のかわりに数値化する手続きを受け取らせたほうがきれいかな。
0753734
NGNGプログラム全体を見直し、数値化したリストだけを処理することにして
そのあとで数値化する前のリストを処理することに。
同じ数値が一つか二つしかないことが多いので
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をあてて使ってるだけになったので
この手続き自体も使わないことにした。
0754デフォルトの名無しさん
NGNG0755デフォルトの名無しさん
NGNGSRFI-1にpartitionていうのがあるよ
あらかじめソートしてあって、途中で探索を打ち切れるなら span が使える。
0756デフォルトの名無しさん
NGNGというリストを要素毎に組み合わせて、
=>
((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という関数を使うのかな。
0757デフォルトの名無しさん
NGNG(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))
0758デフォルトの名無しさん
NGNG(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
0759デフォルトの名無しさん
NGNGもうちょっと一般化して、
(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))
なんてどうかな。
0760デフォルトの名無しさん
NGNG(define (combination ls)
(if (null? ls)
'(())
(apply append (map (lambda (y)
(map (pa$ cons y)
(combination (cdr ls))))
(car ls)))))
(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 _ = [[]]
0761デフォルトの名無しさん
NGNG>>759のrは累積変数というやつだな。
データ構築は再起的でも、繰り返しの応用で記述できるのか。
0762デフォルトの名無しさん
NGNG0763無名λ式
NGNG[[x y z] | x <- [a b c], y <- [d e f], z <- [g h i]]
だな。>>760はBirdの本の奴と殆んど同じだね。
0764デフォルトの名無しさん
NGNG0765(define (´∀`) 'マターリ)
NGNG(define (f x y)
(apply append (map (lambda (a) (map (lambda (b) (cons a b)) y)) x)))
(fold-right f '(()) s))
0766デフォルトの名無しさん
NGNGと思ってるんですが、勉強の順番として
scheme => elisp => clisp
で行こうと思ってます。なんか問題ありますか?
0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNG大したことないし、参考になる綺麗なコードも少ない。ただ、一番ユーザが多い。
0770デフォルトの名無しさん
NGNGschme => clisp って流れのがいいみたいですね。
問題のelispは他の2言語が分かればすぐマスター出来るような
感じですか?今 入門schmeっていうPDFファイルで勉強してる
んですが。schemeにはdefineだけなのにelispでは def* なる
表現がいっぱいあるみたいですね。
0771デフォルトの名無しさん
NGNG入門schemeは文字コードを変換する2章以降はいらないと思う。
再帰やリスト処理を練習したほうがいい。
基本の手続きや構文を知ってても、組み合わせて使えないと。
0772デフォルトの名無しさん
NGNG自分はつまんなすぎて途中まで読んで嫌になった。
R5RS の方がいい。
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
個人的に好きなのはここ。
0773デフォルトの名無しさん
NGNG1章だけ読んでR5RSに移行する予定。
その後ピアソんから出てるプログラミングSchemeか
SICP買ってみようと思ってるんですけど、この2冊
両方やる必要ありますかね?
0774(define (´∀`) 'マターリ)
NGNG(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))))))
0775デフォルトの名無しさん
NGNG根性で全部落としてみた。現在シコシコDVDに焼きこみ中。
DivX版だけでいいかと思いきや音が吹っ飛んでてほとんど講義の内容聞き取れない部分が
あったりするのでMPEG版も必須かと。HDDもDVDも大した値段じゃないしね。管理は面倒だが・・・
0776デフォルトの名無しさん
NGNGなにこれ?
講義の録画?
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNG0779775
NGNGそ。MITでコンピュータサイエンス専攻する学生は避けて通れないあまりにも有名な
SICPの講義をHPの従業員向けに行ったときの様子だそうな。
ヨソサマのガッコの講義を回線代程度で受講できるなんていい時代になったもんです。
0780デフォルトの名無しさん
NGNGデカいね・・。
0781デフォルトの名無しさん
NGNGこれ読んだ人いる?
0782デフォルトの名無しさん
NGNG93年に書かれたもののようだけど,この内容で10年前のものって
有効期限切れじゃないの?
0783デフォルトの名無しさん
NGNG"Worse is better"、「悪い方が良い」原則、というのは
聞いた事があるんじゃないですか。
Lisp界隈では基礎教養と言える文献だと思いまつ。
知ってて損はないかと。
日本語訳もどっかで見た事があるような気がしまつ。
0784デフォルトの名無しさん
NGNGschemeの階層のあるリストは、perlのデータ型で表現できますか?
あと、linuxで一般的に利用されそうなscheme処理系ってなんでしょうか?
それがわかれば移植する必要は多分無いです。
0785デフォルトの名無しさん
NGNGload-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版が
どこかにあれば問題ないのですが。
どなたかご教授ください。
0786デフォルトの名無しさん
NGNGumb-scheme
0787デフォルトの名無しさん
NGNGこれ動くの?
http://search.cpan.org/src/GAAS/perl-lisp-0.05/lib/Lisp/
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNGありがとうございました。
0791デフォルトの名無しさん
NGNGftp.cs.umb.edu なんて名前すら引けないし
0792デフォルトの名無しさん
NGNG自分でコンパイルしたのかな。
0793デフォルトの名無しさん
NGNGどっちも遅いよ。
用途によりけりだけど。
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNGくれ!
0798デフォルトの名無しさん
NGNGグイーラーって知らないのだが、ゴーシュで良いのでは?
>>797
tinyschemeは?
0799デフォルトの名無しさん
NGNGでもlinuxのカーネルに組み込めるんだよね。
module化しないのかな。
0800デフォルトの名無しさん
NGNGtinyCOBOLは?
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNGbiglooってインタプリタあるの?
0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNGコンパイルすればCygwinなら使えるのかもしれないけど
めんどくさい
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNGバイナリ公開してほしいね。
ちなみにcygwinでも「動く」までは行くよ。
いくつかエラーとか出たけど。
使用に耐えるかどうかはわからない。
単純なコードなら問題なさそうだけど。
確かに、これのためだけにcygwin入れるのは非常に面倒だ。
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNGcmuclも動かないけど
0811デフォルトの名無しさん
NGNGこっち使えば良いか
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNGある
081472ではないです
NGNG0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNGclisp.
カネがあるならAllegro CL.
SchemeでよければGauche.いじょ.
0817デフォルトの名無しさん
NGNGWinなら,clispの他にxyzzy lisp.
WinでSchemeならcygwinのグイーラー(w.いじょ.
0818デフォルトの名無しさん
NGNGグイーラーって言ってみたかったに100ペソ
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNGハマったきっかけを教えてくだされ。>先輩
0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG統一してくれないと困っちゃうんだが。
0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNGhttp://srfi.schemers.org/
0833デフォルトの名無しさん
NGNG現在、継続やdynamic-windの実現方法で頭を悩ませております。
ところで、実装手法について述べた文書なんてありますかね?
既存の処理系をいくつか見たんですが、内部の詳細についてはほとんど
述べられていないようです(見落としてるかもしれません)。
みなさんはセルや環境フレームの物理レイアウトには
興味・・・ないですよねぇ・・・さすがに・・・
0834デフォルトの名無しさん
NGNG手元にあるものから適当にひろってみたけど
- 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
とかですか? それとももっとソースコードよりのおはなし?
> みなさんはセルや環境フレームの物理レイアウトには
> 興味・・・ないですよねぇ・・・さすがに・・・
そういうの好きな人は結構いると思いますけど。
0835デフォルトの名無しさん
NGNG参考にさせていただきます!
>とかですか? それとももっとソースコードよりのおはなし?
そろそろ設計に移ろうかと考えているので、
ソースコード寄りのネタがうれしいッス。
0836デフォルトの名無しさん
NGNGネタ:
ループや関数呼び出しの様な、普通の制御については完全にGCレス
にできる。なるべくセルを使わずスタックで扱う様に気を使う。
小さい数値を即値で表現する様にし、関数の引数をスタック上に作る。
末尾呼び出しのフレーム除去等を管理し、環境も最初はスタック上に
構築して、クロージャや継続フレームの生成段階で初めてヒープに移す。
このとき、スタック上の環境はヒープへのリンクに変更する。
これらはインタプリタのレベルででき、セルで状態構築する処理系
(mini-schemeやtiny-schemeなど)の5倍以上のスピードが出せる。
コード量もあまり変わらない。ただし実装は気を使うので少し難しい。
ついでに、インタプリタではマクロの展開が遅い要因の1つなので、
一度展開した結果をキャッシュすれば、最低限の構文だけ組み込み、
その他は全てマクロであっても、かなりの速度差がつく。
(素直に組めば、この時点でguileよりも速くなる)
gaucheの様な、evalでVMにコンパイルする系に対しては速度でまだ
負けるが、上の実装でコンパイラとVMを用意すればgaucheを超えて速くなり、
コード量、実行ファイルサイズはgaucheの何分の1かで済む。
GCレスにすると、実行時のnativeコードへの変換も楽になる。
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNG>なるべくセルを使わずスタックで扱う様に気を使う。
>小さい数値を即値で表現する様にし、関数の引数をスタック上に作る。
>末尾呼び出しのフレーム除去等を管理し、環境も最初はスタック上に
>構築して、クロージャや継続フレームの生成段階で初めてヒープに移す。
>このとき、スタック上の環境はヒープへのリンクに変更する。
gaucheもそうやってるよ。gaucheの「コンパイラ」はかなり単純。
上の方針でのボトルネックのひとつは、クロージャや継続を「生成」
する時点でヒープへのコピーが発生すること。使われ方によっては
ファーストクラスである必要のないクロージャや継続がたくさん
あるので、ヒープへ移すのはlazyである方が良い。
クロージャに関してはフロー解析をすればある程度最適化できる。
継続でコピーをlazyにやる方法は"copyless continuation"で
探せば数本の論文が見つかると思う。
gcを自分で書くのなら、Henry BakerのCheney on the MTAの方法
も使えるかもしれない。オブジェクトは全てスタックアロケート、
手続き呼び出しは全て継続渡し、スタックがいっぱいになったらgcで
生きてるオブジェクトだけheapに移動、という方法だ。
chickenが使っている。
既存の処理系のコードを読んで、適宜論文を参照するようにすると
色々勉強になる。
0839デフォルトの名無しさん
NGNGネタ2:
ポインタが4バイトならconsセルは8バイト。最初のビットが奇数ならatom。
ポインタを配列のインデックスで表現すれば32bitも必要ない。
24bitもあれば十分だし、そのぶん別の状態に使う。GCで管理するヒープは
セル専用にし、vectorやstringの様な可変長オブジェクトはヘッダセル以外
は別の領域から取る。セル専用にすると速い。GCマークフラグは別テーブルに
持たせる。ただしこの設計はヒープがリニアで取れる時でしか使えない。
話はここからだ。
ポインタをインデックスで実装すれば、ヒープのリニアイメージをそのまま
ファイルに書き出せる。(実行時アドレスを保持している場合は適切な変換が必要。)
これで処理系の実行状態のsuspend/resumeが可能になる。resumeで関数呼び出し
を行ってschemeプログラムを起動できる様にもできる。
このイメージは配置を保証すれば実行環境に依存しない。
環境依存コードをschemeで書かない限りWindowsでもLinuxでも同じCPUなら動く。
作成したメモリーメージを処理系に埋め込めば、suspendはできなくなるが、
実行ファイル単体での配布が可能になる。
0840ネタ@中毒者
NGNG確かにCPSで書かれると不利になるね。
ローカルで完結するクロージャについてをスタック上で
まかなえばいいんだろうけど、フロー解析が必須になる。
>継続でコピーをlazyにやる方法は"copyless continuation"で
このコピーレスって、mini-schemeの様にGCで回収させる事かな?
対象がセルじゃなく、スタックである分速いのかもしれないけど、
GCの起動回数とメモリ移動が増える分、どうなるかわからない気がする。
0841ネタ@中毒者
NGNGlocal-lambdaという構文を用意し、このクロージャは
定義したレキシカルスコープから外へは出ない事を
ユーザーに明示させる。スコープから出た場合の
動作は不定、じゃまずいからヒープに移動しない等の、
何らかのエラーを返す。
0842ネタ@中毒者
NGNG駄目だ。スコープから抜ければ破棄されるけど、
ループなんか回されたらもう駄目。
0843ネタ@中毒者
NGNG上の実装であればGCはマーク&スイープで十分。
ヒープがセル専用なので断片化を気にする必要がないからだ。
マーク&スイープはオブジェクトの参照とマークテーブルの
書き換えだけで済む。さらにスイープは遅延できる。
コストはコピー>マーク&スイープ>マーク&遅延スイープ
ただし、所詮マーク&スイープなので生存オブジェクトが
多くなると局所性とマークのコストが問題になる。
0844ネタ@中毒者
NGNG>gaucheもそうやってるよ。gaucheの「コンパイラ」はかなり単純。
gaucheはたしか末尾呼び出しのフレーム調整の最適化が
できてなかった。最新版だと違う?
0846ネタ@中毒者
NGNGこういうやつが遅い
(define (ack m n)
(cond ((zero? m) (+ n 1))
((zero? n) (ack (- m 1) 1))
(else (ack (- m 1) (ack m (- n 1))))))
0847833,835
NGNGポインタ&勉強方法等、ありがとうございます。
ひとつ質問があります。セルの中身の表現に、下位数bitを使って
その値が000ならばポインタ、001ならば・・・などというふうな
やり方をよく見かけます(というかほとんど?)。
これってメモリ効率やパフォーマンスを追求したときのの結果なんで
しょうか?それとも歴史的事情でもって「アレもああしてたから
なんとなくそうしてみた」的なノリでこうなってるんでしょうか。
メモリをジャブジャブ使える環境だったら、タイプと値を別々に
持たせていいような気もしますが・・・
単純に2倍だからさすがに無理があるか・・・
0848デフォルトの名無しさん
NGNG=>(1 2 3 4)
スタックにのせてわたすとすると
こういうのは関数のほうでリストに変えるの?
0849デフォルトの名無しさん
NGNGセルの下位ビットをタグに使うのはNILというLisp処理系から
だったかな。それ以前は、BIBOPと言って、メモリページごとに
格納するオブジェクトを分ける方法が主流だった。メインメモリが
少ない場合、上位数ビットのみを見ればタイプがわかる。
アドレス空間が18bitとかの時代の話。
アドレス空間が大きくなると、BIBOPで最初に大きくメモリを
切り分けて置くのが難しい。次第に下位ビットタグが使われる
ようになった。
>メモリをジャブジャブ使える環境だったら、タイプと値を別々に
>持たせていいような気もしますが・・・
メモリにおかれるオブジェクトならそれでもまあいい。
ビットタグをワードに押し込む利点は、即値整数を
メモリアロケート無しでレジスタに置けることじゃないかな。
0850デフォルトの名無しさん
NGNG> これってメモリ効率やパフォーマンスを追求したときのの結果なんでしょうか?
RISCの即値Jump命令でも使われる普遍的なアイデアだよね。(MSBだけど…)
0851ネタ@中毒者
NGNGrest引数はクロージャの環境フレーム生成の時にスタックからリストに変換する。
apply呼び出しの場合はコピーの生成の有無とか色々ある。
コンパイラならその場合は直接(list 1 2 3 4)に変換するかも。
0852デフォルトの名無しさん
NGNG0853名無しさん@xyzzy
NGNGSICPがすごい本で、その中で扱われているから。
アルゴリズムはschemeだとすごく分かりやすい。
0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG評価つけたやつが勘違いしていたという結論だった筈
0856デフォルトの名無しさん
NGNG128人もレビュアーがいて、星3.5個なわけだが。
一人二人勘違いしてた所で、評価は変わらん。
0857デフォルトの名無しさん
NGNG0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNGStructure 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
0860デフォルトの名無しさん
NGNG俺も作りかけの処理系に手を入れようかな。
0861デフォルトの名無しさん
NGNGアンチが重複書き込みしている
0862デフォルトの名無しさん
NGNG0863デフォルトの名無しさん
NGNGほとんどSchemeやアルゴリズムと関係ない所だ。
0864デフォルトの名無しさん
NGNG自分で言ってて意味がわからないけど。
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGそのMMXがわかるようになるレビューとやらは、なんのレビューだ?
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNGdynamic-windよりも多値が問題だと思う
ファーストクラスじゃないから後付けできないし。
0874デフォルトの名無しさん
NGNGいや、実は、R5RSは多値をファーストクラスオブジェクトとして
実装することを禁止してはいない。
「call-with-valuesで作られる継続以外の継続は一つの値を取る」
とは書いてあるが、一つの値を取る継続に複数の値を渡した時の
動作は未定義。
だから、valuesは(値が一つの時以外は)特殊な「valuesオブジェクト」
に値をパックして返し、call-with-valuesはconsumerを呼ぶ時に
それをアンパックする、というアドホックな実装でも、R5RS準拠といえる。
もちろん性能は犠牲にすることになるが。
0875デフォルトの名無しさん
NGNG;多値の束縛
(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
こんなんでいい?
0876デフォルトの名無しさん
NGNG;多値の変換
(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型
0877874
NGNGvaluesを特殊なベクタとして実装するのはいいけど、
values?とかvalues->listなんかはその実装でしか
使えない(本当の多値を持つ処理系には移植しようがない)
からあんまり意味ないんでは。
また、valuesの戻り値がcall-with-values以外で使われる
場合の動作は完全に未定義。次のような動作は、実装しても
いいけど移植性はない。
(define x (values 4 5)) => x
(+ x 1) => (+ 4 1) => 5
あと、このようにvaluesのコンテナを用意する実装の場合、
値が一つだけの時を特別扱いするのを忘れずに。
(values 1) === 1 は常に成立しなければならない。
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGそういう突っ込みを待っていたのです
>移植性
これは特に考えてなく、多値をオブジェクトとするからには、
それなりに使いやすいインタフェースを用意すべきかと思ったので。
性能については、call-with-values付きで呼ばれたとか、
評価中にわかると思うから、それで最適化できるかもしれない。
SRFIにvaluesのファーストクラス昇格を提案してみるとか。
>(values 1) === 1 は常に成立しなければならない。
(= (values 1) 1) => #t
これは成り立つと思います。(>>875の多値の判定)
処理系によっては
(eq? (values 1) 1) => #t
つまり、多値オブジェクトの振る舞いは、基本的に単値オブジェクトと
同じということにする。
values関係の関数を呼んだときだけその本性を現す、とか。
0880デフォルトの名無しさん
NGNG効率悪いかも
0881デフォルトの名無しさん
NGNG(= (values 1 2 3) 1) => #t
です。
>>878
(= (values 1 2) (values 1 3)) => #t
です。
多値同士の比較は別個に用意する必要があります。
(values-equal? (values 1 2) (values 1 3)) => #f
0882デフォルトの名無しさん
NGNGこれのおかげでマシンスタックを退避とかしないといかんし。
0883まるちぽすと
NGNGLisperのPaul Grahamが絶版になったCLについての著書On LispをPDFで配っているのですが、
そいつを勉強を兼ねて翻訳しています。
今年の始めに手を付け始め、25章の本のうちやっと7章まで終わりました。
著者の許可はとってません。勝手にやってるだけ。まずかったら引っ込めます。
まだWizard Bookも読んだことない廚ですが、サイトを覗いてやって下さい。
なんかコメントがあったらここなり私のメールアドレスなり適当に。
user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.{pdf,dvi}.bz2
# これで後にはひけなくなった...
0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNGPaul Grahamにメール出してみてはいかが。
既に翻訳出版の話が進んでいるとかでない限り、
快く了承してくれると思いますよ。
0886874
NGNG>処理系によっては
>(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
0887デフォルトの名無しさん
NGNG> 著者の許可はとってません。勝手にやってるだけ。
まず、許可とれ。
そして、出版してくれ。PDFじゃ読みたくならん。
0888デフォルトの名無しさん
NGNG>>ここはCommon LispよりSchemeな擦れだってことは知ってますが
OnLispってマクロについて書かれた本だったような。それならschemeでも
十分役立つと思います。
0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNG翻訳に関する権利関係がちゃんと画定しているかもしれないので、
確認した方がいいですよ。
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNGもし芳しくない返事が返ってきたとしても、どっか無料鯖にアップしとけ。
翻訳者の名誉なんか求めてないだろ?とりあえず全部訳したら俺が神認定
してやるよ。
0894flatline (883)
NGNG実は4月以来進んでいないのです。それで動機付けにここに公開したという訳。
>>887 プリンタくらい持ってるでしょ。
>>888 >>889 どうもです。
>>890 一度絶版になって公開されている本を出版するような出版社は少ないと思ったんですが...
>>891 何ぃぃぃぃぃそんな便利なものがぁぁぁぁぁ
PDFからコピペするのがどれ程面倒だったのかと小一時間(ry
>>892 >>893 これはPaulの権利の侵害ではないと言えますよね。
そして私のような個人が翻訳して配る行為を縛る権利は本来誰にも
(現実的にはどの出版社にも)ありません。
ま、いずれはPaulにメールして承諾もらいますよ。くれるはず。
あとはShiro Kawaiさんとかはぎゃ教授とかにも教えたら喜んでくれるかも?
で、中身についての意見きぼんぬ。あんまり分かってないので間違ってるかも。
ただ、作業の続きは期末試験終わった8月位になります。すんませんね。
0895891
NGNG聞いて知ったんだが.非公式だからマイナーのなんかな?
On Lisp の texinfo 版
http://t2100cdt.kippona.net/linux/lisp/
texinfo で作ってくれ〜 PDF や ps はつかいにくい〜
0896デフォルトの名無しさん
NGNGOn Lispは再版されるらしいぞ。
http://groups.google.com/groups?dq=&hl=ja&lr=&ie=UTF-8&c2coff=1&selm=add24301.0306271142.2b67e898%40posting.google.com
0897デフォルトの名無しさん
NGNG本人が放置しても作業が進む可能性を残すべし。
0898デフォルトの名無しさん
NGNG| そして私のような個人が翻訳して配る行為を縛る権利は本来誰にも
| (現実的にはどの出版社にも)ありません。
痛すぎる…
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNGttp://www.hyuki.com/trans/ によると
まず、翻訳そのものには許可は不要です。
翻訳したものの頒布には著作権者の許可が必要です。
ということですよね。
0901デフォルトの名無しさん
NGNGあなたが>>883であると想定して書込みます。
それはたぶん私的使用のための翻訳を言っているのだと思いますが、
WEB上に出してしまうと、
アクセス制限でもしてない限り私的使用とは言えませんよ。
いずれにせよ、絶版になったからといって、
当然に出版社側の権利が消滅するわけではないので、
ちゃんと聞いたほうがいいです。
あなたの労力は高く評価しますが、
手続は踏んでおかないと色々面倒なことになるかもしれず、
その労力が無駄になりかねませんよ。
0903デフォルトの名無しさん
NGNG>翻訳したものの頒布
=WEB公開だろ。落ち着け>>901
0906flatline
NGNGで、まさか再版の方向で進んでいるとは...
それではさすがにやばそうなのでPDFおよびDVIファイルの公開を停止しました(w
>>895 Texinfoはまだ日本語を使うと微妙にDVIの見出しとかが変になるので... でも考えてみます。
>>897 Wikiとかうpローダとか使い慣れないのですいません。
>>898 おっ釣れた,,でも一匹だけかつまらん
>>900 >>902 分かってはいるのですが、どうせ絶版なら多少承諾が前後してもいいだろ、と思ったわけです。
しかしそうも言っていられない。
>>905 「ハリーポッターをドイツ人有志が独訳」
しかしハリポタは購買層が広いからそれでも売れるのでしょうが、On Lispの場合はもめるかも。
「私の翻訳は違法、出版社も揉め事を避けて邦訳を出版せず」となると日本のlisper全体に迷惑が行って
ヤヴァイので慎重に行くことにします。今英語のできる友人にメールの文章の添削を頼んでいます。
# PDF公開なんかより出版しる!という声もあった位だから購買意欲を削ぐことにはなってませんよねえ?
0907デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG著作権のイロハを学んでこい。(w
0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNGだから翻訳したものを無許可で公開するつもりですなんて
誰も言ってないっつーの
無許可公開には問題があるんじゃないかって話がでてきて
「じゃあ自分の勉強のためにただ翻訳するだけなら
著者の許可を得なくてもいいんですね」
「そうだよ。でも翻訳したものをwebに載せるのは
頒布になるから許可がいるね」
というやりとりがなされただけ。
ちょっと落ち着け>誰かさん
0912911
NGNG著作権について奇妙な理解の仕方をしてるみたいだけど
間違った行動さえとらなければこのスレ的には別にどうでもいいし
著作権についての議論やひけらかしがしたい人は別板でどうぞ
0913デフォルトの名無しさん
NGNGでも、今の時点では許可とってないので、問題あり。
0914デフォルトの名無しさん
NGNGおまいは話の発端を読み直せ。
明らかに権利侵害を行なっていたことが読み取れるから。
>>906
こういうのは「知らなかった」なんて言い訳が通用しないのは当然として、
「絶版だから大丈夫だろうと思った」なんていう勝手な決め付けは
自らのオツムが足りてないことを公言してるようなもんだよ。
判断を下すのは権利者であっておまいではない。
0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNG914はさぞかし素晴らしい何かを成し遂げているのだろう。
ああ、完全無欠の914!
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG良かれと思ってやる犯罪者を確信犯と呼びますな。
犯罪者は確信犯だろうが、情け容赦なく罵倒するのが妥当。
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNG犯罪者呼ばわりしてる人などいないが。
法律のことは良く知らないが、著作権侵害をしているなら、
もしかしたら犯罪者かもな。
0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNGこれはどうやって解凍するんでしょうか?
0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG公開する、しないはそれからだ。
0927デフォルトの名無しさん
NGNG実際のところはそれすら自明ではないんですがね。
0928デフォルトの名無しさん
NGNG自分は規制が掛かって立てたれなかった。
一応次のテンプレ用意しましたので、どなたかお願いします。
(リンク関係は量があるので、立った後に貼ります)
↓テンプレ
--------------------------------------------------
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あたり
0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNGそれがOKと勘違いしてるやつがこのスレに
いるように見受けられるが。
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNGそろそろ空気読めよ。
0935デフォルトの名無しさん
NGNGhtml化してるぞ全部
0936デフォルトの名無しさん
NGNG道徳的・宗教的・政治的な信念に基づき、自らの行為を正しいと信じてなされ
る犯罪。思想犯・政治犯・国事犯など。
0937デフォルトの名無しさん
NGNG0938デフォルトの名無しさん
NGNGどうか安らかにgcされてください>932
0939デフォルトの名無しさん
NGNG脳内翻訳とかな。
0940デフォルトの名無しさん
NGNG英語論文に日本語訳を書き込んでセミナーに臨むのも禁止だかんな
明日は覚悟しとけよ!
0941デフォルトの名無しさん
NGNGただ、量が少なければ著作性は認められないから良いかもしれないが。
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNG2. 翻訳ができた段階で著作権に連絡を取り許可をもらって頒布する
こういうのはよくあるんじゃないかと思うんだけど、
1. の段階で法律違反なのですか?
許可を取らないと、1. すら駄目ということですか?
0944デフォルトの名無しさん
NGNGあ、テンプレに翻訳物の著作権絡みの話題禁止って書いておいて下さい。
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1045006087/
↑これがライセンス総合スレらしいけど、放置されてるから著作権についての議論に使えば?
0947デフォルトの名無しさん
NGNG--------------------------------------------------
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あたり
0948デフォルトの名無しさん
NGNGLisp使いの数→@マ板
http://pc.2ch.net/test/read.cgi/prog/1031179059/l50
Lisp@UNIX版
http://pc.2ch.net/test/read.cgi/unix/1019926525/l50
0949デフォルトの名無しさん
NGNGちょっとわかりにくいけど、著作権法43条によって、私的な翻訳
や、教育上の翻訳も許されます。
第30条は確かに複製だけを対象にしてるように見えますが。
0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNG>>950
次スレよろ。
0952デフォルトの名無しさん
NGNG高林さんの次のも見つけたけど、さっぱりわからない。
http://namazu.org/~satoru/unimag/10/
英語・日本語どちらでもいいから、もっとわかりやすい説明ないですかね?
0953デフォルトの名無しさん
NGNGx と y が S式ならドット対 (x . y) も S式である
これでいいと思うけど、Lispで扱うのはみんなS式だよ。
0954山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG0957950
NGNGS 式を知りたくてこのスレッドにたどり着いたので。
0958955
NGNG0959デフォルトの名無しさん
NGNGそれはそうと、俺はクソプロバイダのせいで次スレ立てられない。
誰かよろしく。
0961デフォルトの名無しさん
NGNGtsukaeru
yo
n
0962山崎 渉
NGNG0963山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
レス数が950を超えています。1000を超えると書き込みができなくなります。