LISP Scheme Part5
レス数が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/
関連リンクは>>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の入門サイト。
慶応の授業のページ・記号処理プログラミング 2001
http://buri.sfc.keio.ac.jp/lisp/menu.html
Practical Scheme(日本語)
ttp://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)
Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
S式でXMLを使える様にするSXMLなど
John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。
お隣りのプログラマ板のLISPスレのログです。
http://mentai.2ch.net/prog/kako/963/963134110.html
0003デフォルトの名無しさん
NGNGCommon Lisp the Language, 2nd Edition(英語)
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
CommonLispの仕様書です。
アルゴリズム言語Schemeに関する第五改訂報告書 R5RS(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
http://www.biwa.ne.jp/~mmura/scheme/tspl.html#r5rs
日本語訳はここ以外にもあるそうです。
Scheme Requests for Implementation SRFI (英語)
http://srfi.schemers.org/
Scheme Frequently Asked Questions (英語)
http://www.schemers.org/Documents/FAQ/
0004デフォルトの名無しさん
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/
0005デフォルトの名無しさん
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行の実装
0006デフォルトの名無しさん
NGNGの使い方教えてください。
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/
前スレ 364 参照。
0008Lisp使いの名無しさん
NGNG0009デフォルトの名無しさん
NGNGお疲れ〜〜
00101
NGNGいつのまにか5スレ目突入です。
0011デフォルトの名無しさん
NGNG誰かしら喜ぶかなぁ?
0012デフォルトの名無しさん
NGNGつーか、kawaで検索かも。
0013Lisp使いの名無しさん
NGNG使い方キボンヌ。
001411
NGNG自分で開発するのも楽しそうだと思ったのだが,
まぁ利用させてもらおうっと.
0015デフォルトの名無しさん
NGNG(ガイ・スティールが)「何か記憶に残るプログラムを
書いたかというと、どうもピンと来ない。」
って言ってるけど、そうなの?
0016デフォルトの名無しさん
NGNGなんか感じた事があれば教えてプリーズ。
0017デフォルトの名無しさん
NGNGcar, cdr を使うか first, rest を使うかでもめたことがあります
0019デフォルトの名無しさん
NGNG>first, rest
これ使ってる人いるの?
0020デフォルトの名無しさん
NGNGごめん、ちゃちゃだね。
とりあえず、複数人での開発とういう観点では、
ダイナミックスコープであることを意識しておかないとひどい目に
会うことがある、というかひどい目にあったことがあります。
それと、属性リストは使わないほうがよいと思います。パッケージ
を分けていない場合、複数の人が使ったときに破綻してしまうし、
ソースコード上わかりにくいので。
0021デフォルトの名無しさん
NGNG002216
NGNG参考になります。ひどい目にあったというのは free variable を参照
する時でしょうか? マクロとの兼ね合いもありそうですが。
>>21
SICP と R5RS で十分だと思いますよ。
0023デフォルトの名無しさん
NGNG2〜4人で開発したこと(CommonLisp, Scheme) は何度かあります。
Lispハッカーの人は、コメントをほとんど書かないか詳細に書くかの2極に分かれる
ように感じました。コメントを書かない人は、きっと頭の中にロジックが収まって
いるのでしょう。ただコメント無しで高階関数を使いまくられると、ぱっと見た時
関数がどんな関数を受け取ることを仮定してるのかわからないんでつらいです。
分かりやすさという点ではなるべくオブジェクト渡しにしておく方が良いですね。
0024デフォルトの名無しさん
NGNGRABBITってScheme compilerは、Steeleの作。
最低限のprimitiveにprogram変換しといてからってやつ。
http://citeseer.nj.nec.com/context/1162426/0
こういう評価。古典だな。
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGpotatoだとない。woody/sidには入ってる。
0029デフォルトの名無しさん
NGNGLISPだと名前空間は問題にならないんでは?
CommonLispならpackageがあるし、各作業者が定義したファイルを
巨大な1関数として読みこむ(packageの前身?)こともできるでしょう。
packageみたいなのはschemeにも処理系毎に大抵ある。
packageが無くても環境を操作できる処理系があるとすれば、
(define PG-A
(let ((env (load-environment "PG-A.scm")))
(lambda(procedure-name . argument)
(if (eq? 'import procedure-name)
(apply find-environment (cons env argument))
(apply (find-environment env procedure-name) argument)))))
(PG-A 'function1 arg) ;CommonLispのpackage名参照もどき
(define PG-A-function1 (PG-A 'import 'function1))
(PG-A-function1 arg) ;CommonLispのimportもどき
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGこちらでは ACL を使っているので、命名規則は ACL に習って、
public な変数: *foo*
public な関数: foo (そのまま)
private な変数: .foo.
private な関数: .foo
にしています。
>>29
Common-Lisp の package って、
(mypackage::private-function)
のように :: を使えば private な領域にアクセスできてしまうのが
困ると言えば困りませんか?微妙な問題だと思いますが。
0032デフォルトの名無しさん
NGNG全部リストにしていたけど,今更ながら違和感を覚えた.
0033デフォルトの名無しさん
NGNGクロージャでもベクターでも作れますが何か?
0034デフォルトの名無しさん
NGNGリストで何か問題でも?
つっても、まあ気持ちはわかる。
schemeは参照ベースだから全部ポインタだし、
「見なす」ことが多いからね。
よく見かけるのは、vectorでもlistでもいいけど
(*構造体識別タグ* 構造体名 member1 member2 ...)
というデータ構成を「構造体」ということにして、
(define-structure point x y)
とすれば
(define (make-point member1 member2)
(list '*構造体識別タグ* 'point member1 member2))
(define point.get-member1 caddr)
(define point.get-member2 cadddr)
(define point.set-member1! (lambda(s)(set-car! (cddr s))s))
(define point.set-member2! (lambda(s)(set-car! (cdddr s))s))
(define point? (lambda(s)
(and (pair? s)
(eq? (car s) '*構造体識別タグ*)
(eq? (cadr s) 'point)))
辺りを自動生成する様なマクロを組むとかね。
(define-structure point x y)
(define pt (make-point 0 0))
(point.get-member1 pt)
==>0
003534
NGNG0036デフォルトの名無しさん
NGNG(define (test-rec n)
(let loop1 ((x 0))
(if(< x n)(begin(display x)(loop1 (+ x 1)))))
(let loop2 ((x 0))
(if(< x n)(begin(display x)(loop2 (+ x 1))))))
これ、loop1,loop2両方とも末尾再帰してますか?
0037デフォルトの名無しさん
NGNGhttp://theory.lcs.mit.edu/~rivest/sexp.txt
Expire してるけど、S式好きとしてはなるほどと思う。
世の中ぜんぶS式になっちゃえ!アヒャ
0038デフォルトの名無しさん
NGNGちょっと大きなシステムを組む時は、構造体っぽいwrapperがあったほうが
圧倒的に便利と思われ。
ポータビリティ重視ならSRFI-9か。
http://srfi.schemers.org/srfi-9/srfi-9.html
0039デフォルトの名無しさん
NGNG> :: を使えば private な領域にアクセスできてしまうのが
> 困ると言えば困りませんか?
非常時以外はそういうことをしない、というルールを
徹底できれば…
モジュール間のインタフェースを摺り合わせつつ開発してて、
別モジュールのあれは非公開だけど使ったらインタフェースが
すっきりするんじゃないか、と思い付いた時に、わざわざその
モジュールに公開してもらう前に試せる、というのが便利なんですよね。
建前では「そんなことはケシカラン」のですが、「本当にそのように
インタフェースを変更することが有効か」を検証するためには
一度組んでみなければならない場合もあるわけで。
iterativeに開発してて、明日デモらなくちゃならんとかいう
追い込みの時は特に…
そういう意味では実にハック向けの言語ですね。
デモが終ったらそういうハックを忘れてそのままにしてしまう
危険はありますが。
0040デフォルトの名無しさん
NGNGリンク見れないんですが。
0041デフォルトの名無しさん
NGNGnamed-letはinternal-defineやletrecと同じ扱いなので、
その例では末尾再帰です。
0042デフォルトの名無しさん
NGNGガーベジコレクションを意識する必要ないだけで、かなり。
0043デフォルトの名無しさん
NGNGもちょっと詳しい解説きぼん
0044デフォルトの名無しさん
NGNGCommon Lisp の仕様書としては、いわゆる HyperSpec
http://www.xanalys.com/software_tools/reference/HyperSpec/Front/index.htm
のほうが正規のものだとおもいます。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG意識する必要のあるGC萌え
0047デフォルトの名無しさん
NGNGCommon Lisp より人気があるような気がするのですが、
これはどういうわけなんでしょう?
「(ぷっ) Common Lisp だって! あれって(言語仕様がAdaなみに)
ばかみたいにでかいよね!」
みたいな反応をWeb上や雑誌などで何回かみたことあるんですが、
おまえら、どうですか? (2ch ではこういう物言いが正しいのですよね)
Common Lisp がでかいというなら C++はどうなんだろうとおもう今日この頃
です。(Adaのことは詳しくないけど、あなどれないらしいという噂はききました。) ちなみに漏れは、Emacs lisp -> Common Lisp という順に進みました。
P.S. あと、Schemeは確かISOの国際規格になっていて、Common LispはANSIどまりでアメリカの規格でしかないということも知っています。あと、ISLisp
(だったかな)とかいうLispの国際規格があるらしいけど、実質的に放置プレイ
されていることも知っています。
0048デフォルトの名無しさん
NGNG規格はあまり気にしてないかな。Common Lisp も嫌いではありませんが、
よくわからんので中途半端にしか使えません。Emacs Lisp は書けます。
0049デフォルトの名無しさん
NGNGはっきりいって、Schemeの各処理系もR5RSだけでは耐え切れなくて
Common Lisp にあるような機能を独自に拡張したり、
ど忘れしてしまったけど、ユーザーレベルの規格みたいなものを決めていこうと
いう動きがあるよね?
それだったら、とりあえず Common Lisp を使ってしまって、いいんじゃないの? と思うんだけど。 Kyoto Common Lisp を書いた偉い先生もたしか、
エッセイで「アメリカは嘘っぽいことをもっともらしく言うけど、
結果オーライで、Lispプログラムの互換性がとれればまぁ、我慢できるかな」
みたいなことを言っていたのを読みました。
Common Lisp の制定時に、金がからんだり、政治的な思惑があったらしい
ということは、当時者ではないので、詳しくは知らないけど、噂レベルでは
知っています。(漏れはcomp.lang.lispをたまに読んでいるので、Common Lisp 制定時のEditor だった KMP さんがいろいろ昔話をするのを読んだりして、その当時の雰囲気を察しています。当然一方的になるのは承知ですので、カンウンター情報希望。)
005048
NGNG他人の定義した関数を調べるよりも、自分でササッと書いてしまった方が
楽な場合が多いので、あえて Common Lisp を使う気になれないんです。
もし多くの処理系で動作する事が最重要課題のひとつであるならば、
Common Lisp を使いますよ。
あとは、Scheme の proper tail recursion の存在が非常に大きいです。
全ての Common Lisp 処理系でこれが使えたら、Common Lisp を選んで
いたと思います。
0051デフォルトの名無しさん
NGNG「正規」どういう意味?
こっちがX3J13で採用されたんだっけ?
>>49
CLtL読んだ?
Common Lisp誕生については、共立のbitのバックナンバーも読んでね。
竹内さんがCommon Lispのヤな所を書いた記事もあったはず。
俺はCommon LispはCLOS以外忘れた。
0052デフォルトの名無しさん
NGNG亀レスだが、biglooもどうぞ。
0053デフォルトの名無しさん
NGNG> あとは、Scheme の proper tail recursion の存在が非常に大きいです。
これはたしかに、Common Lisp の規格には含まれていません。
しかし、これってそんなに必要っていうか、重要でしょうか?
proper tail recursionが保証されているっていうのは、
プログラムのその部分の実行速度が高速になるという思惑があるんですよね?
現在、すでにかなり酒を飲んでいるので、厳密な書き方が不可能なんですが(すいませんはっきり言って変なこと言っても見逃してくれモードに入っています)、
proper tail recursionとか言っても、なんか、foo-BANGみたいな
むりやり別の関数を定義して、accumulator変数、(つまり結果を累積するための変数)なんかを引数としてとる関数を別に定義したりする必要が出て来たり
しませんか?
漏れはそんなことするくらい実行速度を速くしたいなら、そこだけ、Cなり、
アセンブラなりで記述すえばいいと思います。
あぁぁ、今これを書いていて、なんだか知らないけど、Mozillaのメールウィンドウが馬鹿みたいに立ち上がって、今まで書いたことが無駄になりそうに
なったので、とりあえずこれだけを送信します。(はっきりいって2ch初心者です。)
0054デフォルトの名無しさん
NGNGArc
005548
NGNG僕が proper tail recursion に期待しているのは、実行速度ではなく
可読性と記述性です。他の言語を使用していていると、proper tail
recursion ならスッキリ書けるものをわざわざ汚いループ構文や
制御変数を使ってバグの元を作らなければならない事態にストレスが
たまるんですよ。
0056デフォルトの名無しさん
NGNG> >>44
> 「正規」どういう意味?
> こっちがX3J13で採用されたんだっけ?
というか、X3J13規格(って言うんだっけ?)そのものに、規格制定時に
もめた事項、つまりだれかが文句を言って、それが採択されたりした経緯
もあわせて収録されていると思います。
comp.lang.lispの雰囲気では、 CLtL1もしくは2を元になにか言おうとすると、「1は規格を制定した団体が認めたものだけど、2はちがうよ、
規格そのものを見てね」みたいな雰囲気です。でもこれは一日本人が
つたない英語理解能力で解釈したものです。
> Common Lisp誕生については、共立のbitのバックナンバーも読んでね。
> 竹内さんがCommon Lispのヤな所を書いた記事もあったはず。
ここは確か、書店でCommon Lispという書名で分厚い本を見た記憶があるのですが実際には読んでいません。(翻訳を誰がやったのかとか、他のコンピュータ
関連の日本語訳でいたい目にあって段々翻訳を信用しなくなっていた時期なので読んでいません。残念です。でも竹内先生の「はじめての人のためのLisp」は
最初に読んだLisp啓蒙書なのでなんだか良い気持。{でも最初は何内輪受けしてんだこの学者野郎ーという感想})
0057デフォルトの名無しさん
NGNG> 僕が proper tail recursion に期待しているのは、実行速度ではなく
> 可読性と記述性です。他の言語を使用していていると、proper tail
> recursion ならスッキリ書けるものをわざわざ汚いループ構文や
> 制御変数を使ってバグの元を作らなければならない事態にストレスが
> たまるんですよ。
求めるものが可読性とかなら、勝手にそういうふううに書いとけば、最低限,
結果は正しくなるとおもいます。というか、だって、proper tail recursion
って、(速度はどうだっていいっていうのなら)、その関数内で、実行するのがその関数への呼び出しだってことだけだよね? そしてそれは実装上じつは、
ループで済んでしまうのでしたぁ!!!!!ってことだけだよね?
0058デフォルトの名無しさん
NGNG日本語が何かいい壊れ具合。加えて2chデビューしたのも良い気分。
酒飲んで酔っ払って井幾分。今日、Common lispに校夷狄な書き込みしたのは
同一人物だ。みん適当な書き方でなですまん。そのうち埋め合わせするつもりだ。
0059デフォルトの名無しさん
NGNGCommonLispはほとんど使ったことがないのだが,話によると
関数と変数の名前空間が違うとのことだそうで.
それって関数もデータとして扱う関数型言語として非常によろしくないような気が….
商用Schemeが少ないのは少々困りものだが,まぁローカルでごにょごにょ書くときは
slibもあるしsrfiもあるし,まぁ無駄に多くプログラムを書く必要性は少なそうね.
0060デフォルトの名無しさん
NGNG> 求めるものが可読性とかなら、勝手にそういうふううに書いとけば、最低限,
> 結果は正しくなるとおもいます。
そういえばそうだなあ。性能もやっぱり気になるんだよなあ。
100Mくらいあるログファイルをがーっとなめる処理なんかを
よくtail callでがしがし書くんだけど、それがproper tail recursion
で実行されてないとなると、やっぱり気がひけるんだなあ。
0061デフォルトの名無しさん
NGNGsymbol-functionとsymbol-valueが別にある、
ってのはSteeleも「やめておけば良かった」点として上げてるね。
けど、互換性考えると"Common" Lispとしては、
そういうわけにいかなかったと思うけど。
0062デフォルトの名無しさん
NGNG実行速度よりもスタック消費無しというのが重要なんじゃないのか?
スタック喰い潰して途中終了という事がなくなる。
ちなみにcommon lispでもコンパイラは大抵そのように扱ってくれるので
問題があればコンパイルすれば大抵大丈夫。
0063デフォルトの名無しさん
NGNG> というか、X3J13規格(って言うんだっけ?)そのものに、規格制定時に
> もめた事項、つまりだれかが文句を言って、それが採択されたりした経緯
> もあわせて収録されていると思います。
それがCLtLで、>>44のHyperSpecとは違うんじゃない?
これnoteやrationaleが全くないよね。
0064デフォルトの名無しさん
NGNG> symbol-functionとsymbol-valueが別にある、
> ってのはSteeleも「やめておけば良かった」点として上げてるね。
いまさらながら Emacs Lisp を使いこなそうと思ってドキュメントを読んでます。
Scheme では symbol は function と value を別にもつって事はないのですか??
0065デフォルトの名無しさん
NGNG文字列のなかから、特定の文字列が含まれるときにtrueを返す関数って
ないでしょうか?
たとえば、
str1="ようこそ2ちゃんねるへ"
str2="ようこそ15ちゃんねるへ"
str3="2ちゃん"
で、str1とstr3で比較するとtrue、
str2とstr3で比較するとfalseが返る感じです。
おながいします
0066デフォルトの名無しさん
NGNGvb質問に書き直します
006747, 49, 53, 58
NGNGまったくそのとおりだね。返すことばもありません。
>> 63
いわゆるHyperSpec
http://www.xanalys.com/software_tools/reference/HyperSpec/Front/index.htm
の本文は、(いろんな意味での間違いとかヤな部分も含めて)X3J13規格書そのもの。
そんでそれプラス独自にrationale見たいな感じでだれそれがこんなこと云ってました、そんでそれが採用されましたというのも含まれています(あれ、ANSIの規格書
にもこれは含まれているのかな)。
いま思い出したんだけど、CLtL2が出版されたあとで変更になったこととか
あるから、規格書を見た方がよいという理屈も comp.lang.lisp ではされたいたな。
読みやすさの問題があるだろうけど、いちおう「ルール」としては規格書を見るのが
普通だよね。(K&R vs. ISO C みたいな構図?)
0068デフォルトの名無しさん
NGNG006967
NGNGX3J13はANSIという組織にあるCommon Lispの規格を決める委員会だとおもう。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG志を高く持て
007270
NGNG0073デフォルトの名無しさん
NGNG(call/cc (lambda (c) (0 (c 1)))) => 1
DrScheme だと 1 になって、Guile だとエラーになりました。
これはいかがなものか。
0074デフォルトの名無しさん
NGNGオレはそのままでいいと思う。それは揚げ足取りというか、
実際に問題になることはないんじゃねーの?
007573
NGNGたしかに。気にする程の事でもないですね。
ところで Lisp 使いの人って、オブジェクト指向をどう捉えてるんでしょ。
別に激しく議論する程のものでもないと思ってるのかな。
自分はオブジェクトとして扱うと便利かな? と思う時に使う程度。
抽象化の過程で無意識にオブジェクトとして扱っている場合も多いん
でしょうけど。
0076名無しさん@Emacs
NGNG1.シンボルを関数と値の二つを持つから、変数名に car とか list とか気がねなく使える.
(cf. Scheme の好きなところ 1)
2.(defun "ドキュメント" (arg) body) みたいに、ドキュメントを入れられる.
(他人の src 読むとき非常に便利)
3.keyword 引数.
4.コンパイルできる.
Scheme の好きなところ
1.(defun foo (f) (funcall f)) じゃなくて (define (foo f) (f)).
(cf. Common Lisp の好きなところ 1)
2.continuation.
007776
NGNGScheme の好きなところ
3.コンパイルしなくても末尾再起.
0078デフォルトの名無しさん
NGNG評価器の作りの違い。
オペレーターに対しての評価成否をどこで判定してるかの差。
0079デフォルトの名無しさん
NGNGしつも〜ん。
> (call/cc (lambda (c) (0 (c 1))))
0なんて関数は(ふつう)定義されていないから、エラーになるという解釈と、
それ以前に引数の評価で continuation を呼び出しいるために1がそのまま返される
という解釈?
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG4.1.3 Procedure callsにあるように
oprator, oprandの評価順は"in an unspecified order"だから、
Dr.Schemeもguileも仕様通りの実装。
>>73のコードが実装依存なだけと思われ
008273
NGNGThe operator and operand expressions are evaluated (in an unspecified
order) and the resulting procedure is passed the resulting arguments.
オペレータとオペランドの式は評価され (unspecified な順で)、結果の
手続きが結果の引数をパスされる。 ; ひどい訳だ
と書かれていますよね。ってことは、0 が procedure として引数をパス
される前に (c 1) は評価されるべきなのでは?
0083デフォルトの名無しさん
NGNGその英文だけから判断すると、0と(c 1)は unspecified な順で、つまりどっちが
先かは処理系に依存する順番にevalされてってことだから、やぱーりエラーになるか
1が返されるかは、処理系依存だろ。0でさえもevalされてから
オペレータオブジェクトみないなものになってから(漏れは scheme 用語知らん)
呼び出される。
008483
NGNG0085デフォルトの名無しさん
NGNGという罠?
0086デフォルトの名無しさん
NGNGこれについて、Will Clingerがdenotational semanticsをがしがし
計算して、1を返す(もしくはメモリがあふれる)のが正しいって
いってるんですがサパーリ理解できません。
http://www.ccs.neu.edu/home/will/Personal/Nerdliness/callcc.txt
008781
NGNGいや、Lispと違って、Schemeは、
(f x1 x2 x3 ...)のfもevalされてからapplyするの。
>>86
ああ、7.2 Formal semanticsがおかしいんじゃねーの? って話か。
確かに"runs out of memory"になるsemantics付けはおかしいな〜。
まあ⊥には違いないわけだが(w
どうやったらfixされるかは書いてないね。
0089デフォルトの名無しさん
NGNG(define x '(a b c))
(set-cdr! (cddr x) (list 'd))
2つ目のリストは、なぜ (a b c d)なのでしょうか?
(cddr x) => (c) なのだから、2つ目のリストは(c d) になる
ように思うのですが!?
0090デフォルトの名無しさん
NGNG2つ目のリストってのは何のこと?
1行目で(a b c)というリストが作られて、2行目でそれを変更してるだけでわ?
0091デフォルトの名無しさん
NGNG質問が少し間違いました。
[1] (define x '(a b c)) => x
[2] (set-cdr! (cddr x) (list 'd))
[3] x => (a b c d)
なぜ[3]は(c d) ではないのでしょうか? という質問でした。
(あっ!)すいません。今、理解できました。リストxの
3つめのアトムにset-cdr! するのですね。だから(a b c d)。
お騒がせしました(^^;
0092ななしLisp@それだけ
NGNG(setf (cdddr x) (list 'd))
0093デフォルトの名無しさん
NGNGconstant listを変更しちゃいかーん。
Schemeだとホントはset-cdr!の時点でエラーになるべき。
Common Lispだと定数リストを変更した場合の動作は未定義だっけ。
0094デフォルトの名無しさん
NGNGScheme初学者(89書き込みました)です。89は本の例題でした。
ところで、なぜ「 constant listを変更しちゃいかーん。」の
でしょうか?その辺が関数プログラミングの真髄ですか??
関数プログラミングの利点を知りたいな。。。
0095デフォルトの名無しさん
NGNGその本何ですか。
とりあえず、Schemeでそれをやっちゃいけないフォーマルな根拠は
R5RSのsection 3.4 "Storage model" の最後のパラグラフ。
Constant list (literal listの値)を変更してはいけない理由は、
- そういうオブジェクトはコンパイルされた時read-only memoryに
置かれる可能性がある (ハード的なROMというわけではなく、text
regionなどの変更不可なエリアも含む)。
- コンパイラは最適化によって、そういうオブジェクトをプログラムの
他のデータと共有することもある。破壊的操作をすると思わぬ箇所に
影響が出る可能性がある。
後者は最近、comp.lang.lispで「一行づつ実行すると動くのに関数に
まとめると動かない!」って誰か悩んでいたな。
(setq x (list 'a 'b 'c))
(set-cdr! (cddr x) (list 'd))
なら良い。
0096デフォルトの名無しさん
NGNG犬飼さんの「入門Scheme」のPDFバージョンのp.35です。ただし、
このようにコーディングせよと説明している訳ではなく、
set-cdr! set-car! の使用例としてあげられています。
http://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
Constant list というのは、'(a b c d) のことですか?
'(a b c d) と (list 'a 'b 'c 'd) は同じと思ってましたが。。
0097デフォルトの名無しさん
NGNG> The consequences are undefined if literal objects (including
> quoted objects) are destructively modified.
ちなみにHyperSpecではliteralにリンクが張ってあって、 次のような
glossaryにあるliteralの定義に跳びます。
literal adj. (of an object) referenced directly in a program
rather than being computed by the program; that is, appearing
as data in a quote form, or, if the object is a self-evaluating
object, appearing as unquoted data. ``In the form (cons "one"
'("two")), the expressions "one", ("two"), and "two" are
literal objects.''
こりゃいいやね〜。
009893=95
NGNGもちろん、
(equal? '(a b c d) (list 'a 'b 'c 'd)) ==> #t
です。そういう意味では同じ。ただ、(list 'a 'b 'c 'd)は評価される
たびに新しいリストが作られることが保証されているのに対し、
'(a b c d)はコンパイラがあらかじめどっかにリストを作っておいて
そのポインタを返すだけ、とするかもしれない(処理系依存)。
(define (foo) (list 'a 'b 'c 'd))
(equal? (foo) (foo)) ==> #t
(eq? (foo) (foo)) ==> 常に#f
(define (foo) '(a b c d))
(eq? (foo) (foo)) ==> #tかもしれない
0099デフォルトの名無しさん
NGNGCommon Lisp には、eq, eql equal, equalpの4つ。
0100デフォルトの名無しさん
NGNGequalpってなんだっけ?
schemeでは
eq? (= eq)
eqv? (= eql)
equal? (= equal)
の3つだけ。
あとはmemq,memv,member/assq,assv,assocみたいに
比較形式毎に関数が用意されてるとか。
0101デフォルトの名無しさん
NGNGhttp://www.xanalys.com/software_tools/reference/HyperSpec/Body/f_equalp.htm
かいつまんでいうと、
数の型は無視して、数の数学的な値で比較。
文字の大文字と小文字を区別しない。
conse, array, structure, hash table などは中身をequalpで比較。
0102デフォルトの名無しさん
NGNG回答ありがとうございます。
しかし、98の内容は初学者には恐ろしい事実ですね。リストデータ
は '(a b c d) ではなく、 (list 'a 'b 'c 'd)で作るべきなのでしょ
うか? 少なくとも変更するかが不明な場合には、'(a b c d) は
使わない方がいいと言えますか?
0103デフォルトの名無しさん
NGNGそう考えるより、「何だか面倒臭そうだから、破壊的な操作はしないでいいや」
と考えるのがイカス漢の印。
0104デフォルトの名無しさん
NGNG了解!
さまざまなWEBページで述べられている”副作用なし”
指向ですね!? これがプログラミングの簡単・高品質化に
どういう効果があるのかが、まだ理解できてません。
勉強します。
どうも、ありがとうございました!!!
0105デフォルトの名無しさん
NGNG>>95
> オブジェクトをプログラムの他のデータと共有することもある。
> 破壊的操作をすると思わぬ箇所に影響が出る可能性がある。
0106デフォルトの名無しさん
NGNG書いて3部作にするってどっかに書いてたのにな。
早く読みたいなぁ、とか独り言。
0107デフォルトの名無しさん
NGNGハゲシク同位。
「なんでも継続」みてみたい。
イマイチ継続の使い方を知らないからー
0108デフォルトの名無しさん
NGNG止めるんだよ。時を。
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG(define tree '(a (b c (d) e) (f) g))
(define gen (tree->generator tree))
(gen) => a
(gen) => b
....
(define tree->generator
(lambda (tree)
(let ((caller '*))
(letrec
((generate-leaves
(lambda ()
(let loop ((tree tree))
(cond ((null? tree) 'skip)
((pair? tree)
(loop (car tree))
(loop (cdr tree)))
(else
(call/cc
(lambda (rest-of-tree)
(set! generate-leaves
(lambda ()
(rest-of-tree 'resume)))
(caller tree))))))
(caller '()))))
(lambda ()
(call/cc
(lambda (k)
(set! caller k)
(generate-leaves))))))))
0111デフォルトの名無しさん
NGNGどっからパクったんだゴラァ!
さしつかえなければ教えてください。
0112デフォルトの名無しさん
NGNGttp://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html
ここです。英語ですが。
「13 Jumps」に継続とかあります。
0113デフォルトの名無しさん
NGNGちょっと苦しいよみたいな -> Cでobject oriented (gtkとか))
というような continuation の使い方の例を挙げてくだしい。
0114デフォルトの名無しさん
NGNGScheme じゃなく Common Lisp についてだけど、マクロの"威力"を解説した
本としてよくPaul Graham さんの「On Lisp」が一部で話題になることがあります。
そしてそれがオンラインで読めます。
http://www.paulgraham.com/onlisp.html
漏れはマクロを駆使して Common Lisp で continuation の真似をする
というのが、食道や腸の方を表になるように裏返した人間を見たようでワラタ。
0115デフォルトの名無しさん
NGNG日本語がなければ英語でもいいです……
0116さすらいのelisper
NGNGEIEIO の info 。
http://cedet.sourceforge.net/eieio.shtml
0117さらわれた Common Lisper
NGNG英語だけど。
Successful Lisp: How to Understand and Use Common Lisp
http://psg.com/~dlamkins/sl/cover.html
0118デフォルトの名無しさん
NGNGcmucl の deb を入れてみようとしたんだけど。。。
cmucl cmucl-clm cmucl-normal cmucl-safe cmucl-small cmucl-source
と全部入れても cmucl コマンドないよ。コマンド名が違うの?
0119さんざんなlisper
NGNG/usr/bin/lisp
0120さ、さ...斎藤さ〜んなlisper
NGNGilisp パッケージも入れた方がよい気がする。
ターミナル画面でマターリ楽しむ木なら、clisp パッケージを入れた
ほうがreadlineライブラリを使っているのでイイ!
って、もしかして以前、とっくに同じ説明がされているという罠。
0121118
NGNGあり?公式サイトらしとこには cmucl で起動してるようなのがあったような
気がしたのに。。逝ってきます。
>>120
なるほど。ilisp も入れます。ありがとう。
0122cmucl マンセー
NGNG米軍(じゃなくてDefense of 俺の国みたいな役所)から金を引っ張ってきて、
気合いを入れて書いた処理系なので、現在市販されている 処理系に蚊って
しまっている所もあるエライものです(なぜこんなのがタダ?
そしてpublic domain? ちなみに paul graham がアフォみたいに
金を家政だYohoo関連のものはclispを使っているらしい)。
コンパイラは型情報をかなり積極的に利用したり、もともと数に関する処理
を刺せるつもりだったらしく数値処理も速いらしい。
「lisp なんて(実行速度)遅いよねっ!!」とか
「lisp に代表される動的な型をもつ言語って実行児にならないと
菜にしでかすかわからなくて、コワーイ!!!」
っていう人たちに、「データの型ってのはコンパイル児にかなり予測できる
ものですよ」とか、「型についてもコンパイル児によろうとおもえばチェック
できますYO!」とかを示すのに使われているのを目撃しますた。
0123115
NGNGサンクスです。
一応googleしてみたのですがなかなかめぼしいものがなかった
(特に日本語は)ので、助かりました。
お二人とも素敵なハンドルでよいですね。
0124sage
NGNG私はオートインデントが無いと括弧の数を合わせられないヘタレなんですが、
やっぱりEmacsを使うべきでしょうか?
0125デフォルトの名無しさん
NGNG面倒をみてくれるやつなら無問題じゃないの。
0126デフォルトの名無しさん
NGNGSchemeで使えるWEBアプリケーションのフレームワークって
ありますか? (ライブラリ?)
願わくば、javaのメッセージ・リソースによる国際化のような
ことができればいいですが。。
0127デフォルトの名無しさん
NGNG「新しいLispがPerlと同じくらい良い 文字列ライブラリを備え、
さらにサーバベースのアプリケーションに必要な 強力なライ
ブラリを備えていたら、それは人気が出るんじゃないか。」
ttp://www.shiro.dreamhost.com/scheme/trans/being-popular-j.htmlより
0128デフォルトの名無しさん
NGNG0129125
NGNGleadlineまで使っているclispならコンソールでもそういった事をしてくれるかな、と
……そんなはず無いか。一度使ってみよう。
0130デフォルトの名無しさん
NGNGclispのコンソール画面で、()の対応を見せてくれるよ。
)を打った時点で対応する(に一瞬だけカーソルが跳ぶよ。
0131デフォルトの名無しさん
NGNGScheme にはないのはなんで? Scheme の場合は C に変換する
っていうのはよく見るんだけど、自前でコンパイルできます、
みたいなのは見たことない。
0132デフォルトの名無しさん
NGNGバイトコードを出力するバイトコードコンパイラを備えています。
ネイティブコードコンパイラを備えているschemeがあっても全く不思議ではなく、
また実際に存在するのではないでしょうか。
でも多くの処理系では(独自の)バイトコードにコンパイルするだけで、実用上
問題ないスピードがでるのでそれで良しとしているのではないでしょうか。
それによってコンパイラを含めた処理系の移植性が向上することのほうが嬉しい
のでは?
0133デフォルトの名無しさん
NGNG的な使用をするときは、バイトコードにコンパイルする必要さえない場合もある
だろうし、また、バイトコードにコンパイルしたところで必ずしもスピードアップ
につながるわけではないらしいです(昔はコンパイル後のオブジェクトファイルの
小ささをバイトコードコンパイルの魅力としてとらえている処理系もあったらしい)。
Rubyはたしかインタープリターが構文木みたいソースコードの内部表現を
そのまま解釈(interpret)していると聞きました。そして残念なことにそれを
理由に2chでたたかれたことがあるとか。
0134デフォルトの名無しさん
NGNGしてきた。(どうせ難しいことできないし)
あとclispは日本語通るけど、cmuclはだめぽい。日本語通す技があるらしいん
けどNot Foundだった。
0135デフォルトの名無しさん
NGNGclispはunicode対応だからね(でもたしかメッセージの日本語化はまだだった
ような)。あとclispはWindows系で動くところも魅力だよね。
日本の人が書いたxyzzy というwindows用エディタのマクロ言語も
Common Lisp系だと聞いたことがあります。
あと、Franz社の allegro common lispは WindowsやUnix(Linux他)で
動くんだけど、Windows用のものは、VB や Delphi のような
操作感のフォームエディタが付いています。
他にも Windows用には XanalysのLispWorksや、CormanさんのCorman Lispがあり、Mac用にはMCLがあります。また、MCLの一部がオープンソース化されたもの
(Open MCLだったかな)もあります。
これだけの選択肢がある(他にもKyoto Common Lispの子孫系のECL、GCLなど)
というのも、歴史のある言語の利点でしょうか。
0136デフォルトの名無しさん
NGNGそうです。真面目にナムーという感じ。たしかMaximaというMathematicaのような
ソフトもあわせて管理していたはず。後継の管理者見つかったんでしょうか?
0137デフォルトの名無しさん
NGNGΣ(゚д゚lll)ガーン
ソースどこですか?いや疑ってるわけじゃないんだけど、、、
ところで、便乗質問のスレ違いで申しわけないんですが、
2ch内で maxima について話しているスレって誰か知りませんか?
0138デフォルトの名無しさん
NGNG「いまならGCLの管理者に君もなれる!(前管理者が亡くなられたため)」
みたいに煽っている文を読んだ記憶があるというだけなんですけで、
確認をするのは御自身でお願いします(無責任ですいません)。
でもmaximaも管理されていたというのはそこで読んだことですので、
嘘だったらたちが悪いというか。。
とはいえ、なんでこんな時間に起きているんだ>俺。
あっと、それから、そのサイトを見たのは今年に入ってからのはずです。
それでは。
0139デフォルトの名無しさん
NGNG1980年代には、Schemeのネイティブコードへのコンパイルはずいぶん
研究されていた。YaleのTとか。http://www.paulgraham.com/thist.html
今残っているので大きいのはChezSchemeくらいか。
現在のプロセッサの進歩の速度だと、少人数のチームでベンダ製のC
コンパイラとかと張り合えるネイティブコードコンパイラを作るのは
あまり現実的ではなくなっちゃったんじゃないか。
0140デフォルトの名無しさん
NGNGバイトコードだけが中間コード表現ではないよ。
Schemeのようなレキシカルスコープの言語では、中間コードへ
コンパイルすることの大きな利点は変数束縛がコンパイル時に
解決できること。ローカル変数の参照の度に環境リストを
探さなくても、ポインタ参照とオフセットだけで済む。
マクロがコンパイル時に展開できるのも大きい。この2点だけでも、
中間コードへのコンパイルの利点はあるんじゃないか。
SCMなんかはそれらをやった上で元の木構造を保存している。
Gaucheはグラフにしているらしい。
何年か前に、木構造でもバイトコードでも速度はあまり変わらない
とかいう記事を読んだ覚えがあるけど、最近のプロセッサでは
なんとなくバイトコードの方がキャッシュの効きが良さそうな
気がするんだが、どうなのかなあ。
0141デフォルトの名無しさん
NGNG実行しています。つまりrepループの内部が(print (eval (compile (read))))
みたくなっています。
0142デフォルトの名無しさん
NGNGなんでJavaがはやって、Lispは流行らないのでしょうか?
機能的な比較ができる人がいましたら、教えてください。
0143デフォルトの名無しさん
NGNG単に一般人が Lisp の良さがわからないだけ。
「みんなが使ってるから」って理由で Java を使ってるんでしょう。
0144デフォルトの名無しさん
NGNGデザインの「悪い方がよい」原則 Richard P. Gabriel
http://cl.aist-nara.ac.jp/~daiti-m/text/worse-is-better-ja.html
上記の文書を勝手に漁って友だちに見せてしまった小僧があの
xamacs, netscape の Jamie Zawinski なのがワロタ。
このあと Worse is better サーガに発展。
http://www.dreamsongs.com/WorseIsBetter.html
0145デフォルトの名無しさん
NGNGLispにあってJavaになさそうな機能もしくは違っている点を列挙します。
漏れはJavaはそれほどというか最初のころに仕様をちょろっとみただけなので
おかしいところはどなたかつっこみを入れてください。
* bignum (無制限に大きな絶対値の整数を扱える。でもJavaもありそう)
* ratio (有理数を正確にあつかえる。えーと0.123456を123456/1000000みたいな)
* 動的な型(これは有利な点というより違い)。
したがって型のことは考えなくてどんどん適当なコードを書いていくことができる。
いわゆるプロトタイピンングつまり、大まかにとりあえず動きそうなコード書いて
みる感じ。
* 上の点と似ているが、開発しているときの感じが perl, python, ruby, ...
などのいわゆるスクリプト言語によくにている。ここからこれらの言語は
Lispの子孫なので「Lispは勝ったのと同じ」という"勝ち組"みたいな人もいる。
* LispOSという開発者に取っての桃源境を一度すでに実現している。
* 規格と実装が分かれている。また実装が複数ある。
* CLOS。
+ standard method combination (elisp の adviseみたいなもの)
+ MOP (meta object protocol)
+ change-class みたいに動的に何かをするという機能が満載。
+ 2chでもスレが立っているAOP (アスペクトオリエンティッドプログラミング)
はXeroxが最初 Lisp でいろいろやって目鼻がついてから、
Javaに移植して公開。
* バグが発生したときは基本的にデバッガが立ち上がるようになっているため、
その場でバグを直して実行を継続するなど、絶対に死んではいけないプログラム
などに便利。
* マクロ
* コンパイラマクロがあるため、処理速度のためだけにする記述の仕方などを
ソースには書かずに、別にコンパイラマクロとして分離することができる。
* カスタマイズ可能なreader。printer。これは珍しくないか。
* まだまだいっぱい。
* っーか James Gosling って (元) lisper じゃん。
0146デフォルトの名無しさん
NGNG後々強力になれるんだが,設計をきっちり出来る技術者が少ないような気がするね.
オブジェクト指向ねぇ…,これってどうなんだろ?
「オブジェクト指向は戦場では必要なし」スレでも見てくるか….
0147デフォルトの名無しさん
NGNG> * マクロ
これは膨らまそうとすればいくらでも膨らむでしょう。(Lisp最後の砦というか)
0148デフォルトの名無しさん
NGNG0149scheme小僧
NGNGExercise 3.2.6: OR の定義として
A) (define-syntax or
(syntax-rules ()
((_) #f)
((_ e) e)
((_ e1 e2 e3 ...)
(let ((t e1))
(if t t (or e2 e3 ...))))))
が正しくて
B) (define-syntax or
(syntax-rules ()
((_) #f)
((_ e1 e2 ...)
(let ((t e1))
(if t t (or e2 ...))))))
が正しくないわけを述べよ、というのがあります。
これの答えは
(or e1 e2) について、A では e2 が tail call になるが、
B では e2 が tail call ではなくなる(すなわち規格の要求から外
れる)から、だと思うのですが、あっていますか?
※ (or e1 e2) を展開すると、
A: (or e1 e2) => (let ((t e1)) (if t t (or e2)))
=> (let ((t e1)) (if t t e2))
B: (or e1 e2) => (let ((t e1)) (if t t (or e2)))
=> (let ((t e1))
(if t t
(let ((t2 e2)) (if t2 t2 #f))))
0150デフォルトの名無しさん
NGNGあってる。
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGどっかも使ってくれるんじゃない?
ベンダサポートの処理系とかじゃないと,処理系のバグが出たとき困るでしょ.
え? 自社製Scheme? まーそれはそれでいいかと思われ.
0153LispOS
NGNGhttp://lists.tunes.org/mailman/listinfo/lispos/
0154名無しさん
NGNG> * 規格と実装が分かれている。また実装が複数ある。
これはJavaもそうです。(perlじゃねーんだから…)
> * っーか James Gosling って (元) lisper じゃん。
SchemeでCommon LispなSteeleも規格を書いてます。
仕様書書きに慣れているから、細かい所は彼がほとんどやっているとか。
(Javascriptもそれで声がかかったらしい)
>>153
SymbolicsのmachineとかTAOのことじゃないかな?
0155デフォルトの名無しさん
NGNG広大に一台あったと聞いたが
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGλ...... λ......
λ...... λ......
λ...... λ......
λ...... λ......
λ......
λ...... λ...... λ......
0158142
NGNGどうもです。
>* bignum (無制限に大きな絶対値の整数を扱える。でもJavaもありそう)
>* ratio (有理数を正確にあつかえる。えーと0.123456を123456/1000000みたいな)
これはライブラリーを作ればどうにでもなりますね。
というか、チューリングマシン=ラムダ計算
ですから
着目すべきは、どういう点が記述しやすいのか?と言う事になると思います。
できる事は結局同じなんですけど。
>* っーか James Gosling って (元) lisper じゃん。
lisperというか、ほとんどの言語についてかなり詳しいです。
JavaはC++の後継と言われていますが、実は複数の言語の複合体なんです。
いまいち、lispとjavaの違いがわかりません。
違いと言うか、メリット、デメリットの事なんですが。
実はschemeをかじった事があるのですが、それを踏まえて言えば
個人的にはオブジェクト指向で設計して、コーディングするのが好きです。
schemeにもオブジェクト指向がありますが、あれはどうなんですかね。
まだ試した事ないのですが。
一方schemeは関数の集合体のような関数を作成する時
デバッグしつつできるので、便利だと思います。
JavaでもJUNITを使えば、それに近い事はできますが
JUNIT<Lispですね。
Lispはフレームワーク(!=モジュール)のような物を作るのには向いてない気がします。
0159143
NGNG> まだ試した事ないのですが。
「オブジェクト指向がある」ってのはどういう意味でしょうか?
処理系独自の拡張という意味か、それとも first class closure を使った
素のオブジェクト表現か。自分としては後者でも十分に実用的だと思って
ます。多重継承とかも簡単にできるし。唯一面倒なのは、インタフェース
となる関数を書くことでしょうか。まぁ、マクロを使えば楽になりそう
ですけど。
(object-method obj)
0160デフォルトの名無しさん
NGNGJava と Scheme と Common Lisp の機能的な違いという点で、
Java 「おまえらこんな機能あるかゴラァッ!!」
Scheme 「やろうと思えばこんなふうにヴァカみたいに綺麗にできます。」
Common Lisp 「ありますた。というかもっと機能的にぐちゃぐちゃ、ねちょねちょ
したのがあるのでキモイといわれることもあります。」
という感じになってしまうのではないでしょうか。
schemeは知ってらっしゃるということなので、
僕としては Common Lisp そのものか、手軽さという意味で Emacs Lisp
をいじってみることをおすすめします。
0161デフォルトの名無しさん
NGNGこのスレでも紹介された eieio を Emacs に入れて遊んでみる
のも一つの手ではないでしょうか?
eieio の作者が言っていたのですが、職場のOOP研修のあとで同僚に
「Emacs Lisp ではあんなことできるはずないよな」といわれて
チャレンジ精神を刺激されて、あれを書いたそうです。
いま、Webページを見にいって驚いたんですが、なんかオブジェクト
ブラウザとかまで付いて僕が最初に見たときより、だんだん発展している
みたいです。
0162OOP with lisp
NGNG言語仕様に取り込まれているわけではなくて、
ライブラリ(というか関数群?)として提供されているのですね。
C <==> C++ の関係とはぜんぜん違いますね。なるほど。
あ、cfront みたいなものか…違う気もする…
0163デフォルトの名無しさん
NGNGつーか幻の統一言語というか(w
言語の拡張もLispで書く。
MakefileもLispで書く。
DebuggerもLispで書く。
テストもLispで書く(当然その枠組もLisp)。
とうぜんOSもLispで書く。
「Lispみたいな高水準言語でデバイスドライバーが書けるのかよ!」
「書いて金もらってましたが、なにか?」
みたいな会話が comp.lang.lisp で行われています。
0164162
NGNGいままで他人の .emacs とかをコピペするだけだったんだけど、
だんだんその内容がわかってきてうれしい。
いままで苦労して書いていたシェルスクリプトも lisp のほうが
書きやすいんじゃぁ…と思い出してきました。
あとは漏れの C 関数群 (てか C++ クラスライブラリ) の *.so が
呼び出せればなぁ、てか、そもそも「リンク」って概念がないのか。
さすがに Emacs 21 の組み込み関数として実装しなおす気にはなれないなぁ。
それわそうと、 Makefile も Lisp で書くってのはマジ??
それって GNU make と同等の動作をする Lisp プログラムがあるよ、ってこと?
それとも make + Makefile でやらせてる動作そのものを lisp でやらせるってこと?
「 Makefile も Lisp で書く 」ために便利なライブラリとかがあるんでしょうか?
0165デフォルトの名無しさん
NGNG> それって GNU make と同等の動作をする Lisp プログラムがあるよ、ってこと?
> それとも make + Makefile でやらせてる動作そのものを lisp でやらせるって
> こと?
その中間というか、いわゆる defsystem といえば Lisper の間では通じるらしい
のですが、つまり、Unix の make 相当のLispプログラムがあって、
そんで、Makefile 相当のものは、Lisp で記述するらしいです。
漏れはまだいじったことがありませんが、できるだけ多くの処理系を
サポートするように努力しているオープンソースプロジェクトのdefsystem
もあるらしいです。
0166デフォルトの名無しさん
NGNG> あとは漏れの C 関数群 (てか C++ クラスライブラリ) の *.so が
> 呼び出せればなぁ、てか、そもそも「リンク」って概念がないのか。
> さすがに Emacs 21 の組み込み関数として実装しなおす気にはなれないなぁ。
えーと、Emacs 21用が存在するのか分かりませんが、Emacs-dl みたいな
パッチがあって、共有ファイルの動的なロードを可能にするものです。
これがEmacsになんで含まれていないかというと、RMSが嫌がった(理由忘れた)と
いう噂を聞きました。
0167142
NGNG>僕としては Common Lisp そのものか、手軽さという意味で Emacs Lisp
どちらか挑戦してみます。
StandardMLとかはどうなんですか?
Schemeと大差ないなぁというとこまでしか、知らないのですが。
>Common Lisp 「ありますた。というかもっと機能的にぐちゃぐちゃ、ねちょねちょ
>したのがあるのでキモイといわれることもあります。」
言語を評価する際にいくつかの基準があると思います。
チューリングマシン=ラムダ計算=帰納的関数
なので、どういう計算ができるかという基準はナンセンスですね。
また、言語を評価する際に実行速度やメモリ効率を語ってしまうのもナンセンスだと思います。
あるアルゴリズムを記述する方法があればいいわけなので、
あとはコンピューターが高速化、効率化をすればいいわけです。
OOPLではないC言語であっても
OOPは可能であるなんて話が、OOは必要なしスレでよく見かけますが、
そのとおりで
Cしか使えない環境でも、OOが理解できてる人は
CでOOします。
しかし、それをC++でかいた方が便利です。
便利というのはどういう事かといえば、
簡潔に記述できるとか、見易く記述できるとか、
バグがでにくく記述できるとか、そういう事ですね。
そういう意味では機能的と書いたのは誤解の大元になってしまった気がしますが。
.emacsはlispというよりは、listですよね。
xml vs list
だったら、listを支持しますね。
簡潔ですから。
0168デフォルトの名無しさん
NGNGドキュメントをすこし読んだり、ライブラリのソースを見たことがあるんです
が、type inference と type のパターンマッチングだっけ?
ちょっと感動しました。
ここらへんのイイ!!という感覚を短くうまく説明した文書が、
Perlの伝導師みたいな人が Haskell を何かの集会で紹介したときにした
文書がwebのどこかにありました。
オマエ perl を捨てるんかゴラァッ!! と何人かに言われてまいったと言っていまし
た。
0169デフォルトの名無しさん
NGNGコンピューターが高速化すれば、
問題は可決するといっていた。
コンピュータは格段に高速化したが、
未だにJAVAは糞重いままだ。
0170デフォルトの名無しさん
NGNGJavaはCPUというかハードウェアの違いをVM(バーチャルマシン・仮想機械)
として抽象化して異なるハードウェアにはVMだけ移植すれば
互換性がとれてウマー!
という理屈なんだけど、別に最低ラインがVMだというだけであって、
WINTEL用にはネイティブコードコンパイラがついていたって何もおかしく
ありません(GNU のコンパイラはJavaからネイティブコードにコンパイル
してくれるはず)。とはいってもクラスファイルになったバイトコードだけ
を他のハードウェアにも漏っていって実行したい(アプレットとか)という
欲望があるために、JIT(ジャストインタイムコンパイルだっけ?)
という(Cecil(かな)かsmalltalkのベンダーから勝ったのかな..)
RAMの中でコンパイルして実行というしかけがあって、いまはHotSpotとか
いってるけどまだ遅いのでしょうか?
perl, python, ruby などのスクリプト言語もオセーヨ!と
ネイティブコードコンパイルしていないのがバレると言われがちですが、
じゃあ単純にコンパイルすれば速いのかといわれれば、これらの言語は
動的な型付けをもつために実行時に正しい型かどうかのチェックを
しなければならず、意外に遅いままだったりします。
これは、Perl の B コンパイラだっけ? とか GCL (Cに変換)でやってみれば
実感できます。
あっと、これらの言語では(たぶん)、変数の値はその言語でのオブジェクトに
対するポインタですべてを表します。
そんでアラインメントの関係で一番下(LSB)が自由に使えたりするので
それでfixnumとオブジェクトへのポインタを区別するとか
涙ぐましい努力をします。(ここらへんのテクニックは論文になっていて
NECの論文データべーすで見付かります)
じゃあ、速くするためにはどうしたらいいのかといえば、データの型を
コンパイル時にあらかじめ予測するとか、型の宣言をどうしても必要な
ときだけプログラマーにしてもらうということになります。
そんで Common Lisp にはその型宣言が用意されています。そんだけ。
0171デフォルトの名無しさん
NGNG最初から強い型付き言語でかけばいいじゃん。
0172デフォルトの名無しさん
NGNGアホな疑問なんですが、Lisp と Java が似ているっていうのは具体的にはど
の辺が似ているのでしょうか?
Java の オブジェクト指向(class)と Lisp の closure でしょうか。まだ勉強
中なのでその辺しか思いつかないんですが、似ていると言うからにはその他に
もいくつかあるのでしょうか?
0173ななしさん
NGNG似てるとは思わない。スコープだって…
0174デフォルトの名無しさん
NGNGGCかな?
Lispの真似してるらしいけど。
>コンピュータは格段に高速化したが、
>未だにJAVAは糞重いままだ。
どこが遅いんだろう・・・・
15年前のスパコンで実行してたシミュレーションが
20個程並列に動くんだが。
0175デフォルトの名無しさん
NGNGどこが遅くないんだろう・・・・
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGC++がCにどんどん機能を付け足したのに対して、
Javaは要らない部分を削ってシンプルにしようとした。
CommonLispが古いLispにどんどん機能をつけ足したのに対して
Schemeは要らない部分を削ってシンプルにしようとした。
KISSの精神ってやつ。
0178ななしさん
NGNG0179デフォルトの名無しさん
NGNG#Javaってバージョン上がるたびに見事に肥大化してると思うが。
0180デフォルトの名無しさん
NGNGうん。思う。だから悲すぃ。
でも、初めの頃は凄い志を感じたし、今でも他の言語に比べたらましじゃね?
「シンプルにした」じゃなくて「シンプルにしようとした」って書いたのはそんな気持ちから。
それに対してSchemeも"今はまだ"シンプルさを保ってるけど、
もしJavaと同じくらいのプログラマ人口をかかえるようになれば、
Javaと同じ運命をたどる気がしない?
そう言う意味でやっぱり似てるかなと。
0181デフォルトの名無しさん
NGNGcmuclなみのやつ。
0182デフォルトの名無しさん
NGNGただ、ほとんどの場合、ボトルネックになっている部分だけ
オプティマイズすればいいんで、全部の型を宣言する必要は
ないと思うんだよね。とりあえずぱぱっと書いて動作を確認
して、それからプロファイルを取って、キツイところに
declareを足して行く、というのがCommonLispのスタイル。
>>181
Chezは速いらしいけど。フリーのものならBiglooなんてどうでしょ。
0183デフォルトの名無しさん
NGNG#!/usr/local/bin/???
って書いて実行できるschemeインタプリタって無かったっけ?
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNG普通はできるんじゃ。。?
0186ななしさん
NGNG#!/usr/bin/emacs -batch
とかもいけたかも…?
いや、試したことないけど。
0187デフォルトの名無しさん
NGNGLispではボトルネックを見つけるのが難しい、ってどっかで聞いた
んだけど、本当?
0188デフォルトの名無しさん
NGNGそのスタイル、そっくりそのまま強い型付言語の、type inference
にもあてはまるんだが・・・
強い型付きなのに宣言しなくても良いというのが型推論機構をもつ
MLやHaskellの特徴。
0189デフォルトの名無しさん
NGNG#!/usr/local/bin/gosh
(define (main args)
...
)
0190デフォルトの名無しさん
NGNG> そのスタイル、そっくりそのまま強い型付言語の、type inference
> にもあてはまるんだが・・・
ML, Haskellをいじり倒した経験がないので、いいがかり、かんちがい、
まとはずれになるのを承知でいえば、
これらの言語はいわゆる functional programming というパラダイムを体現して
いると思いますが、referential transparency とか 型 に主眼をおいており、single パラダイムになっていて(それが良さでもあるのでしょうが)、
Common Lisp や C++ 的なだらしなさというか multiple パラダイム
言語の特徴でもある、実際的な力仕事に便利そうなパラダイムをどんどん
足していくという言語とくらべたときに、ワゴン対スポーツカーみたいに比較が
難しいという面はないのでしょうか?
(どっかでSchemeの美しさに萌えていた処理系の実装者が これらの「もっと」
functionalな言語の美しさに惹かれてそちらに移ってしまったという話は聞いた
ことがありますが。)
(I/Oがからむとreferential trasparencyが破綻するのでそれを
どうにかするためにmonadとかいう概念があったりするというのは耳学問で
聞きました。あと referential transparency が保証されていると
簡単に並列化が簡単におこなえるとか。)
0191デフォルトの名無しさん
NGNGへ?
思い込みでしょ?
assertとgenericsくらいだと思うよ。
もしかして、ライブラリーの話をしてるのか?
ライブラリーは時間がたてば増えると思うけど。
念のため言っておくと、servletもejbもフレームワークだからね。
0192デフォルトの名無しさん
NGNG「Javaの方がすっきりしていていいじゃん」
といわれてムッとして、
「あいつらそのうち絶対にtemplate相当の機能が欲しいとかほざきだすからな
(意訳)」
と言っていたのがワロタ。
ちなみに動的な型をもつ言語では、templateという概念そのものが必要ありません。
というかすでに含まれていると言うか。
0193デフォルトの名無しさん
NGNGC++をデザインしたのでしょうか? そこが結構気になります。
たしか simula とかいうOOの元祖で作者がこのまえなんか賞を
もらった言語がヒントになったというのは聞いたことがあります。
0194デフォルトの名無しさん
NGNG「〜関数オブジェクトを嫌い、関数オブジェクトは、C++プログラマになった
Lisp擁護者の少数意見をなだめるためだけに存在すると考えるなら〜」
なんて一節がある。
0195デフォルトの名無しさん
NGNGHPかなとかにいて、AdaのGenericな型みたいなのをやっていた人が
オマエC++で同じことヤッテクレ!ということでやったと思ったんですが。
C++とLispという軸に限定して考えれば、静と動というか、
カオスとオーダーみたくなっているけど、別に目標はそんなに
違わないみたいな気がします。そんでそのゴールに似ているけど
実際はちがう Java がでてきたので、オイオイ と突っ込みを入れたく
なる人もいるのではないでしょうか。
でも別に静と動だけが切口なわけではなくて、なんか別にも
軸があるような気がします。
type inference にあるように、日本的な阿吽の呼吸というか、
いわなくても分かる(ことは言うな)みたいなとか。
Prolog みたいな「何が欲しいのか」を言うとか。
0196デフォルトの名無しさん
NGNGむかし雑誌で読んだんだけど、数学がすごくよくできる人がいて
高校のときは、なんか問題を見ただけで答えがなんだかわからないけど
頭に浮かぶということを言っておられるのを聞いたことがあります。
漏れはやっぱり数学が得意な人はそんな物かと素直になっとくしてしまったん
ですが、これってもし嘘じゃなければちょっと面白いかなとおもいます。
すいませんデムパッてしまいました。
0197デフォルトの名無しさん
NGNGjavaにはまだgenericsって実装されてないよね。
C#は実装するのかな。
個人的にはjavaにgenerisを組み込む必要性は無いと思うけど、
実装するなら、速く使わせて欲しいな。
ところで、みなさん学生だと思うけど
専攻はなんですか?
0198デフォルトの名無しさん
NGNG0199ななしさん
NGNG0200デフォルトの名無しさん
NGNG思われると嫌なので、言いますが。別に就職活動としてこの書き込みを
したわけではありません。
そんで、Common Lisp よりの発言はほとんど俺です。199 さんはすごく
てきせつなアシストをだいたい明け方くらいにしてくれました。
日本の研究者の人たちは 196 みたいなデンパの入った会話を平気でできる
環境にあるのでしょうか。
0201デフォルトの名無しさん
NGNG>したわけではありません。
誰もそんな事思わないと思うけど。
誰が書き込んだかなんて気にしてる粘着はめったにいないだろう・・・
>日本の研究者の人たちは 196 みたいなデンパの入った会話を平気でできる
俺は別にデムパだとは思わないけどね。
それより、間違っててもいいから、自分の意見は言ったほうがいいよ。
聞くは一時の恥じみたいな・・・
それよりも、自分の考えをこっそりと自分の中にしまって
俺は理解されないんだとか、俺が正しいんだとか言ってる奴の方が怖いよ。
0202ななしさん
NGNGをーい、、漏れ、何かアシストしたっけ (^_^;;
0203デフォルトの名無しさん
NGNG> それより、間違っててもいいから、自分の意見は言ったほうがいいよ。
> 聞くは一時の恥じみたいな・・・
いやそうなんだけど、一度、デンパだということにされると
あとが面倒くさいというか。
> 俺は理解されないんだとか、俺が正しいんだとか言ってる奴の方が怖いよ。
それを口にだした人に言ってたら対したもんだと逆に思うけど。
0204デフォルトの名無しさん
NGNG変なのは現実じゃひたすら無視されるだけ。理由がどうであれ、
注目されるってのは大変なこと。その意味で電波だろうが、
なんだろうが自己主張すべし(w
0205デフォルトの名無しさん
NGNGおお、わるい。悪い意味でデンパッテしまった。
0206デフォルトの名無しさん
NGNG知らされる)みたいなことで恥ずかしいとか悔しいことを経験しすぎて
「じゃもう言わない」みたいなのない?
0207デフォルトの名無しさん
NGNG作って、みんなに見せると、それからだな。
0208デフォルトの名無しさん
NGNGそういう経験はした事ないけど、
それって挫折みたいなもんだから、
そういうのを乗り越えて自分の意見をどんどん言わなきゃダメだと思うよ。
0209デフォルトの名無しさん
NGNG> それって挫折みたいなもんだから、
> そういうのを乗り越えて自分の意見をどんどん言わなきゃダメだと思うよ。
いや馬鹿にされるだけならいいというか、そこで議論が止まっちゃうんだよね。
流行りの言葉(?)でいえばブレインストーミングができないってかんじかな。
「そんなアフォな話ができるか!!」みたいな。
0210デフォルトの名無しさん
NGNGLispでプロトタイピングをするというのもいいものではないでしょうか。
0211デフォルトの名無しさん
NGNG> それより、間違っててもいいから、自分の意見は言ったほうがいいよ。
> 聞くは一時の恥じみたいな・・・
> それよりも、自分の考えをこっそりと自分の中にしまって
> 俺は理解されないんだとか、俺が正しいんだとか言ってる奴の方が怖いよ。
いや、間違う、間違わないという判断は時の流れで変わってしまうので、
たまたま何かそういう考えかたが「おもしろそう」と頭に浮かんでも、
それをみんなに言うか言わないかというか。
「これを今、言ったらやばいだろう」というような(学問的な)考え(やアイデア)が
あたまに浮かぶことはありませんか?
0212デフォルトの名無しさん
NGNG>あたまに浮かぶことはありませんか?
言い方を工夫すればいいんじゃない?
上のLISPは流行ってないけど・・・なぜ?
見たいな質問の仕方なら別にいいと思うけど、
LISPってクソだから廃れたね。
って言い方したら、たくさん釣れちゃうわけだから。
0213デフォルトの名無しさん
NGNGいやぁ、そうなんだよね。でもたいていそういうときって(自分がおもしろそうな
考えを見つけたと興奮しているから)うわごと見たいなことを口走って
(ウワッ!! こいつアブネッ!)ってことになりがちなんだよね。
0214デフォルトの名無しさん
NGNGがまたホットなわだいになっているけど、
たぶんいまは、generational なガベージコレクションがたぶん性能的に
いちばんいいということになっているとおもうけど(JITやHotSpot関連で何かあるか
な)、これを考えかたとして「ガベージコレクションは何もしないのが一番楽だ!」、
みたいに考えたらどうだろう。 いやそれを実現する方法は知らないけど、
IBMのAS400かなみたいなワークステーションはユニバーサルアドレスというか
なんかオブジェクトは一生同じアドレス見たいな考え方があると聞きました。
このとき「ガベージコレクションなんかシネーヨ!!!(もしくはいらないんじゃない?)」と
叫んだらかなり問題あるだろう。
0215デフォルトの名無しさん
NGNGプログラムによるんじゃない?
WEBサーバーとかは無理だよね。
0216デフォルトの名無しさん
NGNGのだと書いているんですが、それが広まらないのは何でですか?
研究には向いているけどビジネスには向いていないとか?それとも単純に書け
る人が少なすぎとかですか?
0217_
NGNGその上でアプリケーションがかける。
lispなんてどこの馬の骨が作ったのか分からないVM上で応用ソフトなんて
誰もつくらない。しかもなんか無駄に色々種類があるね?どーでもいいけど。
結論「覚えても実用的でなさそう」
0218_
NGNG普通の人は言語は手段なのにlisperは言語が目的。
存在自体が再帰してしまっている。
だいたいlisperって自分でlisp作ってる人がほとんどでしょ?
0219デフォルトの名無しさん
NGNG個々の関数型言語が広まってないから、それを支える手法である
ところのfunctional programmingが一般的に認識されてない、
つうのが実際のところだと思う。個々の関数型言語が広まってない
理由は'?だが、Graham氏の見解なら記事で読めるぞ。
www.paulgraham.com/paulgraham/popular.html
www.shiro.dreamhost.com/scheme/trans/being-popular-j.html (日本語訳)
個人的には、参照透過・副作用のないプログラム・正規順序の評価
辺りをあんまりギャーギャー言われると「うっせえなあ」と感じて
しまって、ピュアな奴には手を出したくなかったりする。
0220デフォルトの名無しさん
NGNGHLISP
0221デフォルトの名無しさん
NGNG誉められたのかと思った。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGSTL, Modern C++ Desgin, Boostなんかは、
Functional ProgrammingやFP(by Backus)の影響が大きい。
0225デフォルトの名無しさん
NGNG>>>217 かりに、その巨大メーカーが潰れてしまったら、Javaって生き残れるの?
tomcatなんかを作ってる人達の好みにマッチしてるからね。
俺もアルゴリズムを実装するならJavaだし。
あとは、ソフトウェア工学でもJava一色といった感じ。
まあ、C#が発展してきたらどうなるかはわからない事は確か。
俺はC#のoverrideとかをいちいち書くのが嫌だな。
0226ななしさん
NGNGんー、関数言語?
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGなんだか、狭い世界でプログラミングしてるんですね。
って Lisper に言われたくないか。
0229デフォルトの名無しさん
NGNG英語だけど、関数型言語はこ〜んなにオモロ!
という短くてよくできたアジビラみたいなのがwebのどっかにあります。
googleでさがせると思う。
0231デフォルトの名無しさん
NGNGビラ:ひら「片」の口語強調型
0232デフォルトの名無しさん
NGNG【agitation】
(1)そそのかすこと。扇動。
(2)社会運動で,演説などによって大衆の感情や情緒にうったえ,大衆の無定形な不満を行動に組織すること。アジ。
0233デフォルトの名無しさん
NGNG宣伝広告のために、人に配ったり、はり出したりする紙片。ちらし。
「宣伝―」「―をまく」
〔「ひら(片・枚)」の転、擬態語「びらびら」から、などの説がある。近世、演芸の宣伝に用いたのが初めという。大正期に英語 bill の影響で外来語意識が生まれた。現在は多く「ビラ」と書く〕
0234ななしさん
NGNGじゃみつからないのかな?
0236ななしさん
NGNGえーっと、漏れは Emacs Lisp しか使ったこと無いんですよ…スマソ
#そんな漏れでもこのスレにいていいですか?
0237ななしさん
NGNGStarting lisp ...
CMU Common Lisp release x86-linux 3.0.8 18c+ 31 December 2001 build 3030, running on tsubasa
For support see http://www.cons.org/cmucl/support.html Send bug reports to the debian BTS.
or to [email protected]
type (help) for help, (quit) to exit, and (demo) to see the demos
Loaded subsystems:
Python 1.0, target Intel x86
CLOS based on PCL version: September 16 92 PCL (f)
こんなのが表示されるんですが… これって、 CMUCL ってやつ?
てか、いまビビってます。
これの使い方知ってる人情報キボン。
とりあえず /usr/share/doc/ の下を grep / zgrep してみます。
Debian GNU/Linux 3.0 (woody) です。
0239ななしさん
NGNGStarting /usr/bin/guile ...
ILISP V5.11.1 Use M-x ilisp-bug for problems and suggestions.
* guile>
guile>
って表示されてる……
0240デフォルトの名無しさん
NGNGGJ…(ぼそ
今のjavacも中はGJだし。
genericsはデフォルトでdisableされてるかもしれんが。
0241デフォルトの名無しさん
NGNGDebian$ apt-cache search cmucl
Debian$ dpkg -L cmucl
0242デフォルトの名無しさん
NGNGある大学教授のかたが現在のコンピュータサイエンスは、
「志さえあれば、すべてを知ることができる学問だ」
とおっしゃられていたのですが、みなさんどう思います?
スレ違いでゴメン。
0243デフォルトの名無しさん
NGNGなんつーか、ハードウェアとかCPUに関して
根本的にもっといい仕組みが見付かってしまうと、
(よく知らないけど、量子コンピュータとか、、)
その知識の多くが無駄になってしまう可能性があると。
それでも知らずにおれないというか、、、。
0244デフォルトの名無しさん
NGNG異常に高速だったのが、3DゲームのDoomをプログラミングして
その後マイクロソフトですこし仕事してまたIdソフトウェアに
戻ってきた人が言っていたのですが、現在のINTELのCPUでは
じつは浮動小数点のほうがすごく速いということを本に書いています。
0245ななしさん
NGNG0246デフォルトの名無しさん
NGNGいやそれってちょっと面白いね。
0247デフォルトの名無しさん
NGNGお勧めのLISPはどの奴?
0248デフォルトの名無しさん
NGNGOO実行が出来ない
整数へのキャストが高負荷
なので、トータルで劣る場合も多い。
それから、除算に関してはFPUで行った方がたいていの場合
オーバーヘッドを考慮しても高速
0249デフォルトの名無しさん
NGNG一番実用になると言う意味ならemacs lisp
0250ななしさん
NGNG>247 OS は何? Windows なら Allegro CL とかいいかもしれない。
でも Linux とか UNIX 系の OS なら結局は Emacs でコードを書くことに
なるわけで、結局まずは emacs lisp をいじってみるのがいいんだな。
Windows でも Meadow で emacs lisp をいじることをお勧め(個人的な意見だけどね)
0251デフォルトの名無しさん
NGNG中国語、韓国語など、、)が入ったテキストを処理するプログラミング環境と
して現在、Emacsを凌駕する環境はちょっと見付からないのではないでしょ
うか。なぜかみんなエディタが言語に密接にくっついているというだけで、
表現が難しいけど「へたれ」な言語だと思っちゃう人が多いと私は思います。
0252ななしさん
NGNGhttp://www.franz.com/products/
Meadow
http://meadow-faq.sourceforge.net/
Emacs Lisp 関連文書
http://www.gnu.org/manual/emacs-lisp-intro/emacs-lisp-intro.html
http://www.gnu.org/manual/elisp-manual-20-2.5/elisp.html (emacs20用)
http://www.gnu.org/manual/elisp-manual-21-2.8/elisp.html (emacs21用)
http://www.gnu.org/manual/emacs-20.7/emacs.html (emacs20用)
http://www.gnu.org/manual/emacs-21.2/emacs.html (emacs21用)
0253デフォルトの名無しさん
NGNG> 浮動小数点演算はプロセッササポートがないと並列化が出来ない
> OO実行が出来ない
このOOってアウトオブオーダーだっけ?
> 整数へのキャストが高負荷
> なので、トータルで劣る場合も多い。
う〜ん、わからん。
> それから、除算に関してはFPUで行った方がたいていの場合
> オーバーヘッドを考慮しても高速
いやこれは面白いね。
0254デフォルトの名無しさん
NGNGなんていうか、我々いわゆる(アメリカの手下としての)西側の国にとっての
最後の外国というか、異文化というか。
0255254
NGNGやってみろって昔、ちょっと冴えてる友だちに勧められたんだよね。
ついでに「ななしさん」ってなんかその人とは別だけど友だちがどこかで
使っていたハンドルネームだったような。。
(ってみんなこの発言は全部無視してくれ。)
0257デフォルトの名無しさん
NGNGなんとなく頭に浮かんだことを酔っ払った頭でうわごとみたいに
言ってみただけだ。スマソ。
0258257
NGNG自分はその話と話の脈略がなんとなくあると思って、(連続した話題)
として話すんだけど、他の人は ポカーン? みたいな。そういうのないか、みんな?
0259デフォルトの名無しさん
NGNG0260ななしさん
NGNGところでさ、なんかちょっと前に「Lisp はじめる〜」とか言う人がいた気がするんだけどさ、
http://www.glug.org/people/ttn/software/elisp-tutorial/
とかどうよ?だって、GNU の正式なチュートリアルはながいからね。
http://www.gnu.org/manual/emacs-lisp-intro/emacs-lisp-intro.html
とりあえず
http://www.glug.org/people/ttn/software/elisp-tutorial/elisp-tutorial.tar.gz
を展開して、でてくる lesson01.el を Emacs で開いて指示に従って逝けば、
なんか lisp がわかったようなわからないようなきがしてくるとおもうんだけど。
0261ななしさん
NGNGとか言ってみるテスト。
0262ななしさん
NGNGEmacs Lisp
http://pc.2ch.net/test/read.cgi/tech/1004551074/l50
#なんで朝から 2ch にいるんだろ…
0263デフォルトの名無しさん
NGNGも整った「金になる」言語ですよ。
0264ななしさん
NGNGEmacs総合スレ
http://pc.2ch.net/test/read.cgi/linux/1021865124/l50
と誘導してみるテスト。
このスレの住人ってやさしいからさ、誰もいわないみたいなんで。
0265デフォルトの名無しさん
NGNGSICPもいいけど,実用的なプログラムを書くときのknow howとかが少なくて
最初はtoy programしか作れなかったよ.
入出力書きづらい.
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNGstring portの方が何かと便利じゃない? srfiにもなってるし。
regexp関連のインターフェースもsrfiになってほしい…
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGSRFIって手続きやマクロで実現できるものなの?
それとも処理系に手を加えないとダメなものもある?
foldとかはただの手続き群,単一型ベクタは処理系に手を加えなければならない,
といった感じがするのだけど.
0270267
NGNGsrfiによる。マクロ一つで出来るものもあれば、処理系をいじる必要の
あるものもあり。各srfiのreference implementationの項に注が書いてある。
そのへんの区別も含めて、あんまり厳密なこと言いっこ無しよ、みたいな
ノリなんじゃないかなあ。srfiは。
0271デフォルトの名無しさん
NGNGでもバージョンが古い。0.4.6 って。。。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG括弧に注目してはいけない。Lisp プログラムは字下げで読むのです。
括弧が無いという点では、Python もなかなか良い言語だと思います。
というか、しっかり関数分割された Lisp プログラムは括弧はそれほど
ネストしませんよ。
0274ななしさん
NGNGドキュメントとかちゃんとまだ書いてなくって未公開。
メンテナさんには 「upstream バージョンあがってまふよ〜 」 って言ってあるんだけど…
0275デフォルトの名無しさん
NGNG>ネストしませんよ。
カッコの合計数が増えるという罠
0277デフォルトの名無しさん
NGNG一番外側の括弧が余分なだけじゃないの?
0278273
NGNGそれは non-nil かも。他の言語でも、多かれ少なかれ、頭の中で入れ子構造を
展開してるんでしょう。Lisp の場合はそれが形となって表われているだけ
だと思う。
0279デフォルトの名無しさん
NGNGそんなあなたに Dylan をすすめる。
http://www.cs.indiana.edu/hyplan/jsobel/forschemers.html
0280デフォルトの名無しさん
NGNG一番外側じゃなくて一番外側(プログラム自体)と二番目(一文一文)だと思う。
この二番目が曲者。これが大量にあるおかげで括弧が大幅に増えてる。
0281デフォルトの名無しさん
NGNGDylanは処理系が糞すぎるのが欠点。コンパイル時間がかかりすぎ。
しかもHelloWorldが数メガって・・・
0282デフォルトの名無しさん
NGNG商用のベンダーが存在して、そのエディターはコンパイルしたあとに
どれだけ最適化が行われたか色分けしてくれるらしいよ。
Webのどっかに紹介記事があったと思ったけど。
0283峯島雄治
NGNG峯島雄治と申します。どうももしわけありませんでした。
0284283
NGNG33歳ヒッキーです。
0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNGもし251, 257さんであれば早目に病院に行かれた方がよいかと思います…。
0287ななしさん@お腹いっぱい
NGNGC コンパイラでも後置再帰を使うことは有効なのでしょうか?
つまり後置再帰であることを認識してスタックを無駄に消費しないコードをはいてくれる
C コンパイラというのもあるのでしょうか?
0288ななしさん@お腹いっぱい
NGNG勝手に訳語作ってた YO 。逝ってきます。
0289デフォルトの名無しさん
NGNGが最適化オプション次第で挙動が大きく変わるようなコードは推奨されんだろうな。
とりあえず知ってる限りでgccとかVC++あたりは。
0290デフォルトの名無しさん
NGNG0291ななしさん@お腹いっぱい
NGNG0292273
NGNG早くて綺麗だったりする。個人での使用なら速度も十分だし。
0293デフォルトの名無しさん
NGNG漏れはまだ本に載ってるような勉強用のコードしか書いたことないんですが、
例えばどんなものを書くときに scheme は便利ですか?
0295sage
NGNG>Scheme で自分で書いた方が早くて綺麗
実はそれって、言語のポピュラリティという面では
不利なんじゃないかと思う次第。
熟練者は簡単に欲しい関数が書ける
→誰も共通ライブラリみたいなのを作ろうとしない、
あるいはマイライブラリで満足
→初心者はライブラリの少なさにガクゼン。
自分でいちいち書かなくちゃならないのがめんどくさくて挫折。
まあ、srfiなのかな。進むべき方向としては。
0297デフォルトの名無しさん
NGNGこれ以上複雑化していったら、気軽に作れる物じゃなくなって
実装者が減ってしまう。
0298デフォルトの名無しさん
NGNG1行目をもう少し具体的にお願いしまつ。
0299273
NGNG扱うデータ構造がネストしているような場合、例えば non-destructive に
再帰的に reverse したいような場合、C だとメモリ確保/解放が面倒です。
Perl でも出来るんですが、ランタイムエラーにならずに処理を進めて
くれちゃったりするので困る事があります。
あとは REPL (read-eval-print loop) の存在が大きいかな。素早く定義
して、素早く動作確認できるのが魅力的。コンパイルする必要もないし。
C, Perl, Scheme を日常的に使いわけているので、「これは Scheme しか
できない!!」ってのを挙げられなくて申しわけないけど。
0300デフォルトの名無しさん
NGNGREAL を一瞬パールと読んでしまった。。
>C, Perl, Scheme を日常的に使いわけているので
括弧いいですね。私はまだどれも初心者用の本に載っているようなプログラム
しか書けませんが。どの言語も好きですけどね。もっと修行してきます。
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG>再帰的に reverse したいような場合、
これってどういう意味?
破壊しないで、再起的に、・・・reverseってどういう意味?
0303デフォルトの名無しさん
NGNGつーかおれはこの意味もわからんのだが。
>Perl でも出来るんですが、ランタイムエラーにならずに処理を進めて
>くれちゃったりするので困る
0304273
NGNG(define s (1 (2 3 4) 5 (6 7)))
(rev s) => ((7 6) 5 (4 3 2) 1)
s => (1 (2 3 4) 5 (6 7))
みたいな感じ。良い例ではありませんが。
>>303
他の言語ならエラーが発生してプログラムの実行が停止するような処理
でも、Perl の場合は勝手に決めて処理を進めてしまう事がありますよね。
具体的にどんな状況かって言われると説明しづらいんですが、Perl の
曖昧さ故にデバッグしづらい場面ってのは結構あると思います。
それらを含めて、将来メンテナスするであろうコードに Perl を使うのは
先々不安って言ったんですよ。
0305303
NGNGコードにするとこんな感じ?
(define (rev s)
(if (pair? s)
(let loop ((x s)(r '()))
(if (pair? x)
(loop (cdr x)(cons (rev (car x)) r))
r))
s))
0306303
NGNGscm rev(scm s) {
if (pairp(s)) {
scm x = s;
scm r = nil;
loop:
if (pairp(x)) {
scm tmpx = cdr(x);
r = cons(rev(car(x)),r);
x = tmpx;
goto loop;
} else {
return r;
}
} else {
return s;
}
}
0307273
NGNG(define (rev tree)
(reverse
(map (lambda (s)
(if (list? s) (rev s) s))
tree)))
0308デフォルトの名無しさん
NGNGその「扱うデータ構造」ってのは大抵ファイルとかから取りこむんだよな?
そーするとパーサ書くのが大変な気がするんだが、どうなん?
最初からリストで書かれていればともかく、普通そんなこと無いだろうし、、
0309303
NGNG同じでしょう。
まあ、mapしたものをreverseするのは無駄だから
専用化したものをはさむとか。
この辺はトランスレータとかが勝手に最適化して欲しい気はするけど。
(define (map-reverse proc l)
(let loop ((x l)(r '()))
(if (pair? x)
(loop (cdr x) (cons (proc (car x)) r))
r)))
(define (rev s)
(map-reverse
(lambda(x)(if(pair? x)(rev x)x))s))
0310303
NGNGパーサというか、トークン化できればどうにでもなると思うよ。
0312273
NGNG0313デフォルトの名無しさん
NGNGOOで、再帰を意識するなら
public List::reverse(){
List list=new List();
reverse(this.size,list);
return list;(付け替えしてもいいし)
}
private List::reverse(int i,List list){
if(entry[i] is List)entry[i].reverse()
list.add(entry[i])
reverse(i-1,list);
}
だよね?
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG(if (list? s)
(reverse (map rev s))
s))
0316315
NGNG(if (list? s)
(map! rev (reverse s))
s))
reverse! はどう書くの?
0317273
NGNG0318315
NGNG(define (map! f s)
(do ((t s (cdr t)))
((null? t) s)
(set-car! t (f (car t)))))
で置き換えて。
0319srfier
NGNGmap!はsrfi-1にあるよ。
同じくsrfi-1の、foldを使ってmutation無し、reverse無しバージョン
(define (rev s)
(if (list? s)
(fold (lambda (e p) (cons (rev e) p)) '() s)
s))
0320デフォルトの名無しさん
NGNG>実装上じつは、ループで済んでしまうのでしたぁ!!!!!
Loopとrecueseは、末尾呼びだしのgoto(?)への置き換えという「簡単な」最適化をするだけで
理屈だけじゃなく実装上も等価になるからこそ、Lisperは堂々とrecurseしまくれる。
難しい最適化でもなんでもなく、単純な置換で済む。コストは極めて低い。
詳しいことは、Shiroさんとこの、「なんでも再帰」と「Schemeの実装におけるスタックフレーム」を。
あと、C(の標準的な姿)では末尾再帰の最適化はしにくいかもね。
ただ、一方で、
>>55
>recursion ならスッキリ書けるものをわざわざ汚いループ構文や制御変数を使って
という意見も片手落ち。
rubyみたいに内部ireraterが有れば、十分綺麗だし、
関数に、その関数が終ったら次に続けるべき「なにか」を
渡さなくてもいいので、かえってすっきり。
0321デフォルトの名無しさん
NGNG> 関数に、その関数が終ったら次に続けるべき「なにか」を
> 渡さなくてもいいので、かえってすっきり。
これどういう事?
0322デフォルトの名無しさん
NGNGcomp.lang.scheme に流れたアナウンスには
The documentation includes the on-line book:
Dorai Sitaram. "Teach Youself Scheme in Fixnum Days". 2000-2002.
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
とあるけど、fixnum days っていわれたって、あなた……。
0323デフォルトの名無しさん
NGNGそんなのは
list.add(entry[i].clone())
とするだけだろうが。
0324デフォルトの名無しさん
NGNGってありますか?教えてください。
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNGなるかも。後者が綺麗なので前者を学習する気がなくなるという副作用付き。
0327デフォルトの名無しさん
NGNGどの辺が汚いのかな?
当方schemeオンリー
0329デフォルトの名無しさん
NGNG> あと、C(の標準的な姿)では末尾再帰の最適化はしにくいかもね。
意味がわからん。
容易に、最適化がやりにくいスタイルで書ける、と言うくらいの意味?
0330gauche 派
NGNG0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNGGuile。何でもあり風なところが
0333ななしさん@お腹いっぱい
NGNG0334デフォルトの名無しさん
NGNGGaucheがいいです。2バイト文字対応やsrfiに順次対応している
など、scheme本流を意識している点が◎。日本人の作者である点
もいいですよん。
http://www.shiro.dreamhost.com/scheme/index-j.html
0335デフォルトの名無しさん
NGNG見当たらなかったのでやめた。
0337デフォルトの名無しさん
NGNGた。無謀かなぁ? SICP は 4章の後半まで読んで stream って何だっけ?って
なってまた始めから読んでます(汗
0338ななしさん@お腹いっぱい
NGNGGauche 0.5.7 あげ。
0339デフォルトの名無しさん
NGNG(let loop ((n 0))
(cond ((= n 0) (display scheme) (newline))
((= n 1) (display "キタ"))
((even? n) (display "━━"))
((= n 3) (display '(゚∀゚)))
((= n 5) (display '(∀゚ )))
((= n 7) (display '(゚ )))
((= n 9) (display '( )))
((= n 11) (display '( ゚)))
((= n 13) (display '( ゚∀)))
((= n 15) (display '(゚∀゚)))
((= n 17) (display "!!!!!")))
(if (< n 17) (loop (+ n 1)) (newline))))
(come! 'Gauche)
0340デフォルトの名無しさん
NGNG(display scheme) (newline)
(for-each (lambda (x) (display x) (display "━━"))
'(キタ (゚∀゚) (∀゚ ) (゚ ) ( ) ( ゚) ( ゚∀) (゚∀゚)))
(display "!!!!!") (newline))
0341326
NGNG0342デフォルトの名無しさん
NGNG動くやつ書いてちょ
0344デフォルトの名無しさん
NGNGあ、そういうことじゃなくて、顔が右向きのから左向きのに変わっていく、み
たいなのがあったら面白いかなぁと。
で、自分でやってみようかと思ったけど一回書いた文字を消すのって無理かも
しれないですね。
0345デフォルトの名無しさん
NGNG(define (come! scheme)
(for-each (lambda (x) (cls) (display scheme) (newline)
(display "キタ━━") (display x) (display "━━!!!!!") (newline) (wait 10))
'((゚λ゚) (λ゚ ) (゚ ) ( ) ( ゚) ( ゚λ) (゚λ゚))))
こんな感じか?
clsとwaitは誰か定義して。
0346343
NGNGあ、そういうことか。
ポータブルに書くのは難しいけど、gaucheならこんな感じでどう?
sys-selectはタイミング調整ね。
(define (come!)
(for-each (lambda (x) (display x) (display "\r") (flush) (sys-select #f #f #f 200000))
'((゚∀゚_) (∀゚ ) (゚ ) ( _ ) ( ゚) ( ゚∀) (_゚∀゚)))
(come!)
0347デフォルトの名無しさん
NGNGおーすごい!
でも krxvt だと俺のフォント設定(東雲)が悪いせいで目が表示されない(汗
gnome-terminal でちゃんと見れました。
;; 3行目の最後に閉じ括弧 1つ足りないですよね?
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNGopen/close を自動化させたい時に便利。call-with-* シリーズを書く場合
なんかにどうぞ。でも、よーく R5RS を読んでみると call-with-* には
向かないのかも知れないけど。
0351デフォルトの名無しさん
NGNGなにやってんだおまいら!
0352デフォルトの名無しさん
NGNGこれって thunk のとこの
>(call-with-current-continuation escape)
って scheme 的にはありなの? gauche では
>(escape)
にしないとエラーになったけど。
0353デフォルトの名無しさん
NGNGescapeは0個以上の可変長引数を取る手続きのはずだから、
call-with-current-continuationに渡しても問題ないはず。
gaucheのバグじゃない?
0354デフォルトの名無しさん
NGNGcall-with-* 系は、dynamic-windでcloseするようにしてしまうと
コルーチン系の動作が書けなくなる (一度call-with-*の中で別の
コンテキストにスイッチしたらファイルが閉じられて、コンテキストの
再開ができなくなる)。
dynamic-windはもっと基本的な要素を実装するのに使ったほうが良い。
ダイナミックスコープを持つ変数とか、エラーハンドラとか。例えば
(define (error arg)
(display "unhandled error: ") (display arg) (newline)(quit 1))
(define (with-error-handler handler thunk)
(call/cc
(lambda (cont)
(let ((oerror error))
(dynamic-wind
(lambda () (set! error (lambda (arg) (cont (handler arg)))))
thunk
(lambda () (set! error oerror)))))))
こうすると、thunkの中で(error なんとか)とすると常にhandlerが呼ばれる。
0355デフォルトの名無しさん
NGNG>学習しましたカラ。Common Lisp は現在進行形。
学習するって何を?
文法だけなら、3日あれば十分なような・・・
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGそれはない。セルとリストの概念だけで数十分はかかる。
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGどうせ文法知ってるだけのくせに。
0360デフォルトの名無しさん
NGNGセルとリストの概念は、文法じゃないんじゃない?
0361デフォルトの名無しさん
NGNG0362デフォルトの名無しさん
NGNGなんでwith-error-handlerの中でcall/ccつかっているの?
0363デフォルトの名無しさん
NGNGファイルオープンや例外とかの継続巻き戻しスタックは、複数欲しい気がする。
例えばエラーかなんかでトップに戻ったときは全部ファイル閉じてて欲しいし、
自分で明示的に継続切り替えたらそのまま状態を保持するとか。
この辺のプロトコルをSRFIで作ってくれないかなあ。
0364デフォルトの名無しさん
NGNGそれ以外に何が・・・・痛い
0365336
NGNG0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG0368129
NGNGDanke.
ついでに。
Debianで「ledit」というパッケージになっているツールを使えば、
対応していないソフトでも括弧の対応を取ってくれるようになります。
ただし、行を超えては駄目。
0369デフォルトの名無しさん
NGNG人から教えてもらったりして理解した罠。
0370デフォルトの名無しさん
NGNG0371ななしさん@お腹いっぱい
NGNG漏れ的には弁証法的スパイラルを昇っていく過程だと思う。
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNGhttp://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
0375デフォルトの名無しさん
NGNG関数の場合は
(演算子 被演算子...)
で説明は済むが、
構文はlambdaやletとか特殊な括弧の使い方するやつが多い。
((lambda args ...) values)
とか。関数シンボルの代わりに関数定義をそのまま書けたりするってのは、
非常に直感的だとは思うけどね。
0376354
NGNG>なんでwith-error-handlerの中でcall/ccつかっているの?
thunk中でエラーが起きたら、handlerを呼び出した後
with-error-handlerから返るためだけど。何か変?
0377デフォルトの名無しさん
NGNGかっこいい高階関数の例を教えてもらえませんか?
例えばこんなの。
(define (for-each-tree f g n tree)
;; depth-first
(cond ((null? tree) n)
((not (list? tree)) (f tree))
(else
(g (for-each-tree f g n (car tree))
(for-each-tree f g n (cdr tree))))))
(define (flat tree)
(for-each-tree list append () tree))
(define (sum tree)
(for-each-tree + + 0 tree))
(define (map-tree f tree)
(for-each-tree f cons () tree))
(define tree '(1 (2 3) (4 (5 6) 7 ((8)) 9 10)))
> (flat tree)
(1 2 3 4 5 6 7 8 9 10)
> (sum tree)
55
> (map-tree - tree)
(-1 (-2 -3) (-4 (-5 -6) -7 ((-8)) -9 -10))
0378デフォルトの名無しさん
NGNGちょっと前にcomp.lang.schemeに投稿されてたsequenceのコードがおもしろかったよ
http://groups.google.com/groups?dq=&hl=ja&lr=&ie=UTF-8&threadm=45e6545c.0206181018.ddb2991%40posting.google.com&prev=/groups%3Fdq%3D%26num%3D25%26hl%3Dja%26lr%3D%26ie%3DUTF-8%26group%3Dcomp.lang.scheme%26start%3D50
0380デフォルトの名無しさん
NGNGそのflatはエレガントだねえ。
ちょっと感動した。
0381デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG(if (list? tree) (apply append (map flat tree))
(list tree)))
(define (sum tree)
(if (list? tree) (apply + (map sum tree))
tree))
(define (map-tree f tree)
(if (list? tree) (map (lambda (tree) (map-tree f tree)) tree)
(f tree)))
apply はちょっと邪道かな。でも便利だし
0384デフォルトの名無しさん
NGNG「無」を書きこむことでファイルを消す、みたいなことはできるのでしょうか?
それともR5RSの範囲ではどうやっても無理なんですか?R5RS+SRFIならできる
とか?
0385デフォルトの名無しさん
NGNG0386無名λ式
NGNG関数型言語だけど、
`Monads for functional programming'
http://www.research.avayalabs.com/user/wadler/papers/marktoberdorf/marktoberdorf.ps.gz
のparserは面白い。
0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%c2%bf%c3%cd
0389デフォルトの名無しさん
NGNGassocなんて、多値だったら嬉しくねぇ?
(成功or不成功, 見つかった値)
Cのfopen(3)なんかだと、pointerの0が「不成功」の役割を担ってるよねぇ。
無理やり二つの型を圧縮してるから、0の意味が分かりにくくなっているわけだ。
ただ、assocを多値にするとsetfはいやーんなままだねぇ。
0390デフォルトの名無しさん
NGNGさんくす。参考にしま・・・。
0391デフォルトの名無しさん
NGNGやっぱり、 list でも大して変わらない気がする…
>>388 の、関数の戻り値を直接他の関数に渡す、って云う使い方は魅力だけど…
普通の list でそう云う事をしたい気がするな…
Lisp だし。
0392682
NGNGいっぺんに評価するにはどうすればよいでしょうか?
0393初心者λ
NGNG(begin
(define x 1)
(define x 2)) )
(set-xy)
を評価しても
x ; Unbound variable : x
y ; Unboune variable : y
となってしまいます.
どこがいけないんでしょうか
0394初心者λ
NGNG(define (set-xy)
(begin
(define x 1)
(define y 2)) )
の間違えでした
0395デフォルトの名無しさん
NGNGset-xyの中で define した x と y は set-xy の中だけだから。
0396デフォルトの名無しさん
NGNGset-xyの内部のdefineはinternal defineと解釈されます。つまり
(define (set-xy) (letrec ((x 1)(y 2)) ))
と同じ。xやyはローカル変数になると考えると良いでしょう。
トップレベルのxやyを変えたい場合はマクロを使って
(define-syntax set-xy
(syntax-rules ()
((_) (begin (define x 1) (define y 2)))))
とするか、define-valuesのような拡張 (MIT Schemeにあるかどうか
知らんけど)を使うしかないでしょう。
(define-values (x y) (values 1 2))
0397デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGた瞬間に次のページを表示させるためにはどうしたらいいですか?
read-char は enter が入力されるまで待っているので少し希望と違うんです
が。
0400デフォルトの名無しさん
NGNG言語の選択を誤っているような。
0401デフォルトの名無しさん
NGNGC じゃないと無理ですかね?勉強用にはとりあえず Unix コマンドもどきを作
るのが定番かなと思ったので。「もどき」なのである程度のもので我慢するこ
とにします。
0402377
NGNG元ネタは
http://www.sampou.org/haskell/article/whyfp.html
の3章の redtree という関数です。
>>383
こんなんでどうでしょうか?
(define (for-each-tree f g tree)
(if (list? tree) (apply g (map (lambda (tree) (for-each-tree f g tree)) tree))
(f tree)))
(define (flat tree)
(for-each-tree list append tree))
(define (sum tree)
(for-each-tree + + tree))
(define (map-tree f tree)
(for-each-tree f list tree))
0403デフォルトの名無しさん
NGNGenterを待っているのはread-charではなく、システムの端末ドライバでしょう。
gauche.termiosモジュールに端末コントロールの関数がひととおり揃って
いるので、lessの間だけ入力をraw modeに切替えてみては。
エラー時に端末のモードを戻すのを忘れずに。
ちなみにtermiosへのインターフェースを持っているSchemeはけっこう
多いますよ。
>>400
言語の問題じゃなくてライブラリの問題ですな。わかります?
0405399
NGNGありがとうございます。man termios とか google とかで調べて何とかできそ
うなところまできました。
gauche の termios のところにある、入力を echo しないで受け取るプログラ
ムをいじくって、dynamic-wind の before 部分を以下のようにしました。
(dynamic-wind
(lambda ()
(slot-set! attr 'lflag (logand lflag (logand (lognot ICANON) (lognot ECHO))))
(sys-tcsetattr port TCSANOW attr))
0406デフォルトの名無しさん
NGNG君、言語とライブラリーの仕様の区別ついてないだけじゃなくて、
さらに実装も混同してるんだね…Jesus!
0408デフォルトの名無しさん
NGNGunixだとどうなるのかな。
ってもう解決した感じだね。
0409399
NGNGUnix(Linux) の場合は端末ドライバのモードを変えてやればいいようです。C
FAQ の 19章にそのまんま載っていて、gauche でもほぼ同じ方法を使えました。
試していないけど cygwin 使えばそのままできそうですね。
でも標準入力を less もどきに渡すとエラーになるんですよね。読み込むデー
タも標準入力、キーボードからの入力も標準入力なのでだめなんでしょうね。
難しいなぁ。
0410デフォルトの名無しさん
NGNGstdinを使わずに/dev/ttyを開いてみれば?
0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG(・∀・)スゴク イイ!
0416デフォルトの名無しさん
NGNGttp://www.shiro.dreamhost.com/scheme/index-j.html
Paul Graham (Lisp)
技術野郎の復讐 -- Revenge of the Nerds
「全ての言語(Java,Perl,Python, ..)は 1958年に作られた Lisp に今ごろ追いついてきている」
Paul Prescod (Python)
Python と Lisp の関係について
「Python は Lisp じゃねーぞ(゚Д゚)ゴルァ」
0417デフォルトの名無しさん
NGNGPythonてLisperにもなじみやすくて(・∀・)イイ!
AIMAの例書き直しちゃったよ。
0418デフォルトの名無しさん
NGNGやっぱ成功したせい?
0419デフォルトの名無しさん
NGNG何を成功させたんですか?
0420デフォルトの名無しさん
NGNG商売。
http://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
を参照。
0421デフォルトの名無しさん
NGNGあの本は高校の図書室にあった。読まなかったけど。
0422名無しさん@Vim%Chalice
NGNGttp://www.laplata.ne.jp/javalisp/
0423デフォルトの名無しさん
NGNG俺の Mozilla が悪いのか?
読みづらいったらありゃしない。
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGEmacs/W3
0431デフォルトの名無しさん
NGNGみあたりません。Scheme でいう string->number, number->string のような
関数があればと思うんですけど、他になんか定石があるんでしょうか?
0432431
NGNG0433デフォルトの名無しさん
NGNGあんな説明じゃ解らない。
syntaxって何。quote の構文的な相当物って意味わからんし
identifierってシンボルと違うの??
誰か教えて・・・
0434デフォルトの名無しさん
NGNG>syntax-rulesじゃない方
ってなに?
define-macro?
syntax-case?
おれはdefine-macroしか知らん。
0435デフォルトの名無しさん
NGNGあの説明は分かりにくい。R5RSでは削られたんだし、忘れよう。
低レベルのhygienicマクロを理解したければor使いたければ
標準ではないが、syntax-caseの動作を見るのが良いと思う。
identifierとは、変数を表すシンボルに束縛情報がくっついたものだと
思えば良い。
(define-macro foo
(syntax-rules () ((_ val) (let ((a 3)) (+ a val)))))
というマクロを考えてみる。これは次のように展開される。
(foo 4) ===> (let ((a 3)) (+ a 4)) ==> 7
では次の式はどう展開されるか。
(let ((a 2)) (foo a))
字面で展開すると
(let ((a 2)) (let ((a 3)) (+ a a))) ==> 6
となってしまいそうだが、hygienic macroにおいては、
* マクロfooに渡されるaというidentifierは、let ((a 2))で束縛されたもの
* マクロfoo内で使われるaとういidentifierは、マクロ内で挿入されるlet ((a 3))で束縛されるもの
というふうに束縛情報を一緒に持っているので、ふたつのaが混同される
ことがない。つまり
(let ((a 2)) (foo a)) => 5
となる。
で、これと同じことをsyntax-rulesを使わずに表現しようとすると、
「束縛情報をデータに付随させる」という操作を明示する必要が
ある。それに使われるのがsyntax。
0436デフォルトの名無しさん
NGNG評価されたらどうしますか? まぁ、そんな企業にいないだろうけど。
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNG括弧の数で評価するように働きかける
0439デフォルトの名無しさん
NGNGそもそも「ステップ数」の定義って何?
0440デフォルトの名無しさん
NGNG(・∀・)イイ!!
0441デフォルトの名無しさん
NGNGS式中の括弧を増やすテクを教えてください。
リストを (a . (b . (c . d))) のように表現する。
0443デフォルトの名無しさん
NGNG'(a b c d e)
==> '(a . (b . (c . (d . (e . ())))))
0444デフォルトの名無しさん
NGNGアホか?
そんなのいちいち書いてられっかよ。
ふつー、全部inline化、macro-expandしてppした巨大関数1こを納品。
これよ。
人間の頭じゃまずメンテできないし、納品しても安心。
0445デフォルトの名無しさん
NGNGっていうかそれ、ふつーなのかよ。
0446デフォルトの名無しさん
NGNGinline-expand & macro-expandでの公開は、結構普通みたいです。
LISPの利点の1つかも。
0447デフォルトの名無しさん
NGNGフランジャーのほうが良い。
0448デフォルトの名無しさん
NGNG2段オチだとしても、
つまんないし、わかりにくいよ
0449デフォルトの名無しさん
NGNG>'(a b c d e)
>==> '(a . (b . (c . (d . (e . ())))))
こういうpretty-print作ってくれ
0451デフォルトの名無しさん
NGNGC にコンパイルした時の行数とか…
…どれも評価には向かなそうだけど。
0452デフォルトの名無しさん
NGNG(define (f x)
(if (pair? x) (begin (display "(") (f (car x)) (display " . ") (f (cdr x)) (display ")"))
(display x)))
こんなの?
0453デフォルトの名無しさん
NGNG最後のdisplayはwriteのがいいんじゃないの?
と、くだらないツッコミしかできなくてスマソ。
0454デフォルトの名無しさん
NGNG0455452
NGNGwrite ですね。
0456デフォルトの名無しさん
NGNGDrScheme じゃだめ?
0457433
NGNGさんくす!R4RS眺めつつ、実際に試しつつ、だんだん理解出来てきた気がする!
でもまだちょっと
(bound-identifier=? (generate-identifier 'x) (generate-identifier 'x)) => #f
これよくわからん。 'x を指定する意味は何。
・・・ところでsyntax-caseって?
0458454
NGNGダメじゃダメじゃ。
あんな不細工なの使ってるのあっちの学生ぐらいだよ!
センスなさすぎ。
ちうか、日本人が作ってくれんかのう?英語チンプンカンプンなので。エヘ。
それとemacs勢のやつらは、emacs使いすぎ!
独立しろよー、この大馬鹿モン供があ!
IPAはイパーイ金出すぞー
0459454
NGNGああめんどっちい
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGそうきたか。
>IDE って必要ですか?
馬鹿か、おめえは!
そんぐらい自分で判断しろや。ギギ
とりあえずフォームにテキストボックスやらボタンとか貼っつけて、
括弧書きながらあーだこーだ悩みたいですなあ!
ちうか、日本語対応してる独立したリソースエディタって何で無いの?
へんなクズばっか。もういや。
0462460
NGNG> 括弧書きながらあーだこーだ悩みたいですなあ!
そんなの、メタ言語を作れば良いんじゃないの?
0463デフォルトの名無しさん
NGNG禿げしく同意。
0464デフォルトの名無しさん
NGNGええと?
自分は!画面見て!あーだこーだ悩みたいのであります!
なんでそこで、メタだの、言語だの出てくるのさ。
察してくだせ。くだせ。
0465デフォルトの名無しさん
NGNG作ってからまた考えるよ。こんちくしょう。
そんでクズの仲間入りかよ、おい。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG(define (for-each-pair f g pair r)
(cond ((null? pair) r)
((not (pair? pair)) (g (f pair) r))
(else
(for-each-pair f g (cdr pair) (for-each-pair f g (car pair) r)))))
終端式内に for-each-pair の呼び出しが入っていても
大丈夫でしょうか?
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNGだめ、
(for-each-pair f g (cdr pair) (for-each-pair f g (car pair) r)))))
の内側にある方が末尾再帰じゃない。
0470デフォルトの名無しさん
NGNG末尾再帰版誰か書いて。
0471デフォルトの名無しさん
NGNGでは、以下のようにしたらそれぞれの関数は末尾再帰ですか?
(define (for-each-pair-1 f g pair r)
(cond ((null? pair) r)
((not (pair? pair)) (g (f pair) r))
(else
(for-each-pair-1 f g (cdr pair) (for-each-pair-2 f g (car pair) r)))))
(define (for-each-pair-2 f g pair r)
(cond ((null? pair) r)
((not (pair? pair)) (g (f pair) r))
(else
(for-each-pair-2 f g (cdr pair) (for-each-pair-1 f g (car pair) r)))))
なんだか無駄な気がしますが。
0472デフォルトの名無しさん
NGNGちがーーう。
そんなんでOKなら、なんでも末尾再帰に出来ちゃうでしょ。
末尾再帰は本質的にはループと一緒なの。
ループで書けないものは末尾再帰で書けない。
まあ、スタック使えば不可能ではないけどエレガントさ 20pt ダウンくらい。
0473デフォルトの名無しさん
NGNGなんじゃないかな。
car側が深すぎて再帰だとマズーな場合は>>472が言ってるように泥臭く書く事
になるだろうけど。
0474デフォルトの名無しさん
NGNG(define (recur pair)
(cond ((pair? pair) (recur (car pair)) (recur (cdr pair)))
((null? pair) r)
(else (g (f pair) r))))
(recur pair))
末尾再帰とループでかいてみたが・・・
(define (for-each-pair f g pair r)
(define (recur pair)
(cond ((pair? pair) (for-each-pair f g pair r))
((null? pair) r)
(else (g (f pair) r))))
(do ((pair pair (cdr pair)))
((not (pair? pair)) (recur pair))
(recur (car pair))))
0475467
NGNGすみません、もうちっとねばらしてください。 >>467 を
ループで書くとこんな感じに書けると思うのですが、
だめですか?
(define (for-each-pair f g pair r)
(do ((pair pair (cdr pair))
(r r (for-each-pair f g (car pair) r)))
((not (pair? pair)) (if (null? pair) r (g (f pair) r)))))
要は、処理系が末尾再帰と認識して、ループに変換して
くれるかどうかが知りたいのですが。
0476デフォルトの名無しさん
NGNG(define (dotted-for-each f x)
(if (list? x) (for-each f x)
(do ((x x (cdr x))
((not (pair? x)) (f x))
(f (car x)))))
(define (for-each-pair f g pair r)
(cond ((pair? pair) (dotted-for-each (lambda (pair) (for-each-pair f g pair r))
pair))
((null? pair) r)
(else (g (f pair) r))))
0477デフォルトの名無しさん
NGNG>>475のように処理されると思いますよ。
car部の処理があるから、そこのところで末尾再帰じゃなくなるだけで。
0479デフォルトの名無しさん
NGNG>>474 とか >>476 とかちゃんと読まないでレスするから
的外れかも知れないけど、SICPのコンパイラ作るところとか見た?
それを見れば分かるけど、 >>467 の場合、内側は普通の再帰のまま
外側はループになるよ。
で、>>467をいくら書き直して(例えばスタック使って強制的に)末尾再帰しても
実行効率とかメモリー効率が良くならないよ。
0480479=472
NGNG俺が>>472 で「ループ」と言ったのは正確には
「再帰を使わないループ」という意味。不正確な言い方してゴメン。
で、そういうことだから>>475 はダメ。
それから、>>479 は良く見たら>>477が同じこと言ってたね。
で分かりやすく書いてみる。
よく「末尾再帰はループになる」って言い方するけど、
コンパイラ:「末尾再帰ハケーン!!ループにしますた。」
じゃなくて、実際には。
コンパイラ:「末尾呼び出しハケーン!!ジャンプ命令にしますた。」
って事なの。
だから *結果的に* 末尾再帰はループになるし、
相互再帰とかも素直に処理される。
(もちろん単なるジャンプじゃなくて引数の受け渡しとかの問題が有るけど
それは置いといて)
だから、「for-each-pair は末尾再帰関数か?」という問いには
NO と答えるしか無いけど、
「for-each-pair の2回の再帰呼び出しが普通に呼び出されるか?」
という問いもやはり NO になる。
外側の方の再帰呼び出しはジャンプ命令になる。
すると、結局for-each-pairは、
「ループがあってその中で自分自身を1回だけ呼び出している。」
そんな関数にコンパイルされる。
だから>>477の言ったようになる。
0481デフォルトの名無しさん
NGNG(define (flat x)
(cond ((list? x) (apply append (map flat x)))
((pair? x) (apply append (map flat (list (car x) (cdr x)))))
(else (list x))))
(define (for-each-pair f g pair r)
(do ((pair (flat pair) (cdr pair))
(r r (g (f (car pair)) r)))
((null? pair) r)))
0482481
NGNG(define (flat x)
(cond ((list? x) (apply append (map flat x)))
((pair? x) (flat (list (car x) (cdr x))))
(else (list x))))
0483デフォルトの名無しさん
NGNGsyntax-case については、
Kent Dybvig の本「プログラミング言語 Scheme」に説明があります。
(けど、あの本のなかで一番わかりにくい部分の気がする)。
あとひまなら、
"Syntactic Abstraction in Scheme"
"Writing Hygenic Macros in Scheme with Syntax-Case"
あたりも。
0484デフォルトの名無しさん
NGNG解析しようとして挫折しました。
0485457
NGNGいろいろぐーぐってたら、こんなん出ましたけど、もしかしてその本かなぁ?
http://www.scheme.com/tspl2d/index.html
0486467
NGNGわかりやすい説明ありがとうございます。
>>467 の関数を処理系はループ(ジャンプ命令)に変換するが、
末尾再帰関数とは呼ばないということですね。勉強になりました。
>>479
SICP 読んでみます。
0487485
NGNGそんなことないと思うです。
ループに変換される方は末尾再帰と呼びます。
for-each-pair の呼び出しって2箇所あるじゃないですか?
外側のこれ↓
> (for-each-pair f g (cdr pair) (for-each-pair f g (car pair) r))
は終端式だから、末尾再帰になるけど、その内側のこの部分↓
> (for-each-pair f g (car pair) r)
は終端式じゃないから、こっちの呼び出しは末尾再帰にならないってことだと思うです。
0488デフォルトの名無しさん
NGNG(apply + (map (lambda (x) (if (list? x) (apply * (map eval x)) (eval x))) x)))
(define x 6)
(f '(x x x (x x)))
54
ってなるんだけど、関数引数のxをevalしないようになってるの?
0489デフォルトの名無しさん
NGNG正解。 483 があげてるのは、その訳本(村上雅章訳)。
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNGwhile(1){
処理A;
if(終了条件)
break;
処理B;
}
これを、scheme ですきっり書く方法を教えて下さい。
どうして、scheme の do などには return がないんだ。
0495デフォルトの名無しさん
NGNG(処理A)
(do () ((終了条件))
(処理B) (処理A))
これかなあ。処理Aが二回でてるのはよくないけど。
0496494
NGNG(call/cc (lambda (return)
(let loop ()
(proc-A)
(if (end? )
(return ))
(proc-B)
(loop))))
でも、長いんです。
0497デフォルトの名無しさん
NGNG((終了条件 a)))
になるように処理A、処理B、終了条件を書くとか。
(do ((a 初期値 (処理B a)))
((終了条件 (処理A a))))
こうなれば一番いいけど。
0498494
NGNG理解できません。ごめんなさい。
0499494
NGNG(loop
(proc-A)
(if (end? )
(return val))
(proc-B))
んー、実にシンプル。
さらに return は便利で。
(defun foo ()
...
(if a
(return val))
... )
のように関数から途中で抜けれる。
こんな便利な return を無くしたのも
それなりの理由があると思うのです。
なにしろ、 SRFI にもないですから(確か)。
0500495=497
NGNG(do ()
((and (super-a) (終了条件)))
(処理B))
0503デフォルトの名無しさん
NGNG>でも、長いんです。
マクロにでもしやがれ
0504497
NGNGもともとのproc-A proc-B っていうやり方を変えようってこと。
proc-A proc-Bは単に処理の流れで区切っているだけでしょう。
処理の中で変化していく状態なり変数なりを見てほしい。
それに名前をつけて、初期値と変化の仕方を探す。
(a a0 (... a))
aは名前、a0は初期値、...は次にどう変わるか。
(do ((a a0 (... a))
(b b0 (... b))
.
.
.
(z z0 (... z)))
((end? a b ... z)))
でこうなる。
proc-A は初期値と次の変化のところに
proc-B は次の変化のところに
バラバラにして入れることになる。
0505494
NGNG0回以上のループと1回以上のループを含意する重要なループです。
SRFIにすらないので、関数型言語らしい書き方があるかも思っていたけど、
ないみたいですね。
>>500 関数にするのならもう少しシンプルになりますよ。
>>502,503
なんてたって、schemeには継続とマクロと末尾呼び出しがありますね。
>>504 副作用ありだと問題がありますよ。
0506497
NGNGwhile (処理A+!終了条件)
処理b;
(define (end?) (処理A) (終了条件))
(do ()
((end?))
(処理B))
0507デフォルトの名無しさん
NGNGマクロ
(define-syntax block
(syntax-rules ()
((block tag body1 body2 ...)
(call-with-current-continuation
(lambda (tag)
body1 body2 ...)))))
(define-syntax while
(syntax-rules ()
((while test break continue body1 body2 ...)
(block break
(let loop ()
(cond (test
(block continue
body1 body2 ...)
(loop))))))))
ここにあった。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#continuation
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNG同意。綺麗にまとまってる。
0511デフォルトの名無しさん
NGNGttp://www.amazon.co.jp/exec/obidos/ASIN/0415298199/photoinfo-22/249-9143721-5914721
面白そうなんだけど、えらく高くて買うのに躊躇してます。
だれか読んだ人、感想教えて。
0512デフォルトの名無しさん
NGNGまじスゲーよ。
0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNGおいてやろうって親切な方はいないだろうか。
>>2-7 のようなリンクもいいが、scheme なアンテナもほしー
とか、言ってみるテスト
0516デフォルトの名無しさん
NGNG0517デフォルトの名無しさん
NGNGとりあえず checkinstall なんてどう? deb 作ってくれるよ。
0518487
NGNGファイルが閉じられはしないようなことが R5RS に書いてありましたが、
閉じられはしないだけで current-input-port は切り替わるんでしょうか?
それとも、そのまま?
0519名無しのゴーシュ使い
NGNGロードマップのページもちょっとずつ変化してるね。
前は version 0.7.0 は GTk サポートのみだったような。
GTk へのインターフェイスが出来れば Guile が不用になるので、
とっても嬉しいです。>> 作者樣
0520index-j.html
NGNG0521ななしさん@お腹いっぱい
NGNGもちろん漏れと漏れの友人だけのために。
Debian での正式メンテナは 0.5x くらいからとまったままみたい…どうよ?
0522デフォルトの名無しさん
NGNG公開して下さい。
0523デフォルトの名無しさん
NGNG全部コンパイルして、gosh-euc, gosh-utf, gosh-sjis てな感じにして、
インストールするときのダイアログで gosh からどれにシンボリックリンク張るか尋ねるのか?
gauche-dev って何が入ってるの?
セロ弾きのゴーシュ万歳!!
0524名無しさん@Emacs
NGNGなんだかLispにますます興味が沸きました。
0525デフォルトの名無しさん
NGNG(string=? key (substring pool s e))
みたいな処理が含まれたループかなんかだと、
使い捨ての文字列をいちいち生成するのはかなり馬鹿らしいと思うんだけど。
0526デフォルトの名無しさん
NGNGそれらしいのは見当たらなかったけど、SRFI-13 からそれらしいの探してくるっ
ていうんじゃだめですか?
string-compare s1 s2 proc< proc= proc> [start1 end1 start2 end2] -> values
string-compare-ci s1 s2 proc< proc= proc> [start1 end1 start2 end2] ->values
string= s1 s2 [start1 end1 start2 end2] -> boolean
string<> s1 s2 [start1 end1 start2 end2] -> boolean
string< s1 s2 [start1 end1 start2 end2] -> boolean
string> s1 s2 [start1 end1 start2 end2] -> boolean
string<= s1 s2 [start1 end1 start2 end2] -> boolean
string>= s1 s2 [start1 end1 start2 end2] -> boolean
0527デフォルトの名無しさん
NGNGここだと、どこからどこまでがLispでどこからSchemeの話しなのか
わかりずらいのですが・・・
0528デフォルトの名無しさん
NGNGここはLispとSchemeと兼用だし。
それだけ話題が少ない。
0529デフォルトの名無しさん
NGNGGaucheの部分文字列はcopy-on-writeで管理されているので、
変更を加えない限り自動的に共有されるってどこかに書いてあったような
0530デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme/gauche/memo-str-j.html
0531デフォルトの名無しさん
NGNG0532名無しさん@Emacs
NGNGそれは、どうして廃れてしまったのでしょうか?
速度でしょうか?それとも「シェルスクリプトの方が
Lispより圧倒的に簡単だったから」という理由からでしょうか?
当時を知る人に昔話でもしてもらえたらなーなんて思います。
0533デフォルトの名無しさん
NGNGClassical Mathematicsだとばっかり...
「おもこ」してました。
0534デフォルトの名無しさん
NGNG他言語、他システムとの親和性が低かったから。
閉じたプロジェクトでは大きな力を発揮したが。
0535デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme
のどこかで Lispマシンの衰退の理由が書いてあった気がする。
まあ、google で "Lispマシンの衰退"とかで調べたら。
0536デフォルトの名無しさん
NGNGソフトウェアエミュレーションでも十分速くなったからでは?
0537デフォルトの名無しさん
NGNGハウサーハケーン
0538デフォルトの名無しさん
NGNGこんなデータ(http://namazu.org/~satoru/reference/books.db)をアプリ
に取り込んで処理をしたいです。
(load "./books.db)なんてやっちゃうと、「評価できない」と言わ
れます。(quote (load "./books.db))じゃないしー。
どーすればいーのでしょー。
0539デフォルトの名無しさん
NGNG(call-with-input-file "./books.db" read) でどうでしょー?
0540デフォルトの名無しさん
NGNG(define data (call-with-input-file "./books.db" read))みたいに
して、carやcdrでデータを取りだせそうです。ありがとう!
関数型でも、この後は変数に代入しまくってもいいんですよ
ね!?
0541デフォルトの名無しさん
NGNGschemeだろうけど、LISPは純粋な関数型じゃないですよ。
なので、あまり気にする必要は無いと思います。
I/Oとか必須でしょうし。
けど、安易に接尾辞に!がつく関数は使わないで、
letとかうまく使えば非破壊でも色々できると思います。
0542デフォルトの名無しさん
NGNG状態を気にする必要が無いとか、色々。
詳しくは関数型言語スレを参照。
I/Oも、見た目非破壊にすることができたと思います。
すぐに例は思いつきませんが。
0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNG誰かこれ分かる人解説してください。
0545デフォルトの名無しさん
NGNG2を評価する。
どういう意味があるかは不明。
1:'`(let ((let ',let)) ,let)
最初に'があるので
let には `(let ((let ',let)) ,let)が評価されずに入る。
let -> (quasiquote (let ((let (quote (unquote let)))) (unquote let)))
2:`(let ((let ',let)) ,let))
,(=unquote)がないと`(=quasiquote)は評価しない。
`(let ((let 'let)) let) を評価すると
(let ((let (quote let))) let) になる。
`(let ((let 'let)) ,let) を評価すると
let => (quasiquote (let ((let (quote (unquote let)))) (unquote let))) だから
(let ((let (quote let))) (quasiquote (let ((let (quote (unquote let)))) (unquote let)))) になる。
`(let ((let ',let)) ,let) を評価すると
quasiquote 内で (quote (unquote let)) は評価されて (quote let-eval) になる。
let => (quasiquote (let ((let (quote (unquote let)))) (unquote let))) だから
(let ((let (quote (quasiquote (let ((let (quote (unquote let)))) (unquote let)))))) (quasiquote (let ((let (quote (unquote let)))) (unquote let)))) になる。
0546545
NGNGは評価しても同じになるのね。
1:'`(let ((let ',let)) ,let)
最初に'があるので
let には `(let ((let ',let)) ,let)が評価されずに入る。
let -> `(let ((let ',let)) ,let)
2:`(let ((let ',let)) ,let))
,(=unquote)がないと`(=quasiquote)は評価しない。
`(let ((let 'let)) let) を評価すると
(let ((let 'let)) let) になる。
`(let ((let 'let)) ,let) を評価すると
let => `(let ((let ',let)) ,let) だから
(let ((let (quote let))) `(let ((let ',let)) ,let)) になる。
`(let ((let ',let)) ,let) を評価すると
quasiquote 内で ',let は 'let-eval になる。
let => `(let ((let ',let)) ,let) だから
(let ((let '`(let ((let ',let)) ,let))) `(let ((let ',let)) ,let)) になる。
0547デフォルトの名無しさん
NGNG(reverse (concatenate 'string "pj.oc.oof@" "egoh"))
=> [email protected]
;; 無限ループ
((lambda (x) (x x)) (lambda (x) (x x)))
;; あと 2ch の過去ログにあったやつ
((call/cc call/cc) (call/cc call/cc))
というわけで何か面白いネタ募集。
0548デフォルトの名無しさん
NGNGなぜか SECTION 6 5 6 で引っかかるの。
ソースを追っても何をテストしてるのか解読できません。
へるぷみ〜。
>>544
> (let ((let '`(let ((let ',let)) ,let))) `(let ((let ',let)) ,let))
見るだけで鬱だ・・・
0550デフォルトの名無しさん
NGNGあの辺の「数」の実装、まともにやろうとすると頭禿げそうな。
そういえば、bignumの16進数の出力とかってどうやるの?
いちいち16で割り算してったら日が暮れそうな気がするけど。
0551デフォルトの名無しさん
NGNG0552525
NGNG代わりにstring-set!が遅いと書いてあるね。
って、string-set!した時点で新しいオブジェクト作るってことは、
それ参照してる変数全部書き換えすんの?
非現実的な気がするんだけど。
受けオブジェクトがあるのかな。
[複数の参照先]→[受けオブジェクト]→[文字列の実体またはポインタ]
0553デフォルトの名無しさん
NGNG普通って、bignumで8bit右シフトなんて簡単にできるの?
0554デフォルトの名無しさん
NGNGなにも全体をシフトする必要ないじゃん
0555デフォルトの名無しさん
NGNGどういうアルゴリズムですか?
例えばshort(0〜9999)とかで分かれてた場合は?
0556デフォルトの名無しさん
NGNGうーん、おれ頭悪いんで、例として
12345678901234567890(これは10進表現)
というbignum値(short配列で(0〜9999の範囲)で格納されている)があった場合、
それをどうやって16進出力するかって例をお願いします。
0557デフォルトの名無しさん
NGNGコレがすんげー意味不明
0558デフォルトの名無しさん
NGNGshort bn[];
の各要素に入る値が0から9999ってことじゃないの?
これのメリットは10進ならそのまま出力できるって事。
0559デフォルトの名無しさん
NGNGBCDじゃ演算速度がた落ちだろ。
0560556
NGNGなにが普通なのかよくわからないです。
いまのところ、
>>558さんの言う通り、>>556の12345678901234567890という値なら
short bn[] = {1234,5678,9012,3456, 7890};
というのを考えてました。
0561556
NGNGじゃあ、0〜65535の範囲を使うとして、
それを10進で出力する方法を教えてください。
0562デフォルトの名無しさん
NGNGLSB <-・-> MSB
0AD2 EB1F A98C AB54
0563デフォルトの名無しさん
NGNG普通に10で除算した剰余を使う。
0564556
NGNGいや、方向はとりあえずどうでもいいんですけど。
>>562のshort bn[] = {1234,5678,9012,3456, 7890};
も実際は逆になるでしょうし。
0565556
NGNGそれって遅いんじゃないですか?
もっと良い方法があるかと思ったんですが。
0566デフォルトの名無しさん
NGNG方向はどうでも良いが、値が違うと突っ込みが入らないように書いただけ。
0567556
NGNG突っ込みませんので教えてください。
ありがちなのは、10000で割りながら余りを4桁ずつ出していく方法。
同様に、10000進数を16進にするなら、4096で割りながら余りを
3桁ずつ出していけばいい。
0569デフォルトの名無しさん
NGNG高々除算の数千回から数万回、I/Oに比べたらずっと速い
0570556
NGNG結局一度に割る数を多めに取るということでしょうか。
半端な値の処理とか考えると禿げそうですね。
ありがとうございました。
そろそろスレ違いっぽいのでこれで終わりにします。
0571デフォルトの名無しさん
NGNG既存のライブラリ使った方がいいよ、多分。
ハゲるよ(w
0572心配だなー
NGNG0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNG0575デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNGカリー化な Lisp って何がありますか?
0578デフォルトの名無しさん
NGNGhttp://srfi.schemers.org/srfi-26/srfi-26.html
Gauche には部分適用可能な高階手続きが用意されているhttp://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_75.html#SEC75
0579デフォルトの名無しさん
NGNG(map (pa$ * 2) '(1 2 3)) => (2 4 6)
という例はどういう風に展開されるのでしょうか?
(map (lambda (t1) (* 2 t1)) '(1 2 3))
こんな感じ?
だけど、↓みたいなことしたい場合はどうするの?
(map (lambda (t1) (- t1 2)) '(1 2 3)) => (-1 0 1)
(map (pa$ - 2) '(1 2 3))
じゃ、
=> (1 0 -1)
となって駄目ですよね?
0580デフォルトの名無しさん
NGNGではいかんのか?
0581デフォルトの名無しさん
NGNG(map (cut - <> 2) '(1 2 3))
で被演算子の順序を変えられるみたいなんだけど。
この差がpa$の制限ですか?
0582デフォルトの名無しさん
NGNGそれをpa$で書くことはできますか?
ってことを聞きたかったんです。
0583デフォルトの名無しさん
NGNGHaskellとかだと、flipという、引数の順序を入れ換えるオペレータが
あるな。
map (flip (-) 2) [1,2,3] ==> [-1,0,1]
同じようなことをするflip$みたいのを導入すればいいんじゃないか。
どう書くかは読者の演習課題としておく。
0584デフォルトの名無しさん
NGNG(lambda (x) (f x a)))
これ?
0585デフォルトの名無しさん
NGNG(lambda (x y . z) (apply f y x z)))
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG参考になるかどうかわからんけど。
Schemeを作ろう第1回
http://www.jah.ne.jp/~naoyuki/Writings/VScheme1.html
0588デフォルトの名無しさん
NGNGgosh にも cut なるんだし、なぜ pa$ にこだわるの?
0589デフォルトの名無しさん
NGNGアプリケーション、おすすめを教えてください。
できたらGaucheで。初期設定ファイルから初期設定、オブジェ
クト指向、DBなどが使われていると嬉しいです。
(Wiliki.scmは読んでいます http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi)
0590デフォルトの名無しさん
NGNG「Scheme の勉強」って文法ですか?
それとも背景にある Lisp の慣習や定石も含まれていますか?
0591デフォルトの名無しさん
NGNG「Schemeの勉強」は文法だけです。具体的には湯浅太一さん
の「Scheme入門」を読みました。しかし、これだけではオブ
ジェクト指向、Webフレームワークには勝てないんです。(^^;
定石は是非とも知りたいところです。
0592デフォルトの名無しさん
NGNGここのページも分かりやすいですよ。
Lisp制作講座
http://www.roy.hi-ho.ne.jp/pastel/home/Lisp/index.html
0594デフォルトの名無しさん
NGNGありがとう。SICP持ってますが、あれは気長に学習モードです。
なんとか、「現実的な」(?)サンプルを! (^o^)
SICPってやっぱ、簡単なサンプルを越えるすごさがあるんです
かー(感嘆&クエスチョンマーク)
0595デフォルトの名無しさん
NGNGn-queenサンプルのページ
>ただしメモリ消費量が凄いです.8-queenを解くのに90Mも食ってくれます(汗)
すげぇ富豪的だ(w
0596デフォルトの名無しさん
NGNGなんでそんなにかかるんだよ!
0597デフォルトの名無しさん
NGNG(let ((a (lambda(a b.d) (cons d a)))) (a 1 2 3 4))
の答えが
((3 4) . 1)
になるんですが、どうしてそうなるかわかりません。
aにlambda(a b.d)(cons d a))))がバインドされるのはわかるのですが、
どういう手続きでそうなるか教えてください。
0598デフォルトの名無しさん
NGNG(a 1 2 3 4)
と同じ
x -> 1, y -> 2, z -> (3 4)
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG>少なくとも9〜12byteは必要でしょう。
>Lispのconsセルはポインタ2つきっかりになるのが普通だ
>よ。Javaとかと違って型の種類が固定だから、ポインタの
>下3ビットとかに型情報をエンコードする。特にconsセル
>と小さい整数あたりは最も効率よい表現を割り当てる。
古いネタ(Part2からの)で恐縮ですが。。Scheme処理系を作ってみたくて勉強
しています。過去スレを漁っていると上のようなやりとりを見つけました。
minischeme は前者の方法、gauche では後者の方法をとっていると思うのです
が、ここら辺について詳しい人、解説してもらえませんか? (もちろん Part2
のこの後のやりとりも読んでいるんですが)
後者の方法を使うとポインタの指す先を見なくても型が分るということなので
すが、ポインタの下3ビットに別の情報を埋めこんでしまって、そのポインタ
の指すデータはちゃんととってこれるんでしょうか。
うーん、書きながら何だかまだまだ勉強不足な気がしてきました。。
0603デフォルトの名無しさん
NGNG> ポインタの下3ビットに別の情報を埋めこんでしまって、そのポインタ
> の指すデータはちゃんととってこれるんでしょうか。
consは、下3bitを000にすればいい。
intなんかはmaskしてから使いなよ。(Cのcodeの中では)
> minischeme は前者の方法
miniだけにword境界を跨いでwordアクセス、
あるいはpointerとtagの分離によるworking setの増大による
速度低減は気にしないんだろ。
自身がなければminiの方法で手習いするのもいい。
0604デフォルトの名無しさん
NGNGgcでのマークはどうするの?
0605デフォルトの名無しさん
NGNG(progn
(message "Parallel GCとかじゃなければ、計算中は0でいいでしょ?")
(if paranoia
(yes-or-no-p "って返事で、的を射てるんでしょうかね?)))
0606602
NGNG>consは、下3bitを000にすればいい。
ポインタの場合は何も埋めこまないってことかな、と一瞬わかったような気に
なったのですが、テストコードを書いてみてまた混乱してしまいました。
gaucheは(下2ビットですが)確かにポインタのときは 00 になっているようで
すね。
図々しいようですが、Cのコードでちょっとしたサンプルを見せてもらえない
でしょうか。それでも分からなかったら minischeme の方法でやってみること
にします。
0607デフォルトの名無しさん
NGNGマークフラグは別テーブルでできると思う。
>>606
603じゃないけど
typedef struct _cell {
struct _cell *car;
struct _cell *cdr;
} cell;
#define atomp(p) (1&(p))
#define cellp(p) !atomp(p) // pairp
#define car(p) (p)->car
#define cdr(p) (p)->cdr
数値を即値(30bit)にするとかの場合はもう1bit使って、
#define fixnump(p) (3&(long)(p)==3)
#define fixnum_value(p) ((long)(p)>>2)
#define make_fixnum_value(p) (cell *)(((p)<<2)|3)
とか。
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610602
NGNGやっとわかってきました。ありがとうございます。
あとは自分で考えてみることにします。
#define fixnump(p) (3&(long)(p)==3)
は
#define fixnump(p) ((long)(p)&3==3)
にしないと正しい結果が出なかったんですが、理由はよくわかりません(汗
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGんん。
#define fixnump(p) ((((long)p)&3)==3)
じゃないとマズくない?
0613602
NGNGあ、そうですか。
今手元に本がないんで後でちゃんと調べるつもりだったんですが、適当なこと
を書いたかもしれません。すみません。
#define fixnump(p) (3&(long)(p)==3)
がダメなはずはないでしょうか?自分のプログラムが間違っていただけかもし
れません。
それと何度も質問ばっかりで申し訳ないんですが、、
#define atomp(p) (1&(p))
#define cellp(p) !atomp(p) // pairp
ポインタのアドレスの一番下のビットがたまたま1になっていてこの判定が逆
になってしまう可能性があるように思うのですが、そういうことはないんでしょ
うか?
0614デフォルトの名無しさん
NGNG> ポインタのアドレスの一番下のビットがたまたま1になっていて
ヒープデータをポインタのサイズ、もしくはセルのサイズに
必ずアラインするようにしておく。
そうすれば、ポインタ4バイトのアーキテクチャなら、
有効なポインタの下2ビットは常に0。
必ず0
0615デフォルトの名無しさん
NGNGそのへんのことは
http://www.gnu.org/software/guile/docs/data-rep.html
ここが参考になるかもしれない。
0616デフォルトの名無しさん
NGNGなるほど。みんなそれを前提にしてたんですか。思わず溜息ものです。
過去ログの話もいまいち飲み込めなかったのが全部すっきりしました。
これが常識なんでしょうか。すごいなぁ。
>>615さんの紹介してくれたページにもその辺のことが書いてありますね。
これから続きを読んできます。
みなさんいろいろありがとうございました。
0617デフォルトの名無しさん
NGNGつーか、ワード境界を跨いでワードを配置しないのは、
システムプログラマの常識。アセンブラの勉強しなされ。
RISCだとそもそも一発でread/write出来ないのが多いし、CISCでもペナルティがある。
そもそもmalloc(3)はワード境界から割り当てる実装が多い。(つーかしないのある?)
0618デフォルトの名無しさん
NGNGとりあえず、Barendregtの本はどうでしょう?
板違いかな。
0619デフォルトの名無しさん
NGNG今8週間のクラスをとっています。最初の2週間prolog,
次の2週間にscheme,次の2週間にMLで、最後の2週間に
コンパイラの概念を教えるクラスをとっているんですが、
shcemeははじめて、というか関数型言語ははじめて勉強するので
よくわかりません。使ってる言語はインディアナ大学の
プログラミングラングエッジスキームという本なんですけど。
(((if (eq? 'a 'b) car cdr) (cons cdr car))'(3 (2 1)))
return 3,
(define x (lambda (y) (lambda (z) (cons z y))))
((x '(2 1)) '(4 3))
return ((4 3 ) 2 1),
(define x (lambda ( y z)(cond ((null? z) y)((eq? (car z)y)(cons y z))
(else (x y (cdr z))))))
(x 'd '(a c b))
return d,
(x 'b '(a c c a))
return b,
(map (lambda (f) (f '(a b c d))) (list cddr cadr caddr list))
return ((c d) b c ((a b c d)))
など初歩の問題らしく、2週間ことにテストがあり、これはshceme
のパートの一部なんですが、はっきりいってぜんぜんわかりません。
アメリカ人も難しいクラスとなやんでいるのですが、どんなvalue が
リターンされるか答える問題ですが、教授は簡単だといっています。
やはりshcemeを勉強しだしこのくらいはできないとだめなんでしょうか?
僕は日本の理工系の学生は尊敬してるのですが、このくらいは
日本の学生は簡単にやってしまうのでしょうか?Cならわかるのですが、
なにかこのクラスをとって自信が情報工学勉強してる自信がなくなって
きました。
ならやめろとかいわないでね。
0620デフォルトの名無しさん
NGNGインタプリタを使える環境にあるんでしょ?
括弧の一番内側から1ステップづつ実行してみるのがよろし。
この課題について言えば、Cと違って関数もオブジェクトに
なることが理解できたらすぐわかると思う。あと括弧に慣れること。
この課題がどういうレベルかというと、英語でいうならアルファベットを
読めるかどうかを確認するレベルかなあ。
0621デフォルトの名無しさん
NGNGCでも関数ポインタあるんですが。
違いは、それをインラインで書ける、動的に生成できるってことで。
0622デフォルトの名無しさん
NGNG620 氏の言う通り、単純に慣れの問題だと思われ。
一度慣れてしまえば、スラスラ解けますよ。僕は理工系の学生ではないですけど。
0623620
NGNG> Cでも関数ポインタあるんですが。
そういやそうだな。
そしたら最初のやつはlambdaも出て来ないから
わかりそうなもんだが…もしかしてquoteで引っかかる?
0624デフォルトの名無しさん
NGNGもしかしたらCをわかってるつもりなだけで
(((intern("a") == intern("b") ? car : cdr)(cons(cdr, car))))(list(3, list(2, 1)))
なんてのを見ても動作が理解できないとかだったりするかも。
(キャストは省略してます。)
0625619
NGNGschemeに比べるとわかるという程度で・・・
いまschemeを習いだして1週間目がすぎて、2週目なんですが、
本よんでいるにもかかわらず、この最初の問題もわかりません。
(((if (eq? 'a 'b) car cdr) (cons cdr car))'(3 (2 1)))
(eq? 'a 'b)car cdr)(cons cdr car))
ここの意味だけでぜんぜんわかりません。'aと'bがeqalなら
carで#fならcdr? まったくわかりません。誰かどうやって動いてるか
解説おねがいします。テストではoutputを書けってでてくるので。
Cについてはなじらないでください。>>624さんがいってる動作も
ぜんぜんわかりません・・・・
これは理解できる?
(eq? 'a 'b) => #f
(if #f car cdr) => cdr
(cdr (cons cdr car)) => car
(car '(3 (2 1))) => 3
0627619
NGNGわかりやすく解説ありがとうございます。
なぜ(cdr (cons cdr car)) ->car
になるのでしょうか?リストの中でcarは最初、cdrは
残りというのはわかるのですが、このリストの中身、
(cons cdr car)のcar->cons, cdr->cdr carとは違うのですか?
0628619
NGNG0629619
NGNGこちらの解説もおねがいできないでしょうか?
(define x (lambda (y) (lambda (z) (cons z y))))
((x '(2 1)) '(4 3))
return ((4 3 ) 2 1),
define xに (lambda (y) (lambda (z)(cons z y))))
がバインドされるのですよね? (lambda (z)に(cons z y)が
バインドされるのでしょうか?そしてそれをlambda (y)にバインド
ということでしょうか?return されるのをみると、与えられてる
ものが逆になってるということだけわかるんですが・・・
0630デフォルトの名無しさん
NGNG> (if #f car cdr) => cdr
> (cdr (cons cdr car)) => car
これ違うんじゃ。。。quoteついてないからcdrやcarの中身だと思われ。
0631デフォルトの名無しさん
NGNGgosh> (cons cdr car)
(#<subr cdr> . #<subr car>)
gosh> (cdr (cons cdr car))
#<subr car>
あのさ、自分で試すことはできないの?
だいたいの雰囲気はこういう感じ。
(define x (lambda (y) (lambda (z) (cons z y))))
x => (lambda (y) (lambda (z) (cons z y)))
(x '(2 1)) = ((lambda (y) (lambda (z) (cons z y))) '(2 1))
=> (lambda (z) (cons z '(2 1)))
((x '(2 1)) '(4 3)) = ((lambda (z) (cons z '(2 1))) '(4 3))
= (cons '(4 3) '(2 1))
=> ((4 3) 2 1)
厳密に書くとこう。
(define x (lambda (y) (lambda (z) (cons z y)))) => #<unspecified>
x => #<CLOSURE (y) (lambda (z) (cons z y))>
(x '(2 1)) = (#<CLOSURE (y) (lambda (z) (cons z y))> '(2 1))
=> #<CLOSURE (z) (cons z y)> [y = (2 1)]
((x '(2 1)) '(4 3)) = (#<CLOSURE (z) (cons z y)> '(4 3))
= (cons '(4 3) '(2 1))
=> ((4 3) 2 1)
0633619
NGNGありがとうございます。動作がわかりました。
自分はDr Schemeをウィンドウズ上で走らせてるんですが、
自分でインプットしてるんですが、どういうふうに動作してるのか
わからなくて・・・ありがとうございました。
0634デフォルトの名無しさん
NGNG気が狂いそうだ。うきーっ!
0635メロンパン
NGNGいったい何が問題なんだ?
0636619
NGNG1.(let ((x 2)) (let ((y (lambda (z)(cdr z))))(y '(+ * x x))))
return value, (* x x)
list (+ * x x)のcdrが(* x x)だと理解できるのですが、(y '(+ * x x)のyは何を
あらわしているのでしょうか?
2.(define x (lambda (y z) (cond ((null? z)y)((eq? (car z)y)(cons y z))
(else (x y (cdr z))))))
given: (x 'd '(a c b))
return value, d
(cond ((null? z)y)で、zがnullならyを返して、(eq? (car z)y)はcar zがイコールなら
yをかえすということでしょうか?このあたりが混乱してどう動作しているのかわかりません。
3.(define (map f L)(cond ((null? L) () )(#t(cons (f (car L))(map f(cdr L))))))
return value, (((1) 1) (((2 3)) (2 3)))
これも(null? L) ()),Lがヌルなら、()を返すということでしょうか?
(#t(cons (f (car L))(map f(cdr L))))))は何をあらわしてるかもわかりません・・・
#tとはなにがtrueだったらなのでしょうか?
質問ばかりで、むかつくとは思いますが、あと1週間後にテストなんです・・・
テストの形式は上にあげたような例題を少し変えてテストがでてくるので、
どういうふうに動作してるか理解してないととけないんです・・・
わがままですが、解説おねがいできないでしょうか・・・
0637デフォルトの名無しさん
NGNG1. y は (lambda (z)(cdr z)) です。2番目の let でバインドされています。
2. こう書くとわかりやすい?
(define x
(lambda (y z)
(cond
((null? z) y)
((eq? (car z)y)(cons y z))
(else (x y (cdr z)))
)
)
)
まず (null? z) をテストして、真なら y を評価して返す。
(null? z) が偽なら、次に (eq? (car z) y) をテストして、真なら (cons y z) を評価して返す。
(eq? (car z) y) も偽ならば、(x y (cdr z)) を評価して返す。
さっぱり意味がわからなければ cond について調べてください。
3.
(define (map f L)
(cond
((null? L) () )
(#t (cons (f (car L))(map f(cdr L))))
)
)
まず (null? L) をテストして、真なら () を評価して返す・・・というか、これはエラーでは?quote してない () は、評価出来ないハズだ。まぁそれはともかく。
(null? L) が偽なら、次に #t をテストして、真であれば (cons (f (car L))(map f(cdr L))) を評価して返す(真であればっていうか、#t は常に真だけど)。
OK?
0638デフォルトの名無しさん
NGNGかなり基礎的なところで罠にはまってると思われる。
式がどのように計算(評価)されるかを思いっきり簡略化して説明しよう。
簡単にするために、相当厳密さを欠いているから、
このレベルが理解できたら後日改めて厳密な定義を学んでおくように。
1. ' の直後はそれ以上計算されない。そこに書いてあるままの値になる。
2. 数字はそのまま数になる。(その他にもあるけど、今は無視しておけ。)
3. 手続きの名前は手続きそのものになる。
4. 上述のいずれの形式でも無ければ、(X ...) という形式になっているはず。
4.1 ここで、X が特殊なもの、たとえば define とか let とか cond
とか if とか quote とかなどなら、それに応じて ... のところが
それぞれ特別な方法で解釈される。
この特殊なものはは R5RS で syntax として説明されている。
どう解釈されるかも含めて、これは覚えるしか無い。
... の部分は全部計算されたり、されなかったり、
一部だけ計算されたりと、とにかく、特別なやりかたであつかわれる。
3.2 そうでなければ、まず、X の部分と ... の部分(トップレベル)が
いま説明しつつある方法で全部計算される。
この場合、 X は手続き(procecure)になるべきであり、
... の計算結果を引数にして手続き X を呼び出す。
X が car とか cdr とか cons とか、define したモノとか、
それは実は (lambda ...) とおなじものだとか、
さらには(Y ...) という形式でも、これを計算した結果
(Y ...) が手続きになるのなら、このケースにあたる。
1. の霊: '(if a b c) => (if a b c)
2. の霊: 5 => 5
3. の霊: car => #<primitive-procedure car>
4.1 の霊: (if #t 1 2) => 1
4.2 の霊: (car '(a b)) => a
0639デフォルトの名無しさん
NGNG0640634 & 548
NGNG浮動小数点数を string->number で正しく戻せないケースがあるらしいです。むぅぅ。
ところで、暗黙の force を組み込んだら r4rstest が新たなエラーを出しました。
write でプロミスを表示しようとした時に暗黙の force で値が確定してしまったようだけれど、こういう挙動は不正なんでしょうか?
簡単に言うと例えば次のような場合・・・
(define x 0)
(define y (delay x))
(write x)
(set! x 1)
(write (force x))
・・・最初の write のときに暗黙の force で値が 0 に確定するというもの。
ここは暗黙の force を発動させずに #<promise> と表示させるべきなんでしょうか?どうなんでしょ?
0641デフォルトの名無しさん
NGNG(define x 0)
(define y (delay x))
(write y)
(set! x 1)
(write (force y))
0642栗棒
NGNGかたまるときがあるし。それは俺のxpが問題なだけかもしれないけどw
0644栗棒
NGNGむずかしいんだよね。なんせwinマンセーだからw
でもDr Schemeつかっててブラウザ立ち上げると少しの間かたまるんだよね。
メモリ512Mもあるのに。ヽ(`Д´)ノウワーン(´・ω・`)ショボーン
0645栗棒
NGNG0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNGFreeBSDなら最初から入ってはいないけどportsにあるよ。
cd /usr/ports; make search key=scheme
してみれ。
よさげなのがあったら、Pathで示されたディレクトリにcdして
make install clean
すればよろし。
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNG0650デフォルトの名無しさん
NGNGhttp://www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/
これ、試してみれば?
0651デフォルトの名無しさん
NGNGエッセイ2時間かけて読み終えたハァハァ。
色々紹介されてた本買ってみようかな。
0652デフォルトの名無しさん
NGNGそうとう大変じゃないかなあ
William D. Clinger
"How to Read Floating Point Numbers Accurately"
Robert G. Burger, Kent Dybvig
"Printing Floating-Point Numbers Quickly and Accuraely"
みたいな論文って、
Scheme以外の世界では書かれてないのか?
0654デフォルトの名無しさん
NGNGhttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi
http://sourceforge.net/projects/wiliki/
WiLiKi (Wiki クローン) とかどうですか?
よく分からないけど掲示板ぽいから参考になるかも。
ソースも手に入るみたいだし。
0655648
NGNGチャレンジしてみます。
0656デフォルトの名無しさん
NGNG3.1.1 の make-account の定義に dispatch が
存在するのは間抜けだと思う人居ませんか?
グローバルシンボルの withdraw を
局所手続き withdraw に変換するため
というのは分かるのですが、
これでオブジェクト指向だと言われても
これではメソッドを追加するたびに
メソッド本体とdispatchを書き換える必要があり、
いまいち美しくないと思うのです。
0657デフォルトの名無しさん
NGNG0658656
NGNG予想される解答としては
1、すでにOOP向けの改良を組み込んだSchemeが出回ってる。
2、OOPはマクロや定義をいくつか書くことでもっと綺麗に書ける。
(パッケージ化されている)
3、OOPは優れた思想なので、プログラム入門書であるSICPでも
取り上げざるおえなかったが、Schemeは本来OOPに向かない。
とここまで書いて自分で google に scheme oop と突っ込んで
調べ始めたり。
0659デフォルトの名無しさん
NGNG> これではメソッドを追加するたびに
> メソッド本体とdispatchを書き換える必要があり、
Scheme限定の制約じゃなくて、
動的な定義がある言語のインタープリタにおける制約だし…
テーブル登録ルックアップ型よりは素直でしょ。
>>658
> 1、すでにOOP向けの改良を組み込んだSchemeが出回ってる。
実装を見せられなければいいというものでもないし…
Debug時にうっとうしいということは確かだから、
LaTeXのマクロ、C++のtemplateと同様、
解決方法が求められている課題はあるね。
0660640
NGNG前書いた暗黙のフォース云々は勘違いでした。ごめんなさひ。
0661デフォルトの名無しさん
NGNGおめでたうございます。
いいなぁ。どんな処理系のソースとか参考にしました?
>>640さんだけじゃなくて処理系作ったことある人に聞きたいです。
(特に最初に作った時に参考にしたもの)
0662!660
NGNG規模が小さい上にツボをしっかり押さえてる処理系
・mini-scheme
・AM-scheme
・SECDR-scheme
かなり昔の処理系で、作者は全部日本人ですね。
これらはgcも手書き。ただ、ちょっと遅いかも。
最初に参考にするならmini-schemeかと。
0663660
NGNG基本的にはあまり参考にしてませんです。
gaucheのソースなんか眺めてみたりしましたけれど、
他人のソースって読みにくい。あまり参考にならなかったり。
それより日本語で書かれたドキュメント類の方が何かと参考になります。
0664デフォルトの名無しさん
NGNGやっぱcellは8バイトですか?
その場合gcのマークフラグはどうするんですか?
0666デフォルトの名無しさん
NGNGバブルソート、クイックソート、などなど。ソースみて、時間かければ
なっとくできると思うんだけど、自分じゃ作れないから。
0667デフォルトの名無しさん
NGNGslib のソースに sort.scm というのがあります。
(何 sort かちゃんと見てませんけど)
あと
http://www.scheme.com/tspl2d/
の Chapter 9.2 List Sorting に merge sort があります。(英語ですが)
0668デフォルトの名無しさん
NGNGざっと見ただけなのですが、今の自分の知識では無理だと思ったので
これを読みこなすために前提となる知識、または知っておいた
方が良い知識があれば教えて頂けないのでしょうか。
0669デフォルトの名無しさん
NGNG処理系は用意しといてね。
そいから、一緒にトライしてくれるひとが、身近にいるといいかも。
0670デフォルトの名無しさん
NGNG0671668
NGNG今じぶんが持っているのは、Petite Chez Schemeと、
ChezEditというエディタなのですがこれで良いでしょうか。
>>670
残念ながらいません。おまけにプログラムに興味を持っている
男さえも周りにいません。
0672デフォルトの名無しさん
NGNGと勝手にこのスレを代表してみる。
0673デフォルトの名無しさん
NGNG/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< Dr Scheme〜〜〜!
\_/ \_________
/ │ \
∩ ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \ ( ゚∀゚)< Dr Scheme Dr Scheme!
Dr Scheme〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0674デフォルトの名無しさん
NGNGどうも思考がついて行かれん。
どしたらLisp頭になれんの?
0675デフォルトの名無しさん
NGNG例えばどのあたり?
Lispも手続き型言語だと思い込んでみたら?
Lisp(Scheme)を勉強しても、Lispが書きやすいと
思えるようにはならなかったが、C++やJavaのコードが
少し綺麗になった。
もう少し勉強したらLispの方が書きやすくなるのか?
>>675 >>674氏は上記のような状況を望んでいるのだと
思われ。したがってそれでは無意味かと……。
0677デフォルトの名無しさん
NGNG0678真性厨
NGNGこういうかっこいいことを言ってみたいです。
漏れ見たいな香具師が、
手続き型言語の数十行のコードを必死で書いてるのを横目に、
「ふっ。」といって
瞬時に同機能のLispコード書いちゃうみたいな。
0679デフォルトの名無しさん
NGNGそれは…日々 list や lambda と戯れるしか無いんじゃないかな…
Emacs とかで遊んだり、 Scheme の source 読んだり…
0680デフォルトの名無しさん
NGNGでも2週間でスキーム教えるのには無理があると思いました。テストでは簡単な
教えてもらったような問題から、バイナリーサーチツリーを書け、括弧がいくつあるか
調べるファンクションを書け、infixをpostfixに直すファンクションを書けなど、
まだたくさんいろんなファンクション書けっていう問題がありましたが、スキームやってた
人には簡単でも手続き言語しかしらない自分みたいな腐れ学生はみごとに・・・
100点中40点・・・平均も40点くらいだったんですが。スキーム恐怖症に少し
かかってしまいましたw
0681コギャルとHな出会い
NGNG朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
0682デフォルトの名無しさん
NGNGっつーことではないか?
Cとか BASIC (つーても Pureなのしかしらん) とかのいわゆる手続き型
言語だとデータ構造を意識しなくても変数をバリバリつかってなんとなく
toy programなら書けてしまう。
Lisp系言語でもそういうのはできるが、やりにくい (つーかやる習慣がない)。
ので、初期の段階からデータ構造を意識する必要がある。
でかいプログラムを書くときにはどうしてもデータ構造を意識する必要
があるので、Cとかでもそういうのに慣れるのは必要だけどね。
0683デフォルトの名無しさん
NGNG自分実はプログラムはじめて1年目なもので。プログラムは
奥が深いです。
0684デフォルトの名無しさん
NGNG> 調べるファンクションを書け、infixをpostfixに直すファンクションを書けなど、
2週間でこれはきついですね。こういうのでscheme嫌いになる人が出たら残念。
0685デフォルトの名無しさん
NGNGGUIと日本語が使えるSchemeって、ありますか?
(Stklosのwinバイナリは、日本語が通らないです)
0686デフォルトの名無しさん
NGNGUnixとWindowsで使えて
GUIと日本語(出来ればUTF8がいいな)が使えて
GPLじゃないバイナリがつくれて
フリーなSchemeって、ありますか?
0687デフォルトの名無しさん
NGNG人工知能の分野で有名な北野さんがすすめてましたがいい本なんですか?
0688デフォルトの名無しさん
NGNGとりあえず、過去ログ読んでみたら。
0690デフォルトの名無しさん
NGNG;; elisp
(* 1.4 1.4)
1.9599999999999997
;; gauche
gosh> (* 1.4 1.4)
1.9599999999999997
という結果になるのは何でですか?
guileだと
% guile -c "(display (* 1.4 1.4)) (newline)"
1.96
なんですが。
0691デフォルトの名無しさん
NGNG浮動小数点数の演算で演算誤差が発生して、1.4 と微妙に値が異なってしまうためです。
(= 1.96 (* 1.4 1.4))
ってやってみてください。これが #f なら、(* 1.4 1.4) は 1.96 ではないので、1.96 と表示されるのは誤りです。
0692691
NGNG誤:演算誤差が発生して、1.4 と微妙に値が
正:演算誤差が発生して、1.96 と微妙に値が
0693690
NGNGelisp と gauche はもともと 1.9599... なのでもちろん nil, #f でしたが
guile でも
% guile -c "(display (= 1.96 (* 1.4 1.4)))(newline)"
#f
となりました。ちょっと不思議。
誤差ですか。emacs を電卓代わりにしてたんですが小数の計算には向いていな
いですね。
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNGいわゆる浮動小数点数で誤差が発生するのはある意味常識・・・ご存知ない?
そもそも 1.4 は浮動小数点数で正確に表現出来ないんです。
表示精度と内部保持精度が違っていて、四捨五入してごまかしてるとか?
(だったら 1.960000... とでもしてほしいが)
内部精度全桁表示させる方法はありますかね?
>>694 検証実験で = を使ってるだけでは。
0697デフォルトの名無しさん
NGNG> 表示精度と内部保持精度が違っていて、四捨五入してごまかしてるとか?
そう。表示精度が低いから同じ表記になってしまうだけ。
本当は異なる値は異なる表記をしなければならんそーです。
> 内部精度全桁表示させる方法はありますかね?
面倒そう・・・この辺り↓も読むと、この問題をややこしそーに思わせてくれます。
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3a%b3%c8%c4%a5%c9%e2%c6%b0%be%ae%bf%f4%c5%c0%b1%e9%bb%bb%a4%ce%c6%e6&l=en
0698デフォルトの名無しさん
NGNG他の言語では小数点付きと整数は別扱いになってるだろーが。
0699デフォルトの名無しさん
NGNG普通にopenしてexecuteボタン押しても何も起こらないし。
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG特別扱い?なんじゃそりゃ?
0702デフォルトの名無しさん
NGNG気付かないアホがいるとは思わんかった(藁
まあ、英語なのが問題なんだろうけど。つーわけで
>>699
うちでは、拡張子が ss なファイルをopenしてexecuteすれば、
blackjackやmineは行けますが?(OS:Win2000)
PLT\collects\game\games.ss はランチャですね。
全然意味がわからん。
0705デフォルトの名無しさん
NGNG結構なこった。
おれにも、作り方教えテクだ才!
0706デフォルトの名無しさん
NGNG・1つのセルに(carとcdrで)8バイト使う処理系
割り当てるメモリ領域は1つで、
gc用マークフラグは別領域にビットマップを作る。
と、
・フラグ&マーク用にもう数バイト(=アラインメント制限で12バイト)を使う処理系
割り当てるメモリ領域は複数ブロック(セグメント単位)
では、
速度にどれぐらいの差が出そうですか?
今mini-schemeとここの過去ログを参考に、後者で作ってるんですが、
前者の方が速いのかなー、とか色々悩んでおります。
後者(mini-scheme)はおそらく、16bitのDOS環境でメモリ確保できる様に、
セグメント単位に分けたと考えられるんですが、わたしが動かす環境は
主にwindowsなので、あんまり意味ないかなと思いました。
ただ、新規セグメントの確保は、後者がオブジェクトの移動が無いので
速そうだなと、この辺りで速度差が出ないか気になっております。
0707デフォルトの名無しさん
NGNGというか、セルとポインタには後者で、大きめのメモリには前者で使い分けるのが
手軽でよさそう。
0708706
NGNGお早い回答ありがとうございます。
この辺はなんだか複雑なので、どちらかで一元化出来ないものかと考えて
おりました。
vectorやstringなどを別領域に取るのは良いアイデアですね。
前者のみを使うとなると作りはシンプルになりそうですが、
毎回copygcを呼ぶのは速度的に不利な感じなので、セル単位など、
連続領域が必要にならない間はmark&sweepを使う事を考えております。
(それでも足らなかったら大きめの領域を確保してcopygcを使う。
この辺が2度手間で逆に遅そうですが。)
0709デフォルトの名無しさん
NGNGAppelちゃんがいってたよ。
0710706
NGNGこれはmini-schemeでは解決されていませんでした。
(そもそもmini-schemeにはvectorが存在しない。)
#(#(#(#(#(#(#(....)..)..)..)..)..)..)
この様な非常にネストの深いvectorオブジェクトの各要素のマーク
を考えると、mini-schemeで使われている、クヌースの非再帰マーク
アルゴリズムそのままでは対処できないとわかりました。
(素直にvectorのmarkを再帰関数で組んでしまうとスタックオーバーフローしてしまう。)
今のところ、vectorオブジェクトにgc専用のvectorのチェーンポインタを付けて、
vectorの要素全部を後でいっぺんにマークする(意味伝わるかな・・)方法を考えて
いますが、他に良い方法はあるでしょうか。
0711706
NGNG世代別コピーgcは難易度が高すぎて、自分はいまだ理解できずにいます。
理屈を考えると速そうなのは解るんですが・・・。
0712706
NGNG0713デフォルトの名無しさん
NGNGM-x run-scheme でうまく動かないんだけどうちだけ?
cygwin でコンパイルした guile-1.4.1 だとちゃんと動くんだけど。
0714712
NGNG時間があればですが。
0715scheme 小僧
NGNG(define (my-proc arg1 arg2)
(define a (foo arg1))
(define b (foo arg2))
(define c (bar a b)))
というように同じ internal define で先に定義したもの(a,b)を使って
他のもの(c) を定義するのは正しくないのでしょうか?
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%c6%e2%c9%f4define%a4%ce%c9%be%b2%c1%bd%e7&l=jp
を見て悩んでいます。
試したところ、
guile, scm ... エラーになる
gauche, stk ... エラーにならない
でした。
通らないと結構面倒くさいのですが、let* を使えってことでしょうか。
0716デフォルトの名無しさん
NGNGって書いてありますね。
gauche の場合は「手抜き」のせいでエラーにならないんでしょう。stk は知
らないけど。
そもそも変数を定義するのに define は普通使わないと思いますが、、
>通らないと結構面倒くさいのですが、let* を使えってことでしょうか。
というのは何で?
0717scheme 小僧
NGNG> >R5RS的にもエラーが正しい。
> って書いてありますね。
やっぱし、そうですか。ありがとうございました。
> そもそも変数を定義するのに define は普通使わないと思いますが、、
> >通らないと結構面倒くさいのですが、let* を使えってことでしょうか。
> というのは何で?
どうも、C などになれちゃっているせいか、先頭で define して
名前を与える方が見易く思ってしまうんですよね。
let だと一段括弧が深くなるというのもありますが、もしかしたら
emacs 使っているので色がつくからかも知れません。
let でも束縛する識別子に色をつけてくれないかなぁ。
0718デフォルトの名無しさん
NGNG私も全部 define で済んだ方が嬉しいな…
今は letrec* とか書いて使ってるけど…
0719デフォルトの名無しさん
NGNGletrec*ってどういう挙動?
普通にlet*で関数書いておけばいいんじゃないの?
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNGlet*の関数版(引数を左から右へ評価する)lambda*ってのも、
あって良いんじゃないかと思う。
0722デフォルトの名無しさん
NGNGどうやって展開すんの?
((lambda*(a b c) ...) x y z)
↑みたいにインラインで書かれたらマクロ無理だよね?
0723デフォルトの名無しさん
NGNG最低名前でアクセスする必要がありそうだな。
無名マクロが記述できれば便利なんだが。
>>718-720
ttp://www.kt.rim.or.jp/%7ekbk/guile/guile_21.html#SEC53
ここの set! の説明に letrec* が登場するけど、ミス?
原文: http://www.delorie.com/gnu/docs/guile/guile_53.html
0725デフォルトの名無しさん
NGNG便利かなと。
S式->HTML はいけそう。でも、HTML->S式は私にはむつかそう。
http://www-6.ibm.com/jp/developerworks/xml/020208/j_x-matters14.html
これみたく、関数型の特徴って出ます?
0726デフォルトの名無しさん
NGNG(tree->string
(html:table :width "100%" :cellpading 0 "content here"))
=>
"<table width=\"100%\" cellpadding=\"0\">content here</table>\n"
(http://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_257.html#SEC257より)
0727デフォルトの名無しさん
NGNG書いた本人ですが、
ちょっと前のここの過去ログにhtml->sexpr, sexpr->htmlがあります。
一応可逆変換可能です。(コンテンツによっては不完全。)
まあ参考程度にはなるかも。
もうちょっと本格的にやりたいならDSSSLを勉強するとか。
0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNGlet* だと再帰する関数が書けないから、それにだけ対応させてみた自作 macro。
複数関数の相互再帰には対応できてないけど、少しは便利。
>>724
> ここの set! の説明に letrec* が登場するけど、ミス?
文脈的に、ミスだと思う。
0730デフォルトの名無しさん
NGNGSchemeでも、こんなのをつくるってどうよ。もちろん、一つに収斂
させるんじゃなくってね。
賛同してよん。
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNGインドネシアの首都ジャカルタ
が、どうしたって?
0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGこちらは Meadow だけど、 .emacs で
(setq scheme-program-name "C:/cygwin/bin/gosh.exe -i")
みたいに -i をつけるとうまく動くよ。
0738デフォルトの名無しさん
NGNGこのスレで何回か話題に上っている
SECDR-scheme
というものを拝見したいのですが、検索しても
発見できません。
よろしかったらお教え願えませんでしょうか。
お願いします。
0739デフォルトの名無しさん
NGNG以前、niftyのFPLにありました。
たしかインターネットからでもダウンロード可能だと思います。
0740738
NGNGお教えいただきありがとうございます。
>以前、niftyのFPLにありました。
>たしかインターネットからでもダウンロード可能だと思います。
もしかして、niftyの会員にならないとダウンロードは不可能
ということはございませんか。
ttp://www.nifty.ne.jp/forum/fpl/
には以前伺ったことがございましたが、どうしても発見できませんでした。
折角お教え頂きましたのに、ご好意を無為にするようなことを
書き込んでしまい、すみません。
0741デフォルトの名無しさん
NGNG(apply (lambda (x . y) x) pair))
(define (kdr pair)
(apply (lambda (x . y) y) pair))
> (kar '(1 2))
1
> (kdr '(1 2))
(2)
0742デフォルトの名無しさん
NGNG(define (kons x y)
`(,x . ,y))
0743デフォルトの名無しさん
NGNGほう! car, cdr はプリミティブ手続きではなくライブラリ手続きだったのか。
0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNGhttp://www.42ch.net/UploaderSmall/source/1029864917.dat
0746デフォルトの名無しさん
NGNG0747738
NGNGありがとうございます。頂戴いたしました。
ようやく拝見することができ、感激しております。
お手数をお掛けしてしまい、すみませんでした。
739 さんを始め、皆様には大変ご迷惑をおかけしました。
お詫びになるかどうかわかりませんが、Javascriptで
作成されたSECDマシンが紹介されているページです。
ttp://www2.neweb.ne.jp/wd/michiaki/lambda.html
お騒がせしてしまい、すみませんでした。
0748デフォルトの名無しさん
NGNGわかりません。よって、おしえてください。
本文の図形言語のコード+rubyによる描画アプリを↓にうpしました。
http://www.geocities.co.jp/SiliconValley-Cupertino/3100/sicp/pictlang/impl.tar.gz
0749デフォルトの名無しさん
NGNG要件入れると適当なコードが出てくる様なやつ。
そこまですごいことはできないのかな。
0750デフォルトの名無しさん
NGNG0751名無しさん
NGNG0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNG0754デフォルトの名無しさん
NGNG0755デフォルトの名無しさん
NGNGたぶん、そんな話題既出だと思うけど。
で、schemeだとdr schemeやGaucheなどの処理系あるけど、lispの場合、
どんな処理系があるの?windowsでcommon lispの処理系ってあるの?
0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG0761名無しさん
NGNGhttp://www.jsdlab.co.jp/~kamei/
にある xyzzy というエディタは Windows 用の clisp 処理系
を搭載している。
http://www.geocities.co.jp/SiliconValley-Oakland/1680/xyzzy_lisp.html
んで、ここに遊びかたが書いてあるから、しばらく遊んで、次からは
検索してから書き込むようにしようね。
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNGttp://members.tripod.co.jp/zzyyb/
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGclisp
0766デフォルトの名無しさん
NGNG「SCMソースハック」がいいですね。
0767デフォルトの名無しさん
NGNG「日本人覚醒計画」もいいですね。
( ゚д゚) < 日本人が嫌いだ。
0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNG↓に詳しく書いてあります。
http://www.ipa.go.jp/SYMPO/SYMPO99/pdf/1_61_5.pdf
http://www.google.co.jp/search?q=cache:0BUa6YDWFowC:www.ipa.go.jp/SYMPO/SYMPO99/pdf/1_61_5.pdf+common+lisp+scheme+%E6%96%B9%E8%A8%80&hl=ja&ie=UTF-8
0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNG(define-syntax while
(syntax-rules ()
((while test break continue body1 body2 ...)
(block break
(let loop ()
(cond (test
(block continue
body1 body2 ...)
(loop))))))))
上のページにあった break continue 付きの while マクロを改造して break
と continue を引数で渡さなくてもいいようなマクロを define-syntax で書
くにはどうするんですか? define-macro だったら
(define-macro (while2 test . body)
`(block break
(let _loop ()
(cond (,test
,@body
(_loop))))))
でいいと思うんですが。(gensym してないので手抜き)
;; block は上のページに載っているマクロです。
0772771
NGNG上のやつは例の URL にあるやつそのままなので、そのサイトのやつを見てく
ださい。
あ、while2 とかなってるし…。それと下のマクロですが break のことしか考
えてなかったの忘れてました。break しかできません。
0773デフォルトの名無しさん
NGNG0774771
NGNGすみません、過去ログ調べてませんでした。
Part1 にある define-macro で書いてあるやつですよね。
define-syntax と syntax-rules では break のようなキーワードを使うマク
ロをどう書くんだろうと思って、cond のマクロ定義などを参考に考えていた
んですが分からなかったので質問したんですが。syntax-rules は難しいです
ね。define-syntax 使う人はあまりいなんでしょうか?
0775デフォルトの名無しさん
NGNGR4RSの低水準マクロの例に載ってる loop-until-exit を改造すればいーんじゃない?
0776デフォルトの名無しさん
NGNGsyntax-rulesでは無理です。シンボルは呼び出し側から入力しないと、衝突を回避するために改名されちまいます。
0777771
NGNGそうなんですか。cond の else みたいに syntax-rules の引数に渡せばでき
るのかと思ってました。
できないんであればおとなしく define-macro を使うことにします。
0778デフォルトの名無しさん
NGNGelse は束縛されてないから・・・
let の変数リストや lambda の引数リストでレキシカルに束縛すると、それを参照する識別子とトップレベルを参照する自由な識別子は別物になってしまうのです。
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGなんかどう見てもdefine-macroのが簡単なんだが・・・
rule/caseのアドバンテージって、インテリジェントな
シンボル衝突回避ぐらいでしょ?
0782デフォルトの名無しさん
NGNGとりあえず実用価値のない簡単な例ですが・・・
(define foo (lambda () 1))
(define-macro bar (lambda (x) (foo)))
これで (bar) とか書けば 1 に置換されるんですよね?
つーことは define-macro のマクロ展開って、実行時に毎回やるんでしょうか?コンパイル時に1度だけではなくて。
えーと、つまり、コンパイル時に展開しようとすると、foo はまだ代入されてなくて、評価出来ないということになりません? foo は定数だと見破って定数伝搬最適化かければいいんでしょうけど、だったらこういう例は・・・
(define x (read))
(define foo (if x (lambda () 1) (lambda () 2)))
read が行われるのは当然実行時だから、それまで foo は定まらない → コンパイル時には展開できない → 実行時に展開ということになるのですけれど、理解あってます?
0783デフォルトの名無しさん
NGNG;; 間違ってるかもしれないのであまり信用しないでちょ…
実際に実行してみましたか?この場合 bar は引数を 1個要求するのでは?
で、compile のできる処理系では多分 compile 時に macro 展開しますが、
(bar #f) ;; とか書いてあるところを
(foo) ;; という形に書き替えるだけなので、
その時点で foo が定義されていようといまいと問答無用に展開するのではな
いでしょうか?
0784782
NGNGあー、うー、ええと、ご指摘通り、実際には実行してみてません。間違ってるかも。
手元に define-macro の使える処理系がちょっと無くて・・・gaucheなら使える?入れてみよかな・・・
あのコードはその場の思いつきで書いたので適当です。言いたいことが伝われば。
自作の処理系に実装するのに、どういう形にするのがいいかなと考えてるです(まぁコンパイルといってもバイトコードです)。
・・・今思い付いた。Lisp の defmacro も調べてみよ。
0785デフォルトの名無しさん
NGNG実はそれがdefine-macroの暗黒面なのです。
コンパイルパスと実行パスが分離している場合、macro transformer内からは
実行時の束縛を参照してはいけないのです。
しかし、トップレベルフォームを逐次実行してゆく実装のインタプリタなら、
コンパイラがそのマクロを展開する時点で既に定義されている実行時束縛が
参照できてしまうので、782のような例は通ります (展開は、マクロ呼び出し
barを含むフォームがコンパイルされるときに一回だけ行われます)。
R5RSのsyntax-rulesはそういうこと(コンパイル時評価と実行時評価の混合)
ができないようになってるんで、そういう意味では「正しい」のですが、
その制限がきつすぎると感じる時もあります。
インタプリタでの動作とコンパイル時の動作を合わせることに心血を注いだ
CommonLispでは、eval-whenフォームを使ってどのフェーズでフォームが
実行されるか明示するのが普通ですかね。
Scheme界ではこの問題はもう20年くらい議論してて決着がついていない
んじゃないでしょうか。(だから標準のモジュールシステムが決まらない…)
今度のICFPでもそのへんを扱った論文が出ます。
http://www.cs.utah.edu/plt/publications/macromod.pdf
0786お願いします
NGNG微分のプログラムを考えているのですが、全然分かりません。
<内容>
3x^2+2x+1を '(1 2 3)と入力して、
答えの 6x+2を (2 6)
と出力したいのです。
Schemeを勉強し始めたのは良いのですが、
微分について考えろといわれ、わけがわからなくなってしまいました。
フィボナッチとか、ハノイの塔は理解できたのですが・・・。
くだらない質問ですみません。参考にしたいのでソースを下さい・・・。
0787デフォルトの名無しさん
NGNG0788786
NGNG探しているんですが、全然見つかりません。
微分って「Differentiation」で良いですよね?
0789デフォルトの名無しさん
NGNGSICP2.3.2か?日本語版だと簡単に索引から見つかったが。
SICPと違う入力形式を望んでいるようだが、その入力形式だと
carの 1 を見てもそれが係数が 1 であることしか分からず、
本当に知りたい ^2 の部分の情報はリストの終端まで見て長さを知るまで
分からないのでややこしいのでは?
入力仕様を変えるか、入力はそのままで内部で '((1 2) (2 1) (3 0)) などに
変換しておくかした方がいいのでは。
0790デフォルトの名無しさん
NGNG'(1 3 5 7 11)→'(3 10 21 44)睨めばすぐわかるだろ?
0791 デフォルトの名無しさん
NGNGCommon Lispでよければ。
(defun differential (x)
(nreverse (maplist #'(lambda (x) (* (car x) (length x))) (reverse (cdr x)))))
0792789
NGNG0793786
NGNG先ほどから考えてはいるのですが、中々解決しません。
ですが、SICPなどで調べながら、何とかやってみます。
>>790
微分の問題などは苦手ですが、
一応、概念は分かっているので何とかなると思います。
>>789
入力形式も変えてやってみたいと思います。確かに不便そうなので・・・。
>>791 ありがとうございます。参考にさせていただきます。
0794786
NGNG「SICP2.3.2」の例題をを実行したいのですが、
(deriv exp var)にどのように入力すれば実行できるのでしょうか?
0795デフォルトの名無しさん
NGNGちゃんと逆順になってるよ。
0796デフォルトの名無しさん
NGNG宿題スレじゃね─ぞ! (゚Д゚)ゴルァ
0797デフォルトの名無しさん
NGNG(deriv '(* x y) 'x)
とか。
# 英語版辛そう。がんがってください
>>795 >>792
0798786
NGNGいや、それが書いてある通りに(deriv '(* x y) 'x)
とか入力しても、動かないんです。
reference to undefined identifier: variable?
と言われます。
DrSchemeを使ってるんですが・・・。
0800デフォルトの名無しさん
NGNG思って答えてるが、このレベルの質問はこれで最後ね。
典型的な 教えて君 的質問をされたので。
だから、2.3.2を全部読んでから来てくれ。SICPってそういう本なの。
いわゆるトップダウン方式の開発だから、下位の手続きが実装されるまで
実行できません。
> reference to undefined identifier: variable?
これも読めないのに英語版読むとは。日本語版買ったら?
defineされてない識別子 variable? への参照がある、って意味ね。
0801786
NGNGすみません。出直してきます。
ありがとうございました。
0802デフォルトの名無しさん
NGNGだれか末尾再帰になおして。
(define (deriv f)
(define (loop f n)
(cond ((null? f) '())
((= n 0) (loop (cdr f) 1))
(else (cons (* (car f) n) (loop (cdr f) (+ n 1))))))
(loop f 0))
> (deriv '(1 2 3))
(2 6)
0803デフォルトの名無しさん
NGNGホレ
(define (deriv f)
(define (loop f n r)
(cond ((null? f) (reverse r))
((= n 0) (loop (cdr f) 1 r))
(else (loop (cdr f) (+ n 1) (cons (* (car f) n) r)))))
(loop f 0 '()))
これぐらい自分でできる様になれよ
ちなみにおれは5秒で変換できた。
0804デフォルトの名無しさん
NGNGまあ、自慢にはならないか。(/・ω・\)ショボーン
0805デフォルトの名無しさん
NGNG宇宙刑事の蒸着並。
0806デフォルトの名無しさん
NGNG0807802
NGNG0808デフォルトの名無しさん
NGNGそう落ちこむな。
末尾再帰変換はある程度パターンがあるから
そのうち一条寺烈にもなれるよ。
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNGここの一番下参照。
0811scheme 小僧
NGNG意図が分かりにくくなるように感じて
自動的にやってくれないかなあと思うことがあります。
そんなことないですか?
0812802
NGNG(define (deriv f)
(let loop ((f (cdr f)) (r '()))
(cond ((null? f) (reverse r))
(else (loop (map (lambda (x) (+ x x)) (cdr f))
(cons (car f) r))))))
0813デフォルトの名無しさん
NGNG微分になってないよ。
(define (deriv f)
(do ((f (cdr f) (cdr f))
(g (cdr f) (cdr (map + f g)))
(r '() (cons (car g) r)))
((null? f) (reverse r))))
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNG>>814
一般常識としては理解する必要あります。
0817デフォルトの名無しさん
NGNGいや、当方shcmeってあんまり何か知らないんですが。そもそも関数型言語って
なにか知らないから。f(x)みたいなことですか?関数型言語って
0818デフォルトの名無しさん
NGNG多分君には一生縁の無い言語
0819デフォルトの名無しさん
NGNG「f(x)みたいなこと」とは何を指してるのか?
0820デフォルトの名無しさん
NGNGまあそういうなや。>>817 は工房とかかもしれんし。
手続き型言語を教える前に関数型言語を教えろって話もあるくらいだし……。
だけど、厨房工房(あるいは文系)向きのscheme入門書ってあるかな?
複素数や関数を例題として使ったりしないヤツ。
そういうのは関数型の魅力が伝わらないから難しいかな。
0821デフォルトの名無しさん
NGNG現在、おそらく初心者のだれもがつまづく(それとも俺だけ?)
「評価」を勉強中。
リストのボックス表記ってぱずるみたいでおもろいです。
0822デフォルトの名無しさん
NGNGやる気と普通の脳味噌があればできる。
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNGそれがどうした?
0825デフォルトの名無しさん
NGNG入門書としていいのはscheme手習いでしょうね。ってもう絶版?
リスト遊びはどうかな。elispだけど。
0826デフォルトの名無しさん
NGNG>>820の「まあそういうなや。>>817 は工房とかかもしれんし」
に対する返答ではないかと思われーの。
0827デフォルトの名無しさん
NGNGつーかさ、そう言うときは図書館利用しろよ。
入門書ならなおさら。絶版でも結構置いてあるよ。
0828デフォルトの名無しさん
NGNGComputer Science Curriculum"
http://people.cs.uchicago.edu/~robby/publications/papers/htdp-sicp-fdpe2002.pdf
で、
コンピュータサイエンスの入門書としては
SICPより How to Design Programs の方が
優れていると主張しているけど、
How to Design Programs を読んだって言う話自体を聞かない。
オンラインで読めるのに。
0829デフォルトの名無しさん
NGNGSICPはどこまで読んだかわからなくなったし。
0830デフォルトの名無しさん
NGNGこれ使ってる人いる?
0831デフォルトの名無しさん
NGNGソレ16ページしかないよぉ。
全部は読めないの?
0832821
NGNG現在、森北出版の「Schemeによる記号処理入門」にて勉強しておるのですが、
p39のスタックの説明でつまずいております。
ぽっぷの説明で、
(define (pop)
(cond ((null? *stack*) 'empty)
(else ((lambda (x) (set! x (car *stack*))
(set! *stack* (cdr *stack*))
x) '() ))))
これで変数 x がunboundであるというErrorがでます。
(CheSchemeを使用)
確かに、xは未定義ですよね。
みなさんだったらどのようにpopの実現をおこないます?
0833デフォルトの名無しさん
NGNGやりたい事が良く分かんないけど…こんな感じ?
(define (pop)
(if (null? *stack*) 'empty
(let ((x (car *stack*)))
(set! *stack* (cdr *stack*))
x)))
0834デフォルトの名無しさん
NGNG局所変数はset!で変えられないの?
(define (pop)
(if (null? *stack*) 'empty
((lambda (x) (set! *stack* (cdr x)) (car x)) *stack*)))
0835834
NGNG(define (pop)
(let ((x *stack*))
(cond ((null? x) 'empty)
(else (set! *stack* (cdr x)) (car x)))))
0836821
NGNG834さん、これだと思うとおりにうごきました。ありがとうございます。
>832でもいいように思うけど・・・
それがErrorがでるんですよ、SCMでもためしてみたんですが...
833さん、および834さんの835での回答ですが、
Letはまだ学習していない項目ですので、
そこをみてからためさせていただきます。
とりあえず先に礼をいいます。ありがとうございました。
0838821
NGNGだとしたら、おお騒がせのおおばかもんか?おれ。
0839デフォルトの名無しさん
NGNGあ、でも綴りが違う。
0840デフォルトの名無しさん
NGNGconstructから。
Cf. John McCarthy: "History of Lisp", Feb. 1979.
http://www-formal.stanford.edu/jmc/history/lisp/lisp.html
0841デフォルトの名無しさん
NGNGHow to design programsを読むなら、
http://www.htdp.org/
から。
>>828
のは、論文か何か。内容は、
SICPは、色々な問題、プログラム、概念について書いてあるけど、
問題に対してどのようにプログラムを作っていけば良いのかについては
書かれていない。
SICPで扱われている問題の多くは数学や工学の特定の領域の知識が必要なので、
初学者はプログラムの事より数学とかの部分に時間を使わなければならない。
で、プログラムの問題と特定領域の知識の話をごっちゃにしてしまう。
みたいな感じかな。
0842デフォルトの名無しさん
NGNGそこがSICPの面白いところだと思うが、それが邪魔なことも確かにあるわな。
"How to design programs"もよく出来てるな〜。
0843839
NGNGありがとうございました。
0844デフォルトの名無しさん
NGNG例えばコマンドラインから-eで引数文字列を評価することにして、
lisp.exe -e "((lambda 〜)....)" < hoge.txt
とかさ
できなくはないんだろうけど、括弧とキーワードだけでかなり取られるし
0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNGone linerが書き易い言語は、規模の大きなプログラミングには
向かない傾向があるんじゃないだろうか。AwkとかPerlとか。
0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNGstring-refとか良く使いそうなのまで長いよ。
だれか短い名前考えて
0849デフォルトの名無しさん
NGNG(define strlen string-length)
(define strcat string-append)
こんなんでどう?
0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNG0852848
NGNGC言語かよ!
でもいいねそれ。
>>850
srじゃわけわかんねえよ
だいいちstring-set!はどすんだよ・・・ss!かよ!
strref
strset!
・・・も、いいやこれで。
>>851
補完つっても、区別できるまでの入力は必要でしょ?
長い名前は生産性を落としてる気がするのよ。
↓他に考えた名前。
with-input-from-file -> wiff
with-output-to-file -> wotf
substring -> substr
lambda -> la
define -> de
define-macro -> dm
0853848
NGNG↓他に考えた名前。
with-input-from-file -> wiff
with-output-to-file -> wotf
substring -> substr
lambda -> la
define -> de
define-macro -> dm
0854848
NGNGbegin -> seq
display -> disp
newline -> eol
write-char -> putc
read-char -> getc
(display ...)(newline) -> (puts ...)
(la()...) -> (la0 ...)
0855デフォルトの名無しさん
NGNGArc の登場を待つ
http://www.paulgraham.com/arcll1.html
> ("hello" 2)
\l
0856848
NGNGchar=? -> ch=
char-ci=? -> ci=
integer->char -> i2c
list->string -> l2s
number->string -> n2s
いちいち矢印書くのはめんどい。
ネタ切れ。
0857848
NGNGそれね、実際やるとバグだかなんなんだか
わかんなくなるよ。(eval改造して実験済み)
0858848
NGNG単純に名前置き換えしただけだと、
あとでre-defineされたときに別扱いになってしまうので
そういう可能性のある関数名は次のマクロで別名定義する。
(SLIBのtranscriptなどは入出力系関数の上書きを行う為)
(dm (alias . l)
`(de (,(car l) . args) (apply ,(cadr l) args)))
(alias disp display) ; -> (de disp(la args(apply display args)))と同じ
(alias eol newline)
(alias getc read-char)
(alias putc write-char)
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNGええとね・・・いい加減、暗号じみてるから、やめたほうが・・・・
la とか de とか dm とか意味わからん。
0861デフォルトの名無しさん
NGNGtoplevel で define するんじゃなくて、 local に置き換えた方が便利そう。
名前がどんどん長くなってくのは、文脈とかの概念が使えないからだと思うし…
全体でやられると、本当に暗号になるからね…
名前空間が、もっと色々いじれたらいいんだけど…
0862デフォルトの名無しさん
NGNG昔懐かしウィルオ・リスプはde,dmだったよ。たしか。
0863デフォルトの名無しさん
NGNGそんでTECOでLispの処理系とかかいてください
0864デフォルトの名無しさん
NGNGもしかして君職業キーパンチャー?
0865デフォルトの名無しさん
NGNG記号をいっぱい増やして重ねうちとかできるようにすれば....
0866デフォルトの名無しさん
NGNG使ってる人います?
0867デフォルトの名無しさん
NGNG0868848
NGNG0869デフォルトの名無しさん
NGNGそれなり
0870デフォルトの名無しさん
NGNGマジですか!!
会社でも買えないっすよ。
そりゃLISPが広まらないわけだ・・・
0871デフォルトの名無しさん
NGNG(if (>= お値段 7桁中程) '広まらない
(begin (広める 隣の人 Lisp)
(広める (- たくさんの人 隣の人) Lisp))))
0872デフォルトの名無しさん
NGNG0873scheme 小僧
NGNGvirtual host の設定しくってるみたいだね。
http://www.schemers.org/www.schemers.org/ ってやると
いつものがでてきます。
エラーも混じってるけど。
0874デフォルトの名無しさん
NGNG括弧の対応関係を表示できるエディタって、'#\('みたいなエスケープされた物
もちゃんと考慮されるんでしょうか?
0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNG0877デフォルトの名無しさん
NGNGxyzzy0.2.2.227のLispモードは考慮してくれますた。
gvim(vim6.1.41)のは不完全ですた。
色はちゃんと付けてくれるものの、
対応する括弧へのカーソル移動の挙動が不審ですた。
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNGhttp://www.flownet.com/gat/papers/lisp-java.pdf
0881デフォルトの名無しさん
NGNG登録されない時ってどうすればいい?
0882デフォルトの名無しさん
NGNGinstall-info(1)でどう?
0883デフォルトの名無しさん
NGNG結構有名な処理系(Guileも)なのに多少無茶なリストを読ませると
ガベコレの段階で落ちるっぽいね。これはソースからの推測だけど、
スタックオーバーフローを起こす可能性が残ってる。
スタックレスなgc作るのって大変かな?
0884非似lisper
NGNGスタックレスにするのはそんなに難しくないよ。
昔、仕事用にスタックレスなgc作った。
ヒープ側のメモリ枯渇以外では止まることは無いと思う・・・多分。
組みこみ用途の全天候型lispなんで、ハード的なスタックはほとんど使わない作り。
gc時にメモリ消費するのは多少ナンセンスなんで、その辺どうするか迷ったね・・・。
0885デフォルトの名無しさん
NGNG「2」を出したいんですが。
-------------------------------------------
(define s "(1 2 3 4 5))
(define l (文字列をリストにする s))
(cadr l) => 2
-------------------------------------------
(string->list)だと、ひと文字づつのリストになるんですね。Gauche
を使ってます。
0886デフォルトの名無しさん
NGNG文字列は文字の列だから、listにすれば文字のリストになるのが
自然だわな。
入力が常に「数値のリストの文字列表現」であると想定できるなら
(define l (read-from-string "(1 2 3 4 5)"))
(cadr l) => 2
0887デフォルトの名無しさん
NGNGありがとう!
(read-from-string)、完璧です。
0888848
NGNG(de(read-from-string s)(wifs s(read)))
;with-input-from-string --> wifs
(read-from-string s)よりも、(wifs s(read))の方が短い。
わかるか?
0889848
NGNGすまん。
0890848
NGNG(dm (wifs s . body)
`(with-input-from-string ,s(la0 ,@body)))
0891デフォルトの名無しさん
NGNG*** ERROR: unbound variable: s
Stack Trace:
_______________________________________
0 (read-from-string s)
At line 1 of "(stdin)"
gosh> (dm (wifs s . body) `(with-input-from-string ,s(la0 ,@body)))
*** ERROR: unbound variable: s
Stack Trace:
_______________________________________
0 (wifs s . body)
At line 4 of "(stdin)"
0892デフォルトの名無しさん
NGNGdeとdmは定義した?
0893デフォルトの名無しさん
NGNG> (read-from-string s)よりも、(wifs s(read))の方が短い。
(rfs s)の方が短い。
わかるか?
あ、感じ(略
0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNG=>16
>(sizeof 'RECT 'left)
=>4
>(typeof 'RECT)
=>(RECT (LONG left) (LONG top) (LONG right) (LONG bottom))
>(typeof 'RECT 'left)
=>(LONG 4)
>(offsetof 'RECT 'top)
=>4
こういうのあったら便利だと思うけど、どう?
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGrectangle (長方形)
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNGそれはいいとしても名前が意味不明。長さを示すのか座標を示すのか分からない。
お望みのコードを書いてやろうとして詰まった(藁
;;↓SICPっぽいかな?
;(rect-S '(2 4 8 7))とかやると(2,4)と(8,7)を頂点とする長方形の面積が出ます
(define rect-x1 car)
(define rect-y1 cadr)
(define rect-x2 caddr)
(define rect-y2 cadddr)
(define (rect-width rect)
(- (rect-x2 rect) (rect-x1 rect)))
(define (rect-height rect)
(- (rect-y2 rect) (rect-y1 rect)))
(define (rect-S rect)
(* (rect-width rect) (rect-height rect)))
0901 デフォルトの名無しさん
NGNGネタ? どうやったらそんな勘違いができるのか・・・
どう見たって>>896は構造体の情報を得るものだろ。
0902デフォルトの名無しさん
NGNG>>900 のも構造体だと思うけど…
ああいう実装じゃ嫌なの?
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG趣味:2ch 特技:煽り
ですか? ちょっとCを知ってるからって何をやってるんだか。
>>902
バイナリファイルやAPIとのアクセスがスムーズなものが欲しいんじゃないかな。
自分も欲しいので考えているんだが・・・・・・はて?
0905デフォルトの名無しさん
NGNGどうしたらいいんでしょうか。
(hash-set! ハッシュ名 キー 値)
(hash-get ハッシュ名 キー)
リストやベクタを使ったオブジェクトは思いつくんですが、
要素数に制限が無く、常に良いオーダでアクセスできるものは
簡単に作れるのでしょうか。
0906デフォルトの名無しさん
NGNGschemeの文字列(というかmemory型)でboxing/unboxingみたいなこと
やってるんで、ああいう型データベースみたいなの作ったら
便利じゃないかなー、と思ったわけです。
なんで、>>900さんの提示されたのとは目的がちょっと違います。
今アクセサとミューテタも自動で作れないかなーと考えております。
0907デフォルトの名無しさん
NGNGシンボルのhash値を取れる処理系ならhash表は用意されてる筈だし、
vectorとlistを組み合わせればチェイン法のhash表ぐらいは
簡単に作れると思いますけど。
常に良いオーダーでアクセスしたいなら、一定数超えた時点で
表を拡張してrehashするしかないと思いますよ。
0908デフォルトの名無しさん
NGNGslibにSchemeオンリーの実装がなかったっけ。
0909デフォルトの名無しさん
NGNG(define (sizeof . types) ...) ;型のサイズを返す
(define (typeof . types) ...) ;型の構造を返す
(define (offsetof . types) ...) ;型メンバまでのオフセットを返す
みたいな関数を考えています。typesには型名、メンバ名のリストが入ります。
バウンダリなどの計算は関数内で行います。
型を記述したa-listなテーブルをグローバルに置いて、
これを参照/拡張していきます。
(define *types*
'((LONG 4)
(RECT (LONG left)(LONG top)(LONG right)(LONG bottom))))
今のところ配列の良い表記が思いつきません。
(WIN32_FIND_DATAとかLOGFONTなど)
>>904
>バイナリファイルやAPIとのアクセスがスムーズなものが欲しいんじゃないかな。
まさにその事です。
0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNG次スレです。
LISP Scheme Part6
http://pc3.2ch.net/test/read.cgi/tech/1031560687/
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNGとりあえず、Common Lispの型を調べてみれ
型名とシンボル、型指定子、配列、and/orが良い立脚点になると思われ。
CLtL, Common Lisp the Language, 2nd Edition
4. Type Specifiers
それに、
2.15. Overlap, Inclusion, and Disjointness of Types
19. Structures
8.1.4. Integrating Types and Classes
もね〜。
> 型を記述したa-listなテーブルをグローバルに置いて、
型オブジェクトを作るのがすっきりすると思うがの〜。
0916デフォルトの名無しさん
NGNGJavaとか載っけるやつもいるんだから Lispのっててもいいじゃねえか!
とうちの会社のやつを洗脳したい気分。
でもどんなかんじの仕事? そんなに時間制約が厳しいのじゃないよね..
0917デフォルトの名無しさん
NGNG息巻いてたScottさん、あれから元気にされてますか?
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG0921921
NGNG0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNGMove 2 from a to b !
Move 1 from c to b !
Move 3 from a to c !
Move 1 from b to a !
Move 2 from b to c !
Move 1 from a to c !
Move 4 from a to b !
Move 1 from c to b !
Move 2 from c to a !
Move 1 from b to a !
Move 3 from c to b !
Move 1 from a to c !
Move 2 from a to b !
Move 1 from c to b !
0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNG0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNGPert 6へ
==============================================
0943デフォルトの名無しさん
NGNGLISP Scheme Part6
http://pc3.2ch.net/test/read.cgi/tech/1040372403/l50
0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNGそろそろ次々スレ
0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNGもう2ちゃんねるは疑似匿名掲示板です。
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGあるネット関連会社の社長は、
「いずれにしても2ちゃんねるは資金が底をつけば終わり。
あまり知られていないことだが、2ちゃんねる内部関係者によると今、
大手通信会社系が調査費名目で資金提供している。
だが、それが止まれば続けてはいけないだろう」
と証言する。
2ちゃんねるが判決によって力を失った場合、
資金提供の打ち切りも予想される。
http://ascii24.com/news/reading/causebooks/2002/07/01/636911-000.html
0951デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0952デフォルトの名無しさん
NGNG素で選びましたが
な に
か?
0953デフォルトの名無しさん
NGNGモーヲタは(・∀・)カエレ!!
0954デフォルトの名無しさん
NGNG罠ですよ〜 罠(´Д⊂)
0955デフォルトの名無しさん
NGNG>>566
0956デフォルトの名無しさん
NGNG暇つぶしに役立ってるけど。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNG言 い た い こ と も 言 え な い
こ ん な イ ン タ ー ネ ッ ト じ ゃ
0959デフォルトの名無しさん
NGNGマジすか。
仕事始めいってきます。
0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG俺は言う!
俺 は 無 職 で 童 貞 だ
0963デフォルトの名無しさん
NGNGhttp://dailynews.yahoo.co.jp/fc/computer/2channel/
0964デフォルトの名無しさん
NGNGIPの記録が抑止にもなるなら、削除系の板のリモホ表示をやめて
みるのはどうでしょう。
依頼者のホストを削除板以外の板に晒されることもないでしょうし。
0965デフォルトの名無しさん
NGNGもう遅いし去るけど
「全然君達」わかってないね。
本当にわかっていないね。公安の中にスパイがいて話を聞いてるとは思えん(おき楽すぎて)
シャレにならない件とかあるから
管理人氏 色々と ログ等協議を願います。
キャッシュ、か。現金(謎
つーかもういいよ
何故か俺自身理解出来てないけど 本当に何故か皆さんが
ぼくを変に気になっている訳だろ。場合によっては天下の大マスコミ様までが。
以前から云ってる通り「早く」カタギしないとまずい。出来たら話だけ聞いて下さい
0966デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGそういう祭りキボンヌ
0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGこれだけ一般化しちゃうと問題ではなくなるのかもな
アングラな雰囲気は無くなったし、普通に利用する分にはIP記録されても困らん
0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNGhttp://www.nikaidou.com/diary/index.html
http://www2.diary.ne.jp/user/166292/
http://www.nikaidou.com/bunko/2ch/01.html
0973デフォルトの名無しさん
NGNG全レスです。
0974デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNGhttp://school2.2ch.net/test/read.cgi/kouri/1041636818/
0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG今のうちにエロ画像デリートしよう・・・
冷蔵庫のプリン食べよう。
もう、思い残す事は、ない・・・
0978デフォルトの名無しさん
NGNG逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNGそろそろ スルーして良いか?
お前ら("まともな2ちゃんのみんな"だっけ?)が
世界を制覇するのを楽しみにしてるよ!がんばってくれ!!
0981山崎渉
NGNG0982デフォルトの名無しさん
NGNGレス数が950を超えています。1000を超えると書き込みができなくなります。