1 :
デフォルトの名無しさん :
2007/04/20(金) 19:41:39
2 :
デフォルトの名無しさん :2007/04/20(金) 19:42:35
3 :
デフォルトの名無しさん :2007/04/20(金) 19:43:22
4 :
デフォルトの名無しさん :2007/04/20(金) 19:44:10
5 :
デフォルトの名無しさん :2007/04/20(金) 19:44:55
6 :
デフォルトの名無しさん :2007/04/20(金) 19:45:43
7 :
デフォルトの名無しさん :2007/04/20(金) 19:48:26
8 :
デフォルトの名無しさん :2007/04/20(金) 19:49:13
9 :
デフォルトの名無しさん :2007/04/20(金) 19:50:01
10 :
デフォルトの名無しさん :2007/04/20(金) 19:50:49
11 :
デフォルトの名無しさん :2007/04/20(金) 19:51:39
12 :
デフォルトの名無しさん :2007/04/20(金) 19:54:05
13 :
デフォルトの名無しさん :2007/04/20(金) 19:55:35
14 :
デフォルトの名無しさん :2007/04/20(金) 19:57:17
> (endp 'テンプレ) t とりあえず前スレのまま、貼ったけど多いなw まとめサイトとか欲しくなった。。。
17 :
デフォルトの名無しさん :2007/04/20(金) 21:52:25
LispUser.net (よろずや?)
http://lispuser.net/ SLIME などの Common Lisp 系の日本語ドキュメントがある。
前スレ 40 より。SBCL の日本語情報もあるみたいよ。
それにしてもポール・グレアムがlispで書かれていたとはね。 知らんかった。
>>21 まじすか?
ポール"人工知能"グレアムのソースコード見たい。
オープンにはなってないのかな。
scheme での質問です。 '((1 2 3) (4 5 6) (7 8 9)) => '((1 4 7) (2 5 8) (3 6 9)) とするのに、map を使って再帰や do で書けたんですが、 reverse を fold を使ってもできるように、 1行程度で簡潔に書く技はありますか?
(apply map list '((1 2 3) (4 5 6) (7 8 9))) => ((1 4 7) (2 5 8) (3 6 9)) てこと?
>>24 そうです。ありがとうございます。apply ってこうやって使うんですか。
まだ全然わかってませんがおもしろいですね。もっと頑張ってみます。
amazon の On Lisp の高騰振りはなんなんだ? なんか転売屋の目に付くような事あったのかな。 売れっぷりのよさ? 2刷早くだしちゃいなよw
>>26 ほんとぼったくり連中の餌になってるね。
近くでまだ一冊売ってるんだがね。
>>27 タダで読めるんだって知らない人大杉だよね。
;;紙媒体の方が読みやすいのは確かだけどさ。
酷い罠だ
ほんとだ、本文検索じゃん モリタポ返せ!
失敬。
モリタポって知らないけど、それでスレッド調べられたから載せたけど
悪意があったのではないです。
>>32 死ぬ気はありませんのであしからず。
>>33 そうだよな
お前の場合もう社会的生命は終わってるしな
あっさり切り替えされたんで必死で一捻り加えてきたw
というか普通にスレ載せた方がいいだろ
>>38 意図がわからなかったようだな。スレが進行中にデットリンクや新たなスレが
出来た時を考えてる。今だけを見ていればスレを載せればいい事だ。
竜頭蛇尾
関連スレなんて、見る奴は自分で検索して見るし、見ない奴はまったく見ない。 その時点での現行スレへのリンクもいらないよ。
スレタイ検索だと糞スレも普通にひっかかるし 関連スレも進みが遅いし現状でいいでしょ・・・ そもそも、なんでスレの序盤でテンプレの話してるんだよw
最近このスレ、括弧が滅多に書かれなくなったな
>>43 :-))))))))))))))))))
_, ._ ( ・ω・) ○={=}〇, |:::::::::\, ', ´ .)).))し ))`(.@)..)))))))))
((((((((なんで閉じ括弧ばかりなんだよ...))))))))
>>47 【審議中】
ヒソヒソ ヒソヒソ
∧,,∧ ∧,,∧ ヒソヒソ
∧ (´・ω・) (・ω・`) ∧∧
ヒソヒソ ( ´・ω) U) ( つと ノ(ω・` ) ヒソヒソ
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
括弧が逆だと激しく読みにくいな )if )good-smell? omeko( )erect( )puke((
>>49 "全く気にならない!" と,
言いたいんだけど, 字面の座りが悪い.
つか, " ')if ってシンボルあったっけ?" て,
思った
44 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 45 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 46 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 47 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 48 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 49 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 50 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん 51 名前: あぼ〜ん [あぼ〜ん] 投稿日: あぼ〜ん あぼ〜ん
ところでIRCのwide系にある#scheme-jpチャンネルがいつも寂しすぎるんだけど、 次あたりからテンプレに入れね?
次のようなリストがあるとして、 '("April 2007" ("Su" "Mo" "Tu" "We" "Th" "Fr" "Sa") (1 2 3 4 5 6 7) (8 9 10 11 12 13 14) (15 16 17 18 19 20 21) (22 23 24 25 26 27 28) (29 30 #f #f #f #f #f)) 再帰を使って下のように整形して出力するにはどうすればよいですか? April 2007 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
リストだったらfor-eachで再帰
すみません。for-eachならできたのですが、 こういう処理は再帰(named let とか)ではやらないのでしょうか?
もちろん再帰でやってもいいけど、その再帰が何を表しているのかは ちゃんと読まないとわからない。 for-eachなら名前を見ただけで一発じゃない? for-eachも中身は再帰で書いてあると思いねえ (実際はCのfor文で書いてあるかも知れないが)。 だから再帰で繰り返しするなら、できればその一般的な構造を取り出して 汎用化し、名前をつけるのがいい。これが抽象化。 ……もしかして宿題だったとか。
59 :
デフォルトの名無しさん :2007/04/28(土) 13:54:07
On Lisp 2刷記念age
転売屋脂肪
2刷って図のコードが本文のコードをぶった切ってるのって直ってるの?
版がかわらないと中身は同じなんじゃね?
なにそれ? どこの部分? 俺、Lisp さっぱり知らない癖に Lisp の勉強用にこれ読み始めたところだから 知らずにその部分を読んだら、ちょっと錯乱しちゃうかも。
>>63 31-32とか74-75とか。
74-75は悩んだな。
「この最後の or は意味ないだろ・・・」って思ってたら次のページに続きがあった。
なんでお前の手伝いをせにゃならんの? 馬鹿は休み休み言え
休み休み言ってる気が・・・
GW馬鹿……
>うーん,本文のコード内で改ページがあるのは読み辛かったですか... すいません. いや、コード中に改ページがくること自体は全然許容範囲。 問題はその改ページの仕方。1行だけ次のページに来て しかもその間に別のコード(図のコード)がくるのはちと辛い。
>>67 不満の指摘=手伝い、とか、「せにゃならん」とか、ココロのビョーキか君はw
ま、こんなところで呼びかけるのは間違ってると思うがな。 変なのに絡まれる前に撤退したほうが吉。
また荒しか
デバッグしたいんなら自分のブログでやればいいのに なんでここでやるかな 頭悪そう
一つききたい事がある。国内のlisp関連のMLはどこにある? gaucheだけ?
>>66 もう買ってしまったが、別にそのくらい気にしないお。
満足満足。PC の電源入れなくても読めるのイイ。
著者のブログってどこだっけ? アフィリンク踏んでやるからURLヨロ
slibとかrhizomeにsyntax-object->datumはあるのに何で逆のdatum->syntax-objectは無いのかな?
sbottって?
for-eachってeachでも良くないですか? 何でfor-が付いてるでしょうか? 徒にインデントが深くなりませんか?
mix-in 最高!
mix-inもごちゃごちゃしそうな感じだが
>>82 やっぱりjavaだけやってちゃ駄目だねぇ。視野狭すぎ。
lispだけじゃないけど色々勉強するのはホント大事だな。
ま、Rubyぐらいは常識だな。
>>82 話の本題はさておいて、
なかなか親近感の沸く議論態度wだと思った。
この人組込用JavaVM開発してた人でしょ?
mix-inのメリットとかの性を認識しつつ、
指示語途上、多重継承を否定する立場に居たのだろうと思った。
かの性 orz 可能性 (・∀・)
指示語途上 → 仕事上 欝出汁脳
>>82 1レス目 『それを理解する能力さえない技術者が困り者。』
2レス目 『とまあ,かのように,パラダイムシフトについてこれない技術者というのはいるものです.』
3レス目 『まあ結局この「とおりすがりA」さんは,プログラミングのことがまるで解ってないだけでしょう.』
4レス目 『なんでも人に教えてもらおうとせず,少しは自分で勉強しないと,脳味噌が退化しますよ.』
5レス目 『おそらくその調子だとコンポジションのイロハも分からずに乱用しただけなのでは.』
6レス目 見下す発言なし
7レス目 『少しは勉強して下さい.』
多重継承をけなしている人の問題点は、Java以外を知らない事ではないと思います。
「自分と他人の意見が異なるのは他人が劣っているからだ」と決め付けている事が問題点です。
その姿勢を変えない限り、いくら知識があっても不毛な罵倒合戦になるだけです。
議論のアンチパターン
http://www.shos.info/develop/oo/dscsnptn.html#chapter4
他人の日記のコメント欄に上がりこんで 突っ込んだ議論をするのはちょっとアレな感じがする。 そういうのは自分の日記に書いてトラバするのがマナー。
>>92 > 他人の日記のコメント欄に上がりこんで
はてなじゃそれがマナーだよ
マジで
94 :
88 :2007/05/02(水) 13:48:59
前言撤回。なんつか2ちゃんクオリティなblogだな
>>91 自分で「辛口」と称する人はだいたいそんな感じだよ。
自己愛の超過と説明能力の欠如が生みだす溝や不快感を、
あくまでスタイルだと言い張って自己肯定するときにこの単語が使われる。
なかなかこう、鋭い指摘をミもフタも無く書くから結果辛口になる、という「まともな」人材は居ないです。
ふーん、そういうものなのですか。 日記という形式は、正しい事だけを書いたり、 正しい結論を得るために議論をする場ではなくて、 妥協の産物でしかない現状の自分と、 他人が見たらちょっと恥ずかしい感じがする理想の自分との 矛盾に引き裂かれながらのた打ち回る、そんな形式なのだと思ってたw 公開日記だから、あまり大人気ない対応をすると笑われるでしょうけどねw
他人が辛口とか毒舌とか感じるサイト・ブログならそうかもね。 でも自称辛口とか、自称毒舌とかいうトコだと、そういうのは期待しにくいかな。経験的にいって。 たいてい余裕が無い。
多重継承自体は悪でもなんでもなくて衝突の回避の仕方さえちゃんとルールになっていればそれはそれで便利に使えるのにねぇ いろんなオブジェクトシステムがそれぞれその違った形で解決しているんだけど(mix-inも)この人は多重継承といったらC++しか無いみたい 個人的にはC++の多重継承だって使いどころさえ掴めば十分武器になると思うしここまでボロクソにいうものかと思うんだけど そういえばインターフェースによる解決って作った本人が後に失敗したって漏らしたとか聞いた事あるな まあ本当かどうかわからないけど
どの言語の話?(一応確認)
相変わらずオブジェクト指向命、GoF最高な感じがプンプン漂ってくるんだけどw 言っている事レベル低いし
Lisp に関係ない Java 屋の話はどうでもいいよ。Java 関連のスレでやってくれ。
On List の p16 の最初の文章「Lisp プログラムでは...」の"ム"が異様にデカい。
>>85 これって動画録って流したりしないんですかね
オブジェクト指向とか多重継承とか、結局糞だということを証明したという意味で CLOS は評価されるべきだな。
CLOSは引数の数を合わせなきゃならなかったり使いづらいよ それにメソッドはオブジェクトに属している方が楽だし
適材適所だから、多重継承が最善である場面もある。 一神教的に自分の信奉している考え方以外邪道だという難儀な奴が最近多い。
そもそも「オブジェクト指向」なんて素人受けするようなキャッチフレーズが諸悪の根源だと思う。 所詮、オブジェクト指向なんてコーディングテクニックの一つに過ぎない。 それも、80 年代の香りプンプンの…
オブジェクト指向って言葉ってsmalltalkの時から無かったっけ?
もっと前からある
111 :
デフォルトの名無しさん :2007/05/02(水) 22:56:30
っつーか、その手のくだらねー話はもう秋田 Java だか C++ だかでやってくれよ、な。
CLOSがらみの話だから別に良いだろ つーかageんなハゲ
113 :
103 :2007/05/02(水) 23:02:19
誰かひとりぐらい構ってくれよぉ。
確かに書体も違うな。他のプログラムの"ム"は左下の角が上に跳ねてるし。
ファイアーエムブレムみたいなものだな
>>117 //Д///) わ、わざとだよ! つ、ついだよ!
そもそもLISPは構文的にオブジェクト指向を受け付けない。 オブジェクト指向は失敗だったとC++で証明されたから良かったものの、 もしC++で成功してたらLISPに未来はなかった。 C++の失敗に感謝しよう。
>>119 てめぇ、俺がC++厨だと知ったうえで喧嘩売ってんのか? ( ゚Д゚) ア゙ア゙ん?
CLOSの場合は、GOFのパターンやJAVAなどのオブジェクト指向で必要になっ てる概念は不要になってくる。また、メソッドをオブジェクトに埋め込む事も可能。
C++は新しいLISPになろうとしているのだから 反目する必要はない
121 不要→一部不要 語弊ありありだった。
>>122 そうなんだけど、C++はやろうとある程度なんでも出来るけど、やろうと
すればするほどカオスになってしまって人が取り扱えないものに変貌して
しまうから、Lispほどの柔軟性を人が自在に扱えるものにするには、Lisp
以上の工夫がいるだろう。グリーンスパンの法則のとおりかも。
C++はBoostでかなりおもしろくなってきたと思うけど
>>125 もう C++ の信者はプログラミングよりも言語の放つ悪臭と対決するのが
快感になってきているな。
lisp loveと言うよりむしろS式love
128 :
デフォルトの名無しさん :2007/05/03(木) 19:10:07
ひゃあああ
>>125 Boostのテクニックは凄いし、Lisp以上の工夫はしてる。しかし、Lisp以上の
柔軟性は実現出来てないかも。
C++テンプレートプログラミングって、ファンクショナルプログラミング の側面が多いから、むしろLisperはとっつきやすい。
C++ や Java が必死で頑張って、新しい機能を言語に取り入れたとかはしゃいでるけど、 Lisper から見れば所詮ライブラリで実現出来る、学生演習程度のものだからねぇ。 あまり魅力無いですね、ハイ。
なのにLispファミリのほうがせいぜい学生のオモチャで、 C++やJavaはしっかり大人の仕事道具なのがなんともな。 (あ、噛み付かなくていいからな)
>>132 C++ は糞だが大人の仕事道具となってはいますね。
Java はなんか、プログラミングセンスの無い人向けのトイ言語ってイメージ。
Boost は学生演習越えていると思うけどなぁ
Boost その物はね
C++も得に糞とは思っていなくてLispも好きな物好きがここにいます
結局やってることは、はるか昔に Lisp (含 Symbolics とか Emacs Lisp) でやってたことの再発見を、必死に追従しているだけにしか見えないけどね。
すべての言語はLispから生まれLispへと回帰する。
C++は糞だ。などという言葉は信じない C++を批評できる日本人は存在しないからだ LISPは糞だという人間は信頼できる 優秀なLISPERに違いないからだ
人は如何にしてS式といふものとM式といふものとを区別し得よう。 彼のS式の魔力は、彼がevalするとはapplyする事である事を明瞭に悟つた点に存する。 S式の対象がatomであるとpairであるとは一つの事であつて二つの事ではない。 S式とは竟にatomの夢を懐疑的に語る事ではないのか!
Racterがそんなこと言ってたような気がするw
144 :
デフォルトの名無しさん :2007/05/06(日) 05:19:27
l i s p 完
>>140 小林秀雄も lisper だったのかw
>>138 最近のAOPも、CLOSの影響だしJavaのAOPへの動きもlisp
への回帰と言えるかも。
大人の道具という意味はわからんな。
電動こけしとかそういうの
Cokeで遊んでる人おらん?
電動Cokeし
> 最近のAOP 10年前が最近かよ(ぷ
> 最近のAOPも、CLOSの影響だし ついでに、AOPの提唱者はCLOSの人だっつーの(w
>>148 Squeakスレのほうがいいんでない?
もうすぐGaucheNightだけどチケット買えた奴いる?
Gauche 0.8.7を使っています。
ssaxでhtmlがパースできると聞き、
(ssax:xml->sxml (receive (return-code head body)
(http-get "www.google.com" "
http://www.google.com/ ")
(open-input-string body) ) '())
としてみたのですが、
*** ERROR: "(input string port)":line 12: (END . head) while expecting ENDmeta
といわれてしまいます。
これは僕の使い方がいけないんでしょうか。
それともssaxがまだ対応してないんでしょうか。
>>154 パースできるのはhtmlではなくXML。
対象がXMLであれば問題なくパースできる。
htmlの中でもxhtmlはXMLでもあるのでパースできる。
なお、文字コードの変換は勝手にはやってくれないことに注意。
157 :
154 :2007/05/07(月) 20:11:09
ありがとうございます。 なんかごっちゃになってたみたいです。 htmlパーサがないか探して見ます。
>>154 Gauche固有の話題なら本家のWiLiKiに書き込んだら書いた方がいいんでね?
ビリーズブートキャンプでもLispが使われてるらしいな。
前世紀くらいにLispとPerlの言語の設計を比較した文書を読んだと思うんですが URLあったら教えてください。 いくつかキーワードを出してその優先順位が違うとか何とか・・・ うろ覚えだけど厳格さとか正確さとかお手軽さとかそんな感じだったような・・・
前世紀ってことはPerl 4? Perl 6との比較があるなら俺も読みたい。
比較ってのはある程度近いものを比較して意味が有るんだよな。 perlとlispの比較って鉄パイプと数字の3を比較してくれっていうくらい 意味が捕らえにくい。比較する意味があるんか
↑一番意味のないレス↓
一番なのに二つ指定するのってどうだろう。
Scheme 5つの誤解 1. 黒板でしか使えないオモチャである 2. 仕様が貧弱である 3. 本当のマクロは書けない 4. パッケージシステムがない 5. 正規表現が使えない
Lisp Scheme = 片言計画
へ・・・片言・・・
Schemeは今すぐ敗北を認めて黒田氏の尻の穴を舐めるように。
gauche.nightのチケット買えなかった椰子は挙手
>>169 ノ
チャットは何時からやるんだろ?のぞきにいこっと
gauche.night の感想。スタッフ各位乙。 あっと言うまに終わったけど面白かった。 座談会。笑えたけどもっとつっこんで欲しかった。matz の扱い悪すぎw 生えんどう氏や生dan kogaiや生nobsunが見れて嬉しい。 VNC を使った奴がデモとしては一番うまかった。 mephisto のデモ、一度もちゃんとしたの見たことなくて残念 schemer は黒田氏に釣られすぎw あとほぼ全員、ダイエットしろよ('A`)
結論としては黒板偉大なり
>>174 >ダイエットしろよ('A`)
そうなのか。
ワーキングプアだから俺は太らない ようやく一つ勝った
gauche.nightは黒田氏大暴れしたみたいだなw shiroさん vs 黒田氏の激論見たかった しかしほんとうに黒板使うとはwww
まぁここでネタ拾ったんだろう。
性格から考えて黒田氏はこんな所見てないだろw なかなか鋭いツッコミ入れてるなぁ やっぱり切れ者ではあるんだな
181 :
デフォルトの名無しさん :2007/05/12(土) 18:40:09
MIT-Schemeをちょっといじってみたんだけど、 教育用としては本当に優れているね。 さすがだわ。
>>182 たとえば開き括弧と閉じ括弧の対応が重要だってことが身をもってわかるわけよ。
それぐらいはC言語でもわかるぞ
>>184 いやC言語は=の数が大事だという点の教育に主眼を置いて設計されているはず。
187 :
デフォルトの名無しさん :2007/05/12(土) 19:38:49
まずインストールが非常に簡単でした それからネイティブコンパイラとインタプリタの両方があることも良い点かと思いますよ
Cが何らかの教育に主眼を置いて設計されているなんて初耳でしたリッチー博士
ブラックモアキター
イアン、やめて〜
191 :
デフォルトの名無しさん :2007/05/12(土) 21:22:58
この手の比較的マイナーな言語はインストールの段階で手間取ると激しく萎えるよな 始める前からこれかよ…ってw
速いと噂のcmulispが窓で動かない時点で萎えるよね! sbclまんせー
193 :
デフォルトの名無しさん :2007/05/13(日) 12:28:47
ちょっとお聞きしますが、皆さんはどうして『Common Lisp』を選ばれたのですか? どうして『OCaml』や『Haskell』ではないのですか? 私の場合は『Scheme』で関数型言語を学び始めたものですから、その延長で『Common Lisp』の勉強に進みました。 最近はちょくちょく『SML』なんかを触ったりしています。
>>192 unicode1文字が内部でも1文字になるのがSML#しかないから(マルチバイトデータでは扱える)
195 :
194 :2007/05/13(日) 13:09:47
>>193 動的な言語と静的な言語という意味で180度違うじゃん
つまりは、動的なものが良かったということだろう
そうとは限らない
199 :
デフォルトの名無しさん :2007/05/13(日) 14:57:04
OCamlは静的型付けだけど型推論を持っています
>>198 などと、定義されたプログラムが有った場合に、
以下の出力を得るのが目的です。
> (parse f0)
iport: (i0 i1)
oport: (o0)
node:(m0 m1 m2 m3 m4)
graph:
(m0 (* i0 i1))
(m1 (- i0 i1))
(m2 (/ i0 i1))
(m3 (* m0 m1))
(m4 (/ m1 m2))
(o0 (* m3 m4))
ここで、
i0〜 :一番最初の入力データ並びを置き換えたもの。
m0〜 :計算に出現する中間データを番号付けしたもの。
o0〜 :最終の計算結果を番号付けしたもの。
既にマクロで隠蔽すればいいとのアドバイスを得ておりますが、
他には何か良く使われるアイデア等はありますか?
let については lambda に置き換えるとか??
>>193 学生時代は Ocaml や Haskell とかの強い型付けの信奉者だたよ。
まだ Ocaml はたまに使ってるなー。Haskell は頭悪い俺には計算機の実行動作と
コードとの対応がすっきりしないから疎遠になった。CL はアセンブラあがりの
俺には丁度いい抽象具合ってところかな。
>>200 つづき。。分かりづらいですね。
scheme のプログラムについて、
それを Data Flow Graph (DFG)だと見なして、
直接にデータの流れを有効グラフにて表すことが目的です。
最初のプログラム定義は、"define" の文字列にこだわっていません。。
>>193 そもそも Scheme も CommonLisp も関数型言語じゃないでしょ
だからなんでって言われても見当外れも甚だしいと思うんだけど
>>203 関数型言語の本家なんだが。マルチパラダイムの方向に進化しけど。
srfi-1 にある iota の名前ってなにからきているんでしょうか? 他の srfi の関数だと説明的で長い名前が多いんですけど iota だけ妙に短くて気になります。ギリシャ文字のイオタ?
207 :
デフォルトの名無しさん :2007/05/13(日) 16:21:27
破壊的な代入が出来るってことで、純粋な関数型言語ではないということになっていますね。
>>193 一言でいえば別に関数型言語を使いたいわけじゃないから
210 :
デフォルトの名無しさん :2007/05/13(日) 18:10:56
Common Lispで大規模プログラムを組んだ場合、C++のときのような、 保守性が甚だしく損なわれるといった問題は起こらないのでしょうか? どうもCLOSの多重継承が臭いのですよね。 やっぱりあれを使うのはC++と同様に使用を控えたほうがいいような気がするのです。 個人的にはComomon Lispは多機能すぎると感じています。 だったらSchemeを使えとなるわけで、まぁ、実際使っているのですが…。 言語使用にオブジェクト指向を組み込むのではなく、Objective-Cみたいに、 Scheme + オブジェクトシステム が理想ですね。
C++だから保守性が損なわれるのではないと思うけどね。
>>210 C++の多重継承だって別に保守性が甚だしく損なわれるとは思わないけどな。
おまえさん変な本で妙な偏見を吹き込まれてないか?
>>210 多重継承を使って意味不明なデザインをしてしまうような奴は、
おそらくどんなに制限された言語を使わせても保守性再利用性ゼロの馬鹿なコードを書くだろうよ。
214 :
デフォルトの名無しさん :2007/05/13(日) 19:13:07
それではC++ではなくCommon Lispでプログラムを書く理由は何ですか?
楽だから
217 :
デフォルトの名無しさん :2007/05/13(日) 20:09:47
ではOCamlではなくCommon Lispで書く理由は何ですか?
超うぜぇwwww
ただたんに関数型言語厨なんだろ 状態を表現できない、もしくは表現するのに苦労する言語は使いたくないね
このガキ、MLスレでも同じことやってやがるw 827 名前:デフォルトの名無しさん[] 投稿日:2007/05/13(日) 19:11:48 OCamlがCommon Lispよりも優れている所って何だろう?
どんな言語をやるのか迷っているのだろう そんなやつには俺は素直にeclipseを薦めよう
どう考えても迷っているんじゃないだろwww
Rubyを使わないのはなぜですか?バカだからですか?
信者がうざいからです
>>223 っていうかマジでそういう風に思わせたいだけだろ?
ruby やっている人は lisp 知らない人がほとんどだと思うけど lisp やっている人は ruby 知らない人なんてほとんどいないんだよな この時点でもう土俵が違う感じ
226 :
デフォルトの名無しさん :2007/05/13(日) 21:15:33
知っているのに、Rubyを使わずLispを使う理由はなんでしょうか? 必然性を論理的に導けるのでしょうか? 思い込みにすぎない、些細な理由はお断りします。
マクロがないから
仮定:「俺様はrubyを使わない」 ここから容易な推論により、 結論「俺様はrubyを使わない」 が導かれる。 この仮定は俺様の性質からして正しい。
230 :
デフォルトの名無しさん :2007/05/13(日) 21:23:02
どうしてSchemeでは不満なのですか? 私はSchemeでおなかいっぱいですが…。
どうしてCommonLispでは不満なのですか? 私はCommonLispでおなかいっぱいですが…。
>>226 おまえの態度が気に入らないから使わない。
知っているのに、CommonLispを使わずSchemeを使う理由はなんでしょうか? 必然性を論理的に導けるのでしょうか? 思い込みにすぎない、些細な理由はお断りします。
典型的な釣りだろ。
言語なんてもんは、その都度、場合によっては処理単位毎にでも、 必要に応じて問題に適したものを選べばいいんだ馬鹿者。
そうだよね。何故かLispをやってる人はRubyとかOCamlとか別の言語を使わないと思ってるらしい。 というかそれぞれの人がひとつの言語しか使わないと思ってるらしい。 それは典型的な素人の思いこみで、普通のプログラマは状況に応じてマッチした言語を選択するんだよね。 いくつもの言語をマスターしている。 たしかにLisp系は柔軟性が高くていろんな事が楽にできちゃうからこればっかり使っちゃうってのもあるけど、 それにしたってたとえばRubyの方が楽にできると思えばそっちを使うし。
黒板に書くならScheme、そうでないならCommon Lispだな。
>>206 > ギリシャ文字のイオタ?
元ネタは APL の原始関数イオタだと思う.
atoi を逆にしたと思ってた
>>217 Common Lispのほうが楽だから
>>223 Common Lispのほうが楽だから
>>230 Common Lispのほうが楽だから
>>210 CLOSハC++ナドトクラベテ ユルヤカナ オブジェクトシコウ+アルファ
ダヨ。ユルヤカナオカゲデ、C++ナドトクラベテ スバゲティニナリニク
イカモ。ナゼナラ ソウショウカンスウト メンバカンスウノ チガイガ
オオキイナリ。
コモンリスプハ オモメノケイサントダイキボニナルモノ デユウリニナ
ル。ソレイガイノトコロデハ ユウイセイガ ムカシニクラベ テスクナ
ク ナッタトオモウ。
ソケットヤ スレッドカンレンノ カンスウノ ANSIカヲハヤクススメ
テホシイ。10ネンノアイダニヒツジュヒンガフエタ。
昔の電報キター!
イオタって聞くと、『ランボルギーニ・イオタ(レプリカ)』ってキャプションのついた写真を思い出してしまうのは秘密。
>>243 10年どころか、Common Lispが生まれて20年以上だもんな。
そろそろソケット、XML、Unicodeあたりを標準に取り込んでもらいたいものだ。
スレッドもね >> 標準
248 :
デフォルトの名無しさん :2007/05/14(月) 21:43:53
とりあえずScheme極めてみるわ それからOCamlやろうと思うんだ な〜にがCommon Lispだよ
MLやるなら最初からMLでいいと思うんだ
勝手に極めてろw
251 :
デフォルトの名無しさん :2007/05/14(月) 23:34:33
249 :デフォルトの名無しさん :2007/05/14(月) 21:46:36 MLやるなら最初からMLでいいと思うんだ だってSchemeのほうがかわいいじゃんw
かわいいのか?
まるっこくてぽにぽにしてるカンジ
えー? ちんまりしてきゅっとしてる感じだなぁ
schemeハハヤクテケイリョウナノデ '86レビン トイウインショウデス。
かわい・い 《形》 (カワユイの転。「可愛い」は当て字) (1)いたわしい。ふびんだ。かわいそうだ。三体詩抄「万民の枯骨となりたるは―・い事ではをりないか」 (2)愛すべきである。深い愛情を感じる。「―・い我が子」「―・い声で歌う」 (3)小さくて美しい。「―・いスズランの花」 (岩波書店「広辞苑 第五版」より引用) (1)の意味だったら厭だな
チョークでものを書くあの感触が好きなら Schemeをやらない手は無いよな。
爪で黒板を引っ掻く「キキィィィー」って音が好きなら Schemeをやらない手は無いよな。
R*RSの曖昧さは、Schemeに与えられた唯一にして最大の自由かもしれん。 良いか悪いかはわからん。
通読した事も無いくせに
>>260 普通の正規表現も入ってもいいけど、パターンをS式で書けたりするとさらに萌えるな
Schemeにマクロはないっていうがsytax-rurlesとかは何でマクロじゃないんだ? あと、sytax-caseは非標準だけど、これはマクロなのか? まあ、これがマクロなら、ほとんどの処理系syntax-case備えてることから、 Schemeには実質マクロがあるようなもんだといっていいと思うのだが。
>>259 さっそくshiroたんが反論してるね。
残念ながらレベル高すぎてついていけないorz
あの文字列の形が正規表現の正規表現たる所以であって、S式にしたらぶちこわしだ。 マクロでもってオートマトンコードに変えるんなら意味なくもないが。
>>262 焼酎飲みながらのことが多いですが、何度か通読しておるですよ。
6-2-3の冒頭なんかが端的にその精神を表しているように思うのですけれど。
規定されていない部分についての実装の挙動の規定というのは、シラフでじっくり読んでもほんの僅かしか確認できないし。
>>266 perl6 の rule 見たいな感じ?
とりあえず現時点(R5RS)では、黒田の指摘は的を射ているということは分かった。 実装的に問題なければいーじゃんとする立場からは遠く離れた高みでの議論ですなあ。
272 :
デフォルトの名無しさん :2007/05/16(水) 16:30:23
おれC厨だけど、変数の代入はしないように気をつけてるよ。
Cは関数型言語だからな。それくらいの配慮は欲しいところだ。
274 :
デフォルトの名無しさん :2007/05/16(水) 16:40:36
関数型... 関数を通して返す値が常にあるもの。y=f(x)の関係さ。 これが一番広い意味の関数型言語の定義だと思うんだが。 純粋か不純かは関数の中で、変数の値を変化させる事が可能かどうかの 違いじゃなかったっけ? Cはvoid型のように返す値がないものもあるので、関数型とは言わない。
ということは、「scheme界へ黒船襲来」に迎撃出来なかったってことか。
277 :
デフォルトの名無しさん :2007/05/16(水) 18:09:03
Haskellの勉強をしてからC言語やると天才になれる。 C言語で関数言語的なスタイルでプログラミングするんだ。 Lisp厨には理解出来ないか?
毎度のことながら言語比較厨は馬鹿っぽいな
279 :
デフォルトの名無しさん :2007/05/16(水) 18:57:16
馬鹿はおまえだよ 自覚しろ
>>277 >C言語で関数言語的なスタイルでプログラミングするんだ。
不可能ではないが、Cで関数言語的な事をやりたいならば、
関数ポインタは押さえておきなさい。
あとは、こちらより、haskellのスレに出かけて師を探せ。
じゃあがんばれよ。
高階関数がムズいぜ。
282 :
デフォルトの名無しさん :2007/05/16(水) 19:31:55
281 :デフォルトの名無しさん :2007/05/16(水) 19:24:18 高階関数がムズいぜ。 むしろ痒いよw
間を取ってムズ痒い
>>275 > 関数型... 関数を通して返す値が常にあるもの。y=f(x)の関係さ。
scheme の set-car! とかは関数だけど値を返してるといえるんだろうか。
> 純粋か不純かは関数の中で、変数の値を変化させる事が可能かどうかの
> 違いじゃなかったっけ?
代入があれば純粋ではないのはそうだろうけど、
代入がないからって純粋とは限らないんじゃないかな。
普通は副作用をもたないものを純粋というのでは?
285 :
デフォルトの名無しさん :2007/05/16(水) 20:57:24
純粋な関数型言語と言われているHaskellでも間接的な方法でなら代入できるよ 値を返す関数を関数の中に織り込むの
関数型厨は巣に帰れ。Lispが関数型かどうかなんてLisperにとってはどうでもいい問題だ。
287 :
デフォルトの名無しさん :2007/05/16(水) 21:38:51
カルト乙w
>>284 schemeのset-car!みてぽかーんとしてしまった。#t #fどっちか
返せばいいのに。
>普通は副作用をもたないものを純粋というのでは?
代入の事を指していたのではなくて、このことを指していた。
関数の中で変数が変化するのは、破壊的だと考えられる。
一度決まった変数をいじらないことをさしていて、代入の有無ではないです。
>>274 ほら、アレじゃね。C++ は参照透明な言語ですっていう一連のネタの続きじゃないの。
副作用の為のシンタックスシュガーが豊富に用意されていますって奴w
Immature Lisp 萌えw
ruby スレ痛い事になってるな
何その嵐依頼
R5RSとにらめっこしながらSchemeを勉強中なのですが、 未束縛のxがあるとして、 (define-syntax foo (syntax-rules () ((_) (define x 100)))) (foo) としたあと、xが100になる処理系(Gauche,scm,guile)とxが未束縛のままの処理系(Gambit-C,scheme48,MzScheme)があるのですが マクロ変換子のスコープってどうなってるんでしょうか 予想としては(syntax-rules ... )まで(後者の挙動)かなぁ、と思うのですが
トップレベルじゃなければ大体の処理系では前者になるんじゃね?
>>294-295 petite chez schemeではそのマクロを定義しようとした時点でエラーになった。
>>296 ハイジニックな性質を守るためにはそれが正解だろう。
>>296 ならねーよ。
もしかして全角空白ごとコピペしたんじゃね?
299 :
294 :2007/05/17(木) 22:42:27
Gaucheは > (foo) > x → 100 なのに > ((lambda () (foo) x)) だと、未定義もしくはlambda呼び出しの前の値です ((lambda () (foo) x))が100を返すけどトップレベル束縛にならない処理系もあって訳分からなくなってきました… (foo)でスコープが閉じてその外では100にならないのが正しいと思うのですが
マクロのかわりができなきゃ何のために導入するの?
そういうのにストレス感じる人はコモンリスプへいらっしゃいw
302 :
294 :2007/05/17(木) 23:05:20
>>300 defineは内部定義になってもset!は可視の束縛場所の値の変更ですから
使えるのではないでしょうか
内部定義だからxは自由参照じゃないからリネームされて外側のスコープの値を変更しない…んですよね?
保険的マクロ二加えて古典的マクロとgensymをR6RSに入れてくれれば良いのに
>>302 syntax-caseが導入予定。
古典的マクロはsyntax-caseで実装可能。
304 :
294 :2007/05/18(金) 14:41:54
>>303 syntax-rulesの表現力に不満がある訳じゃなくて
(まだ自分はそんなレベルじゃないです)
実装が難しくて挙動が処理系依存になっているのなら
ポータブルな古典的マクロも標準に入れてほしいと思っただけです
syntax-rulesでスコープが閉じてるとしたら
マクロでdefineを使用すると必ず内部定義になってしまうから
R5RSのマクロの項でトップレベル定義のdefineについて言及していることへの辻褄が合わなくなってしまいますね
でも閉じてない(マクロ使用と同じスコープ)なら
そのマクロは定義が許される文脈でしか使用できなくなりますね
でも識別子の衝突を避けるためにリネームされるってことは
新しいスコープができている事に他ならない気もしますし
どっちなんでしょうか
Scheme用のいいGUIツールキットってないかな・・・
処理系によりけり。
同じOS上でも処理系毎に違うのなんとかならんのだろうか?
308 :
294 :2007/05/18(金) 18:40:13
言葉がわかりづらい… 束縛→場所をユニークに表すもの 束縛する→識別子を場所またはマクロ変換子に対応づける 参照→場所から値を取り出す事 という解釈で良いんでしょうかね 束縛するはともかく他の2つは直感的な理解と違う解釈な気がしますけど 内部定義のduplicate bindingについてはR5RSでは言及されてないようですけど 内部定義のdefineは完全に等価なletrec変換できるって書いてあるので 暗黙的にduplicate bindingは禁止なんでしょうね でも処理系によって許すものと許さないものがあるようです syntax-caseで使用する識別子'_'はマクロ名を表すって説明してるサイトもありますけど 必ずしもそうじゃないんですね パターンリストの先頭の識別子はパターン変数にならず、 マクロ名と見なされるってだけなので (define-syntax foo (syntax-rules () ((bar _) (begin (display _) (newline))))) 見たいに書くとパターン変数として使えるんですね
310 :
294 :2007/05/18(金) 20:08:42
あ、自分のレスみて気がつきましたが パターン変数はいわばメタ変数で実体を持たないから 束縛を隠蔽する事はあっても新しい束縛の導入にならないんですね じゃあR5RSの4.3のマクロの項で述べられている「束縛の挿入」は束縛コンストラクタを指している そしてその束縛は(リネームされるから)マクロ使用の周りのものとは異なるわけですね だからmzschemeやGambit-Cやscheme48の挙動が正しい
>>308 束縛という日本語が、Lispを無駄に難解な言語だと誤解させている部分はあるかもしれないねえ。
単にまんまバインドと言うほうがわかりやすかったりして。言葉の意味をあまり考えないで済む分。
似たようなのに「関数」てのがあるね。もともとfunctionの中国語読みを無理やり函数なんて漢字に当てたもんだから、
プログラミングを初めて学ぶ人の中には、関数て語で混乱する人も少なくないらしい。
遠山啓先生なんかは何十年も前の著作で、functionは「函数」じゃなくて「機能」でいいじゃないかと書いていらっしゃる。
支離滅裂だな 「私は漢字苦手です」の一言で済むだろ
オレも用語法に付いては同意見だな。 >> 英語そのままで良い 関数は違和感を覚える前に慣れてしまったけど、 理系の人間の国語センスの無さには絶望する。
314 :
294 :2007/05/18(金) 22:05:51
うーん、あまり複雑に考えなくていいのかもしれません
構文束縛を除いて考えると
束縛とは
({let,let*,letrec} ((ここにある識別子 value) ...) body)
(lambda (ここにある識別子 ...) body)
(内部定義のdefine ここにある識別子 expression)
(トップレベルのdefine ここにある識別子、ただし未束縛 expression)
参照とは
識別子のうち、束縛でないもの
束縛の別名が束縛識別子、参照の別名が自由識別子って言う解釈で良いのでしょうか
>>311 束縛変数、自由変数だけならλ式みたいで分かりやすいんですけどね
束縛する、束縛、〜に対する束縛、〜への束縛、いろいろ種類があるので分かりにくいです
315 :
294 :2007/05/18(金) 22:11:33
「識別子は場所に束縛される」 この表現は解釈の余地もなく分かりやすいのですが それ以外の「束縛する」、「束縛」などが分かりにくいですね
用語なんて慣れの問題だと思うけどね
>>313 functionなんて、今の関数よりはもともとの函数のほうが箱(函)をイメージして意訳してるので、
数学的な意味では関数よりも原語に近いイメージなんだけど、んなもん言われなきゃ気づかないよってのが痛いよなあ。
函→関に変わったのも、函の数て何よ?てなことからなんだろうし。
その点、「実装」てのは実に優秀な訳だと思う。見た瞬間にイメージが沸く。
まぁでも "Lisp" という単語を、日本語として適当な語句に訳せって言われたら難しいよね。 何か以前も同じ様な話題があった様な気がするけど… ;; 無理矢理話題をスレの趣旨に近付けてみた。
320 :
317 :2007/05/18(金) 22:57:22
>>319 恥ずかしながら存じませんでした。勉強になりました。
しかし、音が同じってだけで漢字を変えるってのもどうかとw
ま、周りに混乱を撒き散らして俺擁護を定着させるより 今定着している擁護で理解するほうがよっぽど楽だな。
322 :
294 :2007/05/18(金) 23:00:34
314は全然間違いでしたね (lambda () x)と((lambda () x))では違いますから 評価される識別子→参照 評価されない識別子→束縛 ならいいでしょうか
323 :
294 :2007/05/18(金) 23:05:48
あー、でも'xとかを束縛とは呼べない気がしますから 今は評価されていないけどいずれ評価されうる識別子→束縛 かな?
>>320 音だけの問題じゃないぞ。
数と数の関連を表してるという意訳でもある。
>>323 (eval 'x)
……とか言ってみる
いや、そんなによくわかってないんだけど
関数の結果が解っつうのも… 関連性ほどけちゃってるじゃん
お前らがLispからイメージする色ってなによ? たとえばRuby=>赤、Perl=>青、Python=>俺は紫なんだけど Lispってイメージわかないんだよなぁ。しいて言えば無職ってかんじ。
328 :
327 :2007/05/19(土) 00:50:54
oops x無職 o無色
黄色に決まってるじゃん
Perlは黄色で、Lispの方が青っぽいなあ Lispは透明感がある感じ。
紫かなあ。ANSI Common Lisp の表紙が紫だから。
Ruby ・・・ ルビー色 Perl ・・・ 真珠色 Python ・・・ ニシキ蛇色 Lisp ・・・ ポール色
Python 青紫 Common Lisp 透明で少し青みがかかってるちょいとつや消し Ruby 赤 Perl 黄 Scheme 明るい青 C やや白っぽい黄 C++ ドドメ色 AWK 赤茶色 sed 黄 Ocaml 肌色
>>316 君が思うまでもなく、みんな慣れの問題についての話をしてるんだよ。
何のメリットも無いのに、慣れるための壁を高くしてそうな日本語訳についての話。
Perl で黄色ってのはどういう連想なんだろう?
俺はCPANが水色だから水色を連想した。
>>334 >C やや白っぽい黄
なんかエロイな。
どうでもいいです。ネタがないなら無理して書き込まなくて結構です。
338 :
294 :2007/05/19(土) 14:18:23
>>325 結局C的に言えば
参照→*&x
束縛→&x
になりますかね
339 :
294 :2007/05/19(土) 15:35:47
いろいろ考えすぎてました 識別子は場所に束縛される 束縛は識別子が束縛されている場所 参照は識別子が束縛されている場所から値を得る ですね
340 :
294 :2007/05/19(土) 16:32:40
いろいろな処理系の挙動を観察してみましたが 結論としてはdefine-syntax内ではdefineは使わないほうが良いようですね 他の束縛コンストラクタは閉じ括弧によって明示的にスコープも閉じられるので解釈に曖昧さがありませんが defineはスコープの終端が明示的ではないので処理系によって挙動がずいぶん違うようです というか内部定義のdefineなんてものが諸悪の根源のような気もします
用語なんて慣れの問題
あだだだだだ・・・・・・ イタイねぇw
今日も痛いの湧いてんなぁ
↑なんか湧いてるぞ
>>339 なんか別の言葉で再定義して満足してるだけじゃね?
Ruby スレを荒らしてたキチガイだろ。調子のって Ruby スレで暴れてたら Lisper が居て泣きながら帰ってきたってとこか。迷惑な…。 Ruby スレでもいらない子。Lisp スレにもどってきてもやっぱりいらない子。
347 :
デフォルトの名無しさん :2007/05/19(土) 20:44:33
セルビオゲゼルが提唱している、減価する貨幣。 私はそれを実現するべくLispの勉強を始めたのでした。
>>346 ライブラリが無いから実用的じゃないという流れでACL出されて
その後論点がまるで変わっているように見えるんだけどなぁ
というかこどもっぽい反応が目に付くような
349 :
294 :2007/05/19(土) 21:30:05
>>342-4 >>346 スレを汚して申し訳ないですけど
私はRubyスレをのぞいた事も書き込んだ事もないですし、
CLとschemeは勿論、それ以外の言語をけなす意図もないです
>>345 新しい概念の理解ではないので、自分の理解している言葉に置き換えただけです
>>348 つか Ruby スレで Lisp 話やるのがスレ違いで叩き出されて当然だろ。
戻ってこられても迷惑だけど。
見てきただけの俺に言われても困るんだが…
>>350 キミも荒らしている一人じゃないか?
ほぼ書式が一緒だが
701 名前:デフォルトの名無しさん[sage] 投稿日:2007/05/19(土) 00:16:07
>>689 バカはお前だよ。CL コミュでもライブラリ不足は長い事問題になってんじゃん。
で、他言語のライブラリを活用しようとかって話でてるじゃん。ILC とか c.l.l とか読んでるんか?
きみのような頭が病気な人が一人いるだけで Lisper としては迷惑なんだよ。ここは Ruby スレだし。
まぁ Lisp 厨を装った荒しなんだろうけど、困ったもんだ…。
710 名前:デフォルトの名無しさん[sage] 投稿日:2007/05/19(土) 01:29:24
>>702 救い難いキチガイだな。なんで SBCL だと思ったんだ?妄想?
残念だけど Allegro CL 使ってるっつーの。そんでも Ruby を使うこともある。
そんで敬意は払う。おまえみたいに比較ばっかりで何一つ使いこなせないのが一番タチ悪いよ。
720 名前:デフォルトの名無しさん[sage] 投稿日:2007/05/19(土) 08:35:03
ちょwwww 荒し君
>>714 バカとかしか出なくなwww 小学生かよ。荒らし君涙目?売りは粘着だけか?
つかどっかで半端な知識でも聞きかじってきたんだろうが、Ruby スレで Lisp ネタで論破されるとは
どんだけヘタレなんだよ……Ruby ユーザーかつ Lisp ユーザーみたいな層の存在を考えなかったのか。
354 :
350 :2007/05/19(土) 22:14:32
>>352 なんか妄想入ってきたな。Ruby スレの奴も navi2ch 使ってそうだと推測はできるけど。
またRUBYキチガイが暴れてるの? アレはほんと迷惑だな
両方荒らして「おれってすげー」ってほくそえんでいる、寂しい奴が一人というのが正解。
今なら言える ぬるぽ!
359 :
デフォルトの名無しさん :2007/05/20(日) 00:04:47
ちん剣士
lisp/scheme で処理系に ヌルポ って云わせてみたいんですけど どうすればいいんでしょうか?
'ヌルポ
>>361 そんな当たり前の答えは期待していないんですけどorz
>>327 Rubyは赤葡萄酒色
Perlは茶色
Pythonは鉛色(ちょいメタリックぽい色)の縞柄
Lispはエメラルド色
>>363 そりゃ、当たり前な答えしか返ってこない聞き方してるからじゃないか?
どんな答えを期待してるのか書いてくれなきゃわからんよ
>>360 荒らしはいろんなところでウザがられるのが当然じゃないか?
Rubyスレのぞいたけど
>>352 に引用されてる記事の前に荒らしてるから煽られてんだろ
>>367 2chの鉄則「荒らしに反応した奴も荒らし」
>>352 は「反応する」の域を明らかに超えてるな
というか「煽ってる」って自覚があるんだな
自覚て。俺 (367) も同一人物ってこと?
香ばしい展開
まぁこういうアホな会話を育ててしまうという経験を積んでいくうちに 「あれ、どうやら俺は、自分で思っていたほど賢くないみたいだぞ?」 っていうのを学んでいくんですよ。 一生「会話がアホになったのは俺と違って相手がバカだから」の一点張りで生き続けるのも たまに居ますが。
>>369 バレてないつもりなのか
>>367 にもそのレスにもまだ特定できるほどの特徴が残ってるんだよ
ここで Ruby スレみたいな話をするのは止めておくれ
>>373 そりゃ駄目だよ
こういう馬鹿がRubyスレとか他のスレで暴れる前に釘を刺しておかないと
お前の事だけどな
>>372 の後でも特定されるようなレスをするのはわざとなんだろうか
第三者のなりきりかな?
そこまで執着する理由が分からんけど、何かトラウマでもあるの?
>>375 もしかして自分が間違ってるかもと思ったら、それが正解だよ。
これ、俺からのアドバイスね。
それはチョンの陰謀
>>352 に引用されてるやつは元レスの荒らしが酷いからRubyスレ住人がキレたんだろ。
なんでそんなに特定したがってんだ??
689
CommonLisp が実用的じゃないって Ruby 厨はどれだけアホなんだw
で、Gauche の方が実用的だって?
Shiro 氏自身が実用で使うなら Gauche より CommonLisp とるって言っているのにwwww
702
SBCLで仕事しようとするからだろ
アホか
714
>>710 は真性のアホだなw
>>379 「特定したがってる」んじゃなくて、
別人を装って
>>352 に引用されてる奴を擁護してるからお前に突っ込んでるんだよw
ぽ こ ち ぬ
なんでこのスレ定期的に炎上するの?w
ところで君たちは何をそんなにムキになってるのかね? Ruby スレがどうしたとかなんとか、そんなにムキになるほどの ことなのかね? そもそも何を怒ってるんだ君たちは?
本人キター
>>386 実は奥の二人の方がが、手前の人よりも重要なんだよね(;゚∀゚)=3
なんで乳をそんなとこから出してんの? 不思議!
GaucheNight前 Lisp実装時の疑問に答えるスレ GaucheNight後 GaucheNightの記事でLispを知ったLL信者に答えるスレ
ここはRuby支配下ですか? 他の言語は完全に支配下に置いたんですけどねぇ・・・
なんか痛いのがきた
>>379 というかこれ自体は別に嘘言ってないよなあ
ライブラリが少ないから実用的じゃないみたいなツッコミに
商用パッケージ使わないからと言っているだけだし
相手が小学生みたいな反応に見える
>>391 グレアムおじちゃんがお口にλつけて仕舞いにくるぞ
「支配」っていうのは、とてもRuby的な概念だよね。 自己顕示欲ともPerlコンプレックスともつかない、Rubyユーザーの野望がよく出てる単語というか。 とても人間的。 Lispはどっちかというと「わかる奴だけ使う最強兵器」みたいな位置だし、 ユーザーもそういう位置で満たされてるから、言語トーク自体を楽しむ意気込みはあっても、 そこで支配というワードが来ると、それどーゆー意味だったっけ的な溝を感じる。
ふーん
「最強兵器」も「支配」といい勝負ではないか?
頭悪そう
「支配」っていうのは、とてもボールペン的な概念だよね。 自己顕示欲とも万年筆コンプレックスともつかない、ボールペンユーザーの野望がよく出てる単語というか。 とても人間的。 筆ペンはどっちかというと「わかる奴だけ使う最強兵器」みたいな位置だし、 ユーザーもそういう位置で満たされてるから、筆記用具トーク自体を楽しむ意気込みはあっても、 そこで支配というワードが来ると、それどーゆー意味だったっけ的な溝を感じる。
Schemeは毛筆、と。メモメモφ(・∀・)
鉛筆最強
schemeはチョークじゃなかったっけ
メモメモφ(・∀・) smalltalk (n.) [smo?to?k]] 1.文房具談義、筆記用具トーク 2. 小型のチョーク (→数奇夢)
Ruby信者はいつも元気だな
Common Lispは山羊の毛の毛筆 Schemeは馬の尾の毛だな
山羊の毛は(()())で 馬の尾の毛は(().())
俺様Lispはあそこの毛で作りました
( ) ( )
( ) ( )
λ (())
黒板偉大なり
413 :
デフォルトの名無しさん :2007/05/22(火) 14:22:56
今、ウェブ・サービスの多くが、 Javaや.NETベースのアプリケーションサーバや、 Perl/Ruby/PHP/Python等のLightweight Languageの上に構築されていますが、 なぜそこにLispが含まれていないのでしょうか?
これはひどい一本釣りですね
(lambda
らんぶだ!
lambda! と申したか 酷い仕様だな
(lambada () '石井明美)
lamborghini
俺ははじめてlambdaを見たとき ふつーにランバダってよんでたな。
俺は脳内でラムブダとつぶやきながら書いてる。
馬鹿が多くてちょっとほっとした
ホッとするのは底なしに危険だぜ
底なしなど幻想だ
「実質的に無限」というのは「有限」という意味だからね。 なんかこう、Lisperは特にそう考えたがりそうだね。
lispは見なす事が自然と身に付く それができない頭硬いバカチンに使いこなすのは無理
迷惑だから Ruby スレで暴れているヤツ引き取ってくれ
実際そうしたい
そもそも「引き取る」という概念がおかしいな。 スレッドと訪問者の関係を、チームと選手の関係みたいに思ってるんじゃないのか。
ゴミはGCへ
クロージャー体操 はっじまっるよーーーーーー
>>428 >...バチカンに使いこなすのは無理 に見えた。
言語論争の次は宗教論争かと思った。
オーソドックスなネタですね。
437 :
デフォルトの名無しさん :2007/05/26(土) 09:22:46
ウェブ技術系のブログを見ると、 「やっぱPHP最強だわ」などの表現が見当たりますが、 Lispはどうなのでしょうか。
括弧の数なら負ける気がしないぜ!
少しはカッコを減らす努力をしないと ポール・グレアムに嘲笑われるぞ
勝手にしやがれ( ゜∀゜)
♪せめて〜 少しはカッコ付けさせてくれ〜
443 :
デフォルトの名無しさん :2007/05/26(土) 21:50:17
>>441 それめっちゃ気持ち悪い。dylan? やっぱりかっこがいい。
かっこいいの!
curlってどうなったの?
448 :
デフォルトの名無しさん :2007/05/27(日) 15:07:27
なんかMLみたいになっちゃってるね。
これがそんなにキモイか? define (fac x) if (= x 0) 1 * x fac (- x 1) じゃあこうしよう define (fac x) { if (= x 0) { 1 (* x) } { fac (- x 1) } }
K&R派なオレはそのifの書き方見るとイライラしてくるんだよねw
>>449 { } の代わりに ( ) にしてみてもいいかも
>>449 どうでもいいが式が間違ってるぞ
まあ前者はインデントが浅すぎでキモく見えるだけじゃないのか?
インデント文法で一番有名なPythonは20年後はもう衰退していると思うが、 この手法はSchemeと一緒に30年後も生き残っていそう。 それで、インデント文法はSchemeが元ネタだ! と騒ぐ信者が出現
>>442 山口百恵のロックンロールウィドウもよろしく
Schemeのマクロについてなんですけど、 本体の展開よりも引数の評価を先にするようなトリックってありませんかね? 構造体を定義するマクロを自分でも書いてみようと思ったんですけど、 構造体名structure-nameを与えられてmake-structure-nameという名前の関数を定義する事さえ難しいという現実に直面してしまいました。 グローバル定義だけならevalでお茶を濁す手もあるんですが… R6RSで導入予定というsyntax-caseもちょっと使ってみたんですが、 まだ標準化されていないせいか、処理系によって違いが結構あるので 今は乗り換えるのを見送ろうと思ってます。
よく思うことなんだが、言葉でくどくど説明されてもよくわからん。 簡単なテストケースを書いてくれ
;(define-syntax my-define-structure ; (syntax-rules () ((my-define-structure name slot ...) ; (define (string->symbol (string-append "make-" (symbol->string name))) (lambda (… などとして、新しいシンボルを作ってそれを束縛したいのです。 defineは第1引数に式はおろか、準引用すら許しませんから困ってます。 そこで、マクロに展開されてdefineが評価される前に引数がシンボルに展開されれば、と考えました。 これは黒田氏が指摘している問題の一つな気がします。 Shiro氏も ・せめてシンボルの生成くらいはr5rs内で出来て欲しいってのはありますね。 とおっしゃってますし、正攻法ではどうも解決できない気がします。 プリプロセサを書くしかないのでしょうか?
混乱してるからクドクドとなるんであって、 簡単にはテストケースを書けないんだろ。
defineは第一引数に関数呼び出しはおろか、特別式すら、が正しかったですね
>>457 前スレ172みたいなのをコンパイル時にやりたいっつーことだな。
それならやっぱsyntax-case必要だろう。
define-macroでできるだろ
>>460 うわぁ、古い方の過去ログは読んだのですが、最近のは読んでませんでした。
全く同じですね。
syntax-case使うなら、やっぱりchezでしょうか?
私は主にmzschemeかscheme48かGambit-Cなので、syntax-caseはmzschemeしか使えないし、
chezのものとは少し違うようなので、
ポータビリティを考えたらCL的マクロに逃げるのがベターか、などと考えてます。
あまり関係ありませんが、Gambit-Cのsyntax-rulesを使えるようにするファイルは、syntax-caseが使えないのになんでsyntax-case.scmなのでしょうね。
>>461 もちろん、CL的アプローチでは簡単です。
標準仕様の範囲でできるかどうか、という問題です。
syntax-caseで書くならこんなカンジか? (define-syntax define& (lambda(x) (syntax-case x () ((k sym obj) (with-syntax ((s (datum->syntax-object (syntax k) (eval (syntax-object->datum (syntax sym)) (interaction-environment))))) (syntax (define s obj))))))) petite chez schemeで試してみたが、こういうテストケースでは動くことを確認した。 (define& (string->symbol (string-append "a" "b")) 1) ab ;-> 1 結局のところ、今はschemeに足りないところがあるのはそのとおりだと思う。 でもな、完成されたものを使うだけってつまらないと思うわけ。 マクロに関しても色んな提案があってそれぞれ細かい部分で利点も問題点もかかえてて、 それがどう収束していくかってなかなか面白いことじゃないか。 ま、仕事で使うならそうもいってられんのだろうが。
仕事で Scheme 使っている人ってここにいるんですかね
使ってた。納品物ではなく自家ツール用だけど。最近はCommon Lispのほうが多い。
>>464 あなたのプログラムを見て初めて私のsyntax-caseがうまく動かなかった理由が分かりました!
ありがとうございました。
IBMにあるメタプログラミング技法を読んでsyntax-caseを勉強したのですが、
datum->syntax-objectの第1引数の(syntax k)のkはマクロ名にマッチする識別子だったんですね。
syntax-rulesではマクロ名にマッチした識別子は特に使い道がなかったので気がつきませんでした。
>>467 ここにsrfi-93の日本語訳があるぞ。
http://www.katch.ne.jp/~leque/translations/srfi-93/srfi-93j.html > 手続き datum->syntax は引き数として、
> テンプレート識別子 template-id と任意の値 datum のふたつをとる。
>
> (datum->syntax template-id datum)
>
> この手続きは template-id と同一の文脈情報をもつ、
> datum の構文オブジェクト表現を返す。 このとき、
> この構文オブジェクトは datum (訳注: template-id か)が
> 挿入されたのと同時にコードに挿入されたかのようにあつかわれる。
schemeのマクロではただシンボルを置き換えればいいってもんじゃなく、
文脈がからんでくるってこと。
ところでこの文書ではdatum->syntaxってなってるけど、
chez schemeを含むいくつかの系ではdatum->syntax-objectって名前なので注意。
>>468 ありがとうございます。
読んでみました。
いろいろ勘違いしているところもありました。
しばらくsyntax-caseの勉強に励もうと思います。
462でGambit-Cはsyntax-caseが使えないと書きましたけど ちゃんと使えますね。 なぜか勘違いしてたみたいです。
syntax-caseて処理系に依存するの?
syntax-case 面倒臭すぎる 阿呆な質問なんだが scheme にも cl のパッケージの概念導入 できないものなんだろうか…?何か問題でもあるの?
srfi を書いて提案しましょう
>>472 schemeでは名前空間を分離しない(?)原則みたいなのがあるとかなんとか言ってなかっったっけ?
R6RSに入るんじゃなかった?>パッケージもどき
R6RSって出ないんじゃなかったっけ?
じゃR7RSで
もうR2D2でいいよ。
むしろR2D2の方がいいよ
100万言語に対応してるんだっけ?
schemeから派生した言語って何かありますか? luaがそれっぽいですが
Tとか
luaはべつにschemeと関係ないよ
このスレ住人としてluaの存在ってどうよ 末尾再帰とかゲームで採用されたりとかむかつかね? しめとくか?
schemeも採用すればよかんべ。
schemeがシェルに採用されたMonaOSが話題にならない件
Scheme流行りの昨今
Schemeは黒板専用言語のくせになまいきだな
確かにリリカルLispは黒板使ってたなww
小鳥みたいですね
歌が好きだったりしますか?
497 :
デフォルトの名無しさん :2007/05/31(木) 11:09:22
read-from-stringは多値を返すのですが、 それぞれを別の変数に入れる方法はありますか? (read-from-string "459") 459 3 たとえば xとyに 459と3を入れる方法が知りたいです。
>>497 multiple-value-bind
499 :
デフォルトの名無しさん :2007/05/31(木) 11:32:57
>>498 ありがとう
失礼ですが、LISP暦は何年でしょうか?
multiple-value-bind とか multiple-value-setq とか。 CL-USER> (multiple-value-bind (x y) (read-from-string "459") (list x y)) (459 3) CL-USER> (multiple-value-setq (x y) (read-from-string "459")) 459 CL-USER> x 459 CL-USER> y 3
501 :
デフォルトの名無しさん :2007/05/31(木) 12:55:18
letでレキシカル変数(LISPでは何?)として定義したhyoを成功のパターンで試すと正しくできますが、 失敗パターンのように要素?を""で囲むと正しく取得できません。 要素を""で囲っても正しく表引きしたいのですがLISPではどうするのでしょうか? ;=== 成功 === (let ( (hyo '((A 80) (B 70) (C 100)))) (print (assoc 'A hyo)) "OK" ) ○結果 (A 80) "OK" ;=== 失敗 === (let ( (hyo '(("A" 80) ("B" 70) ("C" 100)))) (print (assoc "A" hyo)) "OUT" ) ×結果 nil "OUT" まだよくわかっていないのですが、 ""とすると文字列限定される?ということでしょうか?
(assoc "A" hyo :test 'equal)
assocは普通はequal比較だから同じ文字列なら見つかると思うのだが、 数あるlisp方言の中にはそうでないのもあるのかな? ちなみにemacs lispで実行してみたらこうなった。 (let ( (hyo '(("A" 80) ("B" 70) ("C" 100)))) (print (assoc "A" hyo)) "OUT" ) ("A" 80) "OUT" 使ってる処理系が何かを示せばより的確な回答を返せる人がいるかもね。
504 :
デフォルトの名無しさん :2007/05/31(木) 13:16:56
>>502 ありがとう
皆さん、簡単に答えますね。
うらやましいです。
'eaualより#'equalの方がいくない?
506 :
デフォルトの名無しさん :2007/05/31(木) 13:41:37
>>503 えー、初心者危険
ちなみに xyzzyです。
>>499 エディタのカスタマイズ以外にはあんまり使ってないけど三年ちょっとぐらい
>>503 Common Lisp だと eql だよ
eq? アドレスの一致 eqv? 値の一致 equal? 構造の一致 文字列の一致に使えるのって なんとなくeqv?かと思ったけど違うのね。 eqv?の立ち位置って微妙じゃね? 文字列もアトムと考えればeqv?で良い気がするけど。
>>508 すまん、普段emacs lispとschemeしか使わないのでCommon Lispの
ことがすっかり頭から抜け落ちていた
>>509 文字列も場所の列だからベクタと同じ扱いなんじゃなかろうか
string-set! とかあるし
513 :
デフォルトの名無しさん :2007/05/31(木) 23:51:57
あと二次元配列 O(1)でアクセスできるタイプ(効率重視)で perlで以下のことがLISPではどのように書くのでしょうか? *定義 $cell['A'][1] = ('国語' 100) <-- Lispのリスト $cell['A'][2] = ('算数' 20) <-- Lispのリスト $cell['A'][3] = ('理科' 30) <-- Lispのリスト $cell['B'][1] = ('家庭科' 90) <-- Lispのリスト *呼び出し % print $cell['A'][2]; ['算数', 20]
>>513 なんか日本語がよくわからないんだが、
多次元配列なら aref に次元の数だけ引数を渡す
(aref #2A((1 2 3) (4 5 6)) 1 2)
=> 6
ところで多次元配列って Lisp では使ったことないんだけど、どういう時使う?
515 :
デフォルトの名無しさん :2007/06/01(金) 00:15:09
>多次元配列って Lisp では使ったことないんだけど、どういう時使う? まだ構文を覚えている最中で、どういう時に使うかまだでは考えていなかったのです。 LISPでは、多次元配列という考え方でなく別の方法で対処しているということでしょうか? LISPらしい書き方を学ぶにはどうしたら良いのでしょうか? 私はPerlはかじっておりますので、perlと対比できたらわかりやすいです。 #2Aは何を意味するのでしょうか?2はニ次元Aは???? #3Bにしたらエラーになりました。
ちょっとは調べろよwww
ある処理系での多次元配列の例 CL-USER>(make-array '(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) #20A((((((((((((((((((((0))))))))))))))))))))
20次元配列とかw まあ、全て2要素にした程度でも凄いサイズになるけどな。 扱えないレベルではないけど。
>>514 一番ありがちなのは lispで行列計算をしている場合。ライフゲームなどの
2次元空間グラフィック。そんなところじゃないのか
522 :
デフォルトの名無しさん :2007/06/01(金) 04:04:33
schemeでany や every は any? every?じゃないんだな。
(any hoge? ...) という使い方になるわけだから俺には違和感ないな。
anyはブール値を返すわけじゃないからじゃね?
for-all、existsとの違いがイマイチ
このスレのレベルが急速に低下してるな……
...and justice for all
関数型系の複数のスレに、全く同じレス付けてる
>>526 って何なの?
>>527 '((justice is lost) (justice is raped) (justice is gone))
>>528 休みの日にデパートの屋上から路上を眺めるのが趣味の人なんじゃないの
今の時代なら、休みの日にgoogleで海岸とかプールを拡大して 凝視してる人だろ
LIVE映像じゃないと、ちょっと行為としてしっくりこない気がする。
では、ライブカメラを漁ってる人
534 :
デフォルトの名無しさん :2007/06/03(日) 16:55:16
Lispは型推論を持たない
唐突にどうしたんだぜ?
ヒント:日曜日
537 :
デフォルトの名無しさん :2007/06/03(日) 17:37:08
538 :
デフォルトの名無しさん :2007/06/03(日) 18:34:02
LISPに ne 等しくないという等号はありますか?
(defun ne (x y) (not (eq x y)))
「等しくないという等号」にすげぇ違和感
そうですね はい次。
542 :
デフォルトの名無しさん :2007/06/03(日) 23:27:36
pushすると ("C" "B" "A")となりますが 例えば、 (def test(x lst) ... ) (setq lst '()) (test "A" lst) (test "B" lst) (test "C" lst) (print lst) で("A" "B" "C")とするには、どのようにtest関数を作ればよいのでしょうか? pushした後 reverseせず、純粋に("A" "B"..というリストを作りたいです。
>pushすると >("C" "B" "A")となりますが なりませんでした はい次。
>>542 何故そんなに push を嫌うのか分からん
rplacdでマクロ作ればいいんじゃね
push して nreverse が一番効率いいと思うがな
そりゃー2chだもの
拝啓547様 正しいマナーが根付くには時間がかかるものです。 悪癖は容易には正されません。 円滑なスレ進行のため今後も努力する所存です。 543
うまく人を逆撫でできる人は自分の話題に持ち込めるけど、 単なる阿呆、とだけ思われてオシマイだと、うち捨てられて終わりなんだよね。
>>542 君が欲しいのはこんな感じのものでは?
(defmacro test (x lst) `(setq ,lst (append ,lst (list ,x))))
でも
>>546 の言うとおり、pushしてnreverseのほうがたぶん速いよ。
多分 queue が使いたいんじゃないかなーと思った。
Common Lispらしいという意味ではfill pointer付きarrayという手もあるな。使ったことないけど。
>>553 コンシングを減らすために使ってみたことあるよ。
おれがヘボなせいかあんま高速化しなかったけどorz
cl-user(5): (setq vec (make-array 10 :fill-pointer 0 :adjustable t))
#()
cl-user(6): (vector-push "a" vec)
0
cl-user(7): (vector-push "b" vec)
1
cl-user(8): (vector-push "c" vec)
2
cl-user(9): vec
#("a" "b" "c")
cl-user(10): (concatenate 'list vec)
("a" "b" "c")
>>542 それはマクロでやると簡単。
(defmacro test (x lst)
`(setf ,lst (append ,lst (list ,x))))
既にでてたorz.
nreverseの方が早いっていうのは appendが新しいリストをconsセル一つ一つつなげて返すのに対して nreverseは元のリストを破壊操作で処理するからって言うことで正しいですか?
最後に付け加えるのが時間かかるってことじゃない? nreverse なら cons セルのつなげかえをするだけなので O(n) なのに対して、 リストの最後に付け加えていくのはリストが長くなるほど たどる量が増えて O(n^2) になる、っていうことだと思う。
FreeBSD6.2RELEASEでGauche0.8.7をつかっています。 (inc (dec inc))と(1 2 3)を入力として与えると (2 (1 4))を返すような関数が欲しいんですけど、 なんか既にあるような気がします。 こ存じないですか?
(define (foo x y) '(2 (1 4)))
そんな変な関数ある気がしないw
562 :
559 :2007/06/05(火) 16:20:06
そうですか… リストを構造体に見立てて、 別の構造体に変換するような操作は結構あるような気がしたんですが… だとすると俺のやりかたが間違っているんだろうか。 ちょっと違う形になりましたけど、とりあえず書いたもんさらしてみます。 (define (general-apply syn args) (eval `(,syn ,@args) (interaction-environment))) (define (data-convert index record convert-rule) (general-apply 'let (list (zip index record) convert-rule)) ) で、 (data-convert '(a b c) '(1 2 3) '(list (inc a) (list (dec b) (inc c)))) みたいな使い方をします。
564 :
559 :2007/06/05(火) 17:31:16
>563 おお、なんかこれでよさそうです。 ありがとうございました。
wilikiのスタイルシートってcgiと同じディレクトリにおけばいいの? 全然うごいてくれない
吐かれたHTML読んでみたら?
>>565 キーワード引数で :style-sheet のとこにスタイルシート名を指定すること。
568 :
565 :2007/06/10(日) 14:51:28
結局解決できませんでした しかたないのでpukiwikiをインストールします
うんそれがいいよ
(if (解決-p 565) (install wiliki) (install pukiwiki)) 残念。。
pukiwikiをschemeで書き直せばいいじゃん
ウッキ、ウッキ、ウィッキー
わかったよブービー(´・ω・`)
ウィッキーさん元気してるかね? なつかしすなー
ウィッキー→みのもんた だと思ってた時期が(ry
ウィッキーは落語家のえーっと鶴なんとか
577 :
デフォルトの名無しさん :2007/06/13(水) 21:15:05
(define port (open-input-file "c:\\tmp\\data.txt") (define line (read-line port)) (append lst (line)) テキストファイルから、一行ずつ読み込んでリストに加えて行くという処理を書いてるのですが、 3行目の(line)でエラーになります。 こういう場合、どう書けばいいんでしょう?
どんなエラーとか書こうぜ
>>578 > gosh: "error": invalid application: ("aaa")
こんな感じです。
"aaa"は、テキストファイルから読み込んだ内容になってます。
(append lst line)
質問です。 リテラルを破壊的に変更してはいけないといわれますが、次のような場合もでしょうか? (do ((i 10 (- i 1)) (r '() (cons i r))) ((zero? i) (reverse! r))) (reverse r) と書くべきなんでしょうか?
>>581 その例ならリテラルを破壊的に変更はしないと思う
>>582 じゃあ、次の場合はどうでしょうか。
リテラルを破壊的に変更してしまっているので、(reverse r) と書くべきでしょうか?
(do ((i 0 (- i 1))
(r '() (cons i r)))
((zero? i) (reverse! r)))
wiliki の質問スレはどこですか?
>>583 空リストはそもそも破壊できるような物ではないので大丈夫
>>585 じゃあ、空リストでない次の場合には破壊的に変更しているので、
(reverse r) と書くべきですね?
(let ((lst '(a b c)))
(do ((i 0 (- i 1))
(r lst (cons i r)))
((zero? i) (reverse! r))))
>>586 そう。こういう場合は reverse! は厳禁。
>>587 なるほど、やっと解ったような気がします。どうもありがとうございました。
589 :
デフォルトの名無しさん :2007/06/16(土) 11:57:56
lisp厨、必死だなw
ここはlisp厨のスレだが何か?
チュウチュウうるさいなぁ、おまえらそんなにチュウが好きならスペースチャンネル5でもやってろ!
Squeakもあるぜよ
FreeBSD6.2RELEASEでGauche0.8.10[utf-8]を使っています。 字句解析を使用と思い、以下の様なコードを書きました。 (define (lex-analyze inpx) ;; inpx: input port (define (op? inpx) (define op-char #\() (if (char=? op-char (peek-char inpx)) (begin (read-char inpx) (cons 'op (list op-char)) ) #f )) (define (cp? inpx) (define cp-char #\)) (if (char=? #\) (peek-char inpx)) (begin (read-char inpx) (cons 'cp (list cp-char)) ) #f ))
595 :
594 :2007/06/18(月) 14:31:06
(define (ws? inpx) (if (char-whitespace? (peek-char inpx)) (let loop ((r (list (read-char inpx))) (nc (peek-char inpx)) ) (if (char-whitespace? nc) (loop (cons (read-char inpx) r) nc) (cons 'ws (reverse r)) )) #f )) (define (wd? inpx) (define (allowed-char? x) (not (char-whitespace? x))) (if (allowed-char? (peek-char inpx)) (let loop ((r (list (read-char inpx))) (nc (peek-char inpx)) ) (if (allowed-char? nc) (loop (cons (read-char inpx) r) nc) (cons 'wd (reverse r)) )) #f )) (define tokens (list op? cp? ws? wd?)) (define (f inpx) (let loop ((t tokens)) (cond ((null? t) #f) (((car t) inpx) => values) (else (loop (cdr t))) )))
596 :
594 :2007/06/18(月) 14:32:01
(let loop ((r '())) (if (eof-object? (peek-char inpx)) (reverse r) (loop (cons (f inpx) r)) )) ) ここで、 echo '(+ 1 2)' > /tmp/hogeして作ったファイルを、 (define inp (open-input-file "/tmp/hoge"))として読み込ませて、 (lex-analyze inp)としたのですが、結果が返ってきません。 どうやら、2を読み込むところで時間がかかっている様なのですが、 どうしたらよいのでしょうか。
答えじゃなくて悪いんだけど、 (let loop ((r (list (read-char))) (nc (peek-char))) letの束縛規則により、read-charとpeek-charの どっちの副作用が先に適用されるのか不明ですよ。 Cの関数呼び出し時の引数でgetcとungetcを同時にしてると考えてください。
とりあえずそのallowed-charでは ) も #t にしてしまう。
(loop (cons (read-char) r) nc) ncが更新されてないよ。 peek-charを使わずに書き直した方が良いのでは。
>>599 let loopの内側に(let ((nc peek-char)) ... ) でいいでしょ
それよりファイル末尾がwhitespaceの列だったりするとws?がeof読もうとして死ぬ
そういえばchar=?で#<eof-object>を比較して大丈夫なの?
wd? は whitespace でしか終了しないでしょ。 ということは、 "2)" まで wd? で読み取って eof になっているが、 eof に対処するコードが wd? にないのでここで終了できなくなっている。これが原因でしょう。 仮に (+ 1 2 ) のように2と閉じカッコのあいだに空白を入れてみてごらん。それなら終わるから。 あと Gauche を使ってるなら text.parse とか便利なライブラリがあるから、そういうのを使った方がすっきり書けるよ。 ws? みたいなやつは skip-while を使えば一発だし。
603 :
594 :2007/06/18(月) 18:32:44
>597 それは気づきませんでした。 ありがとうございます。 >598 すいません、怠けたかっただけなんです… でもそのせいみたいですね。 >602 ありがとうございます。 (+ 1 2 )にしてもエラーで止まってしまいます。 でもそこら辺にもんだいがありそうですね。 もう少しやってみます。 それからこれは自分でパーサを書いてみよう、という試みなので、 ライブラリを使うのは無しです。 でも参考にしてみようと思います。 みなさんありがとうございました。
文字はリストやストリームとしていつでも取り出せるように蓄えとくと バックトラックとか副作用気にせずできて便利っすよ。 named-let活用したいみたいだしCPS勉強すると良いでしょう。 例えばトークン抽出時や#f返してる所は末尾コンテキストだから、 そのまま他の判定処理にたらい回しして継続できるし。 慣れればread-charとかのI/O操作は違うレイヤーとして管理できるよ。
今日初めてreaderマクロなるものとCL-YACCと言う物を体験しました。 惚れた、もっと昔に食わず嫌いしないでやっておけばよかった。 ちょいとのめり込み中。
リストから、n番目の要素を削除して、その削除した要素を返す関数を書きました。 まず下のような感じで書いたのですが、これだと、nが0の場合にエラーになります。 (define (remove-at! ls n) (let loop((prev '()) (rest ls) (count n)) (if (zero? count) (begin (set-cdr! prev (cdr rest)) (car rest)) (loop rest (cdr rest) (- count 1))))) それで、nが0の場合は別に処理を入れてみたのですが、破壊的操作で、リストの先頭を削除するのがどうしてもわかりません。 どう書けばいいでしょうか? (define (remove-at! ls n) (cond ((null? ls) '()) ((zero? n) (let ((tmp (car ls))) (set-cdr! ls (cdr ls)) ;; ここがダメ tmp)) (else (let loop((prev '()) (rest ls) (count n)) (if (zero? count) (begin (set-cdr! prev (cdr rest)) (car rest)) (loop rest (cdr rest) (- count 1)))))))
>>606 > 破壊的操作で、リストの先頭を削除するのがどうしてもわかりません。
そういうことは原理的にできない。(理由は考えてみるべし)
append! で第一引数が () の場合なども同様で、結果は明示的に返す必要がある。
(define (remove-at! ls n) (if (null? ls) (error "list too short") (if (zero? n) ((lambda (tmp) (set-car! ls (cadr ls)) (set-cdr! ls (cddr ls)) tmp) (car ls)) (remove-at! (cdr ls) (- n 1)))))
>>607 >(理由は考えてみるべし)
Cだったら、下のようなコードで、仮引数のほうを書き換えて、実引数が変化しないって悩んでるようなもんですかね?
struct cell {
struct cell* next;
const char *symbol;
};
const char* remove_at(struct cell* p, int n)
{
p = ・・・・
・・・
}
(define (remove-at! ls n) (cond ((null? ls) '()) ((zero? n) ((lambda (tmp) (set-car! ls (cadr ls)) (set-cdr! ls (cddr ls)) tmp) (car ls))) ((= 1 n) (if (null? (cdr ls)) '() (if (null? (cddr ls)) ((lambda (tmp) (set-cdr! ls '()) tmp) (cadr ls)) ((lambda (a b c) (set-car! b (car c)) (set-cdr! b (cdr c)) a) (cadr ls) (cdr ls) (cddr ls))))) (else (remove-at! (cdr ls) (- n 1)))))
>>608 >>610 サンキューです。
((lambda (tmp)
(set-car! ls (cadr ls))
(set-cdr! ls (cddr ls))
tmp)
(car ls))
で、書き換えできるみたいですね。
勉強になります。
でも結局 (remove-at! 0 '(a)) とすると破綻する。 変数の参照先をconsセルから全く別のものに置き換える操作って無いよね?
話を単純にして、「リストの先頭を削除」を考えれ。 (set! リスト (cdr リスト)) これを関数化するのは不可能というのを理解してるかどうか。 (define (リスト削除 リスト) (set! リスト (cdr リスト)) リスト) (define リスト '(a b c)) (リスト削除 リスト) => (b c) リスト => (a b c) (set! リスト (リスト削除 リスト)) リスト => (b c) 答え (define-macro (リスト削除 リスト) `(let ((リスト ,リスト)) (set! リスト (cdr リスト)) リスト)) (リスト削除 リスト) リスト => (b c)
ごめ、間違えた まあ判るよね
CLにはsetってのがありますが、 なんでschemeではないのでしょうか。
思想が違うから
最初期のSchemeにはあったが 危険だし行儀が悪いってことで廃止された
618 :
615 :2007/06/21(木) 19:04:54
>617 危険だというのは分かりますが、 行儀が悪いというのはどういうことですか?
プログラミングスタイルとしてよろしくないってこと
はあああああ?????
知能障害発生
(gc)
LISP 1.5 Programers manual(MIT press) というものが発掘された。
下の例で、1 は自然に理解できるんですが、次の 2 がなぜそうなるのか… ;; 1 (define a '(big brown dog)) (define b (cons 'the a)) a ;=>(big brown dog) b ;=>(the big brown dog) (eq? a (cdr b)) ;=>#t (set-cdr! a '(black cat)) (eq? a (cdr b)) ;=>#t ;; 2 (define a '(big brown dog)) (define b (cons 'small (cdr a))) a ;=>(big brown dog) b ;=>(small brown dog) (eq? (cdr a) (cdr b)) ;=>#t (set-cdr! a '(black cat)) (eq? (cdr a) (cdr b)) ;=>#f (cdr a) ;=>(black cat) (cdr b) ;=>(brown dog) 同一のオブジェクトを指しているのに、なぜ (cdr b) は元のままなんでしょうか?
図に書いてみればいいんでない
> 同一のオブジェクトを指しているのに 指していません。
>>625 > 図に書いてみればいいんでない
図を書いてみてやっとわかりました!
>>626 > > 同一のオブジェクトを指しているのに
> 指していません。
set-cdr! する前の (cdr a) と (cdr b) は同一のオブジェクトを指しているけど、
set-cdr! のところで、新しいコンスセルが作られて、a の cdr がそのコンスセルを
指すようになっただけなんですね!
1 のケースもやっぱりわかってなくて、
eq? で比較して同じなんだから当然だよなとか思ってただけでした。
今度からはちゃんと図を書いて考えることにします。ヒントありがとうございました!
1つの定数を使いまわすならeq?は真だけど 2つの同値の定数が同アドレスになるかどうかは処理系依存
629 :
デフォルトの名無しさん :2007/06/24(日) 21:51:05
方言つーことはSchemeはLispの一種であるわけだ。 単にLispっていうとCommonLispのことを指したりする場合が多いけど、 それっぽい系統の言語は全部Lispだ。 だけど、CommonLisp使いはSchemeをLispと呼びたくない人もいたりして、 それぞれの主張がある。 その辺は空気を読んで折り合いを付けていかねばならんところ。 CommonLispとSchemeの何が違うかって言う話を一言で言えば規格が違う。 どのように思想が違うかってのはウェブ上に色々文章があるから、 それを見てから疑問に思ったことを質問してくれ。
スペイン語とイタリア語みたいなちがいだ。 使ってるやつらにとっては大きな違いで、お互い意味通じねえよ! っていってるが、日本から見たらどっちも同じようなもん。
>>631 ポルトガル語とスペイン語のほうが分かりやすいかも。
>>629 人の勧めにいちいち流されない人間になるのが先決では?
>629 JavaとD言語くらい違う ダートマス大学のBASICとMS-BASICぐらい違う 元々同じ系統で似たような書き方をするが 同じコードが通ることはまず無いって感じかな 同じことするにも違う書き方をする場合が多い
>>635 ほえーこれがCSの論文かー。本文にコードが書きまくってあって驚いた。 普段自然科学の論文しか読まないもので。いきなり本文に、 Let us now compute (fact 3).とかあって笑た。
>618 関数型は基本的に変数というものが希薄。理由は、関数型のスタートは チューリングマシンや階差機関、ノイマン型を元とした手続き型言語と基本的 な原理が違う。同様にloopもunsafe。考え方を改めないとだめ。
>>638 的外れ。 set! なら関数型で安全なのか?
日本語でおk
コンストラクタだけでコードを書くことをイメージするんだ
関数型が……っていうんなら !が付く関数がある時点でアウトだろ。
まぁ安全かどうかを突き詰めるなら Haskell でもやってなさいってこった
TMとノイマン型とを同列に並べるのはどうも違和感ががが
>644 関数型と比較した場合の逐次命令実行型という意味では同じと思った >まぁ安全かどうかを突き詰めるなら Haskell でもやってなさいってこった それを言ったらC++でC風なコードを書いているのといっそで、関数型言語を 使う意味ないよ
関数型言語なんて使ってないし
はいはい
関数型信者うざ
ごめん...
リクナビ
651 :
デフォルトの名無しさん :2007/06/28(木) 06:53:59
おっ、common厨は消えたか
はいはい
common厨ですけど、今忙しいのでちょっと待っててね
うん。待ってるから…… ずっと待ってるから、必ず来てね。 約束……だよ?
カット!やりなおし
カットってPrologのあれ? 確か ! だったっけ
誰が上手い事を言えと
cutといえばコンビネータだね
659 :
デフォルトの名無しさん :2007/06/30(土) 12:57:27
質問です。 (defun color (fruit) (case fruit (apple 'red) ((banana lemon) 'yellow) (peach 'pink) (otherwise "I don't know"))) という果物の名前を引数にとって、色の名前を返す関数colorで 何もマッチしない時の処理が、 (otherwise "I don't know"))) なんですが、これを (t "I don't know")))にしてもOKだと説明してあって、 どうしてなのかな?と自分なりに考えたんですが、 LispではNIL以外は何でも真だからマッチしない物を一緒くたにまとめた物を tとして扱うのかな、と思ったんです。 実際のところ、なんでtなんですか? otherwiseなら納得できるのですが。
condにおいて条件が常に真という意味。if (1) { 〜 }と同じ。 elseに相当する物がなかった時代の名残り。 caseでも使われるのはcondと同じ構文だから。 長い間LISP使いにとっての常識だった。 otherwiseみたいな長いシンボルはCommonLisp特有。
伝統的には t だけど otherwise のほうが判りやすいという意見もあって追加された。 car と first みたいなもんで、好きな方を使えば良い。
今や (λ (x) (* x x)) で良いんじゃないかという気もする
あちらの人はどうやって入力するんだ?
ギリシャ人ならへっちゃらだな(本当か?)
666 :
デフォルトの名無しさん :2007/07/01(日) 19:05:54
>>662 え、めっちゃ有名な話だと思ってたよ。
俺の持ってる本にも書いてあるし。
lambdaと打ったらリガチャ扱いでλ出す、くらいのことは出来るだろう
関係ないけど、教養のためにとλ計算のプログラムを今書いてますが、 bashとかperlみたいに$を使う事にしてます。 (厳密には$と.で識別子を挟む。) 束縛子に$を使って、参照は識別子そのままなので、用法は逆ですけどね。 ($m. $n. $s. $x. m s (n s x)) ($s. $x. s x) ($s. $x. s (s x)) こんな感じで
SKKのほうがいいよ
675 :
デフォルトの名無しさん :2007/07/02(月) 07:03:32
俺Lisp作ってる人ってどれくらいいるのかな
少なくとも今ある処理系の数だけあるよな
俺LISPといえるほどの独自仕様の処理系ってそんなにあったっけ
だから俺Lispなんじゃね?
ホントだ、良く見つけたね。 個人的には ^ は return に見えてしまう...
このSmalltalkerが
Metaluaはluaでlispのマクロっぽい事ができるらしい。 いっちょ前にquasi-quoteっぽい仕組みまである(様に見える)。
本質的にはλは開き括弧、.は閉じ括弧だから []でも<>でも{}でも`'でも良いのに 接頭字+空白セパレタが主流なのはなぜなんでしょうね?
書き込んでから気づきましたが 歴史的には接頭字の方が先なんでしたね
質問です。 アトムとリストと、 car,cdr,cons,atom,eq これでどうやって足し算が出来たりするのでしょうか?
リストの長さで0以上の自然数を表すのがよく使われる手だね。 そうすると足し算はappendになる。他も自分で考えてみな。
あ〜、足し算はappendなのか。 だいたいイメージつかめた。 有り難うございます。
ん、やっぱりなんか引っかかります。 リストの長さで0以上の自然数を表すなら、 ()=0 (())=1 ((()))=2 は納得できるのですが、 これでどうやってリストを表すのでしょうか? アトムしか表現できないんじゃないんですか?
() (()) (() ()) (() () ())
>これでどうやってリストを表すのでしょうか? 言ってる意味が分かんないなぁ
砂場の石ころでもできる だから何ってやつ
何段階かの問答を経て、ようやく「自分が何を訊ねたいのか」を掴む質問者っているけど、 この人もそれと同様、これから自分の疑問の内容がわかるんだと思う。
マジな話、Lisperと話しするときは教養がいるよ。 プログラム言語の話とかだけじゃ相手にしてもらえない。 科学好き、数学好きとかが多すぎる。
個人的には数学は敬して遠ざけておきたい そんな僕でも立派なLisperになれるでしょうか
ところで河合さんの頭は本物なの?
>>698 GNU GPLを暗唱できたらあるいみ立派なLisperになれるかも!
687さんは純Lispが五つの基本関数「だけ」で 本当にチューリング完全かどうか 疑問に思ってるんじゃないですか? ちょうど1ヶ月前の自分と同じで マッカーシーの論文斜め読みしたら 関数は五つで良いけど →表記も含まれるから condかifスペシャルフォームも必要みたいに感じました 本当に五つの基本関数(と真偽値)「だけ」でチューリング完全なら 自分にも教えてください
Lisp と GPL は全く関係無いな
おいおい、Gの付く話はやめてくれよ
大前提としてλ式が必要
>>704 と、いうことはcondまたはifと
関数抽象のためのlambdaが必要ということになりますか
要素としては5関数2特別式でチューリング完全
そうか、lambdaだけでチューリング完全ですね でもそうすると5関数の立場が…
Lispエバリュエータを書くのに最低限必要な関数だと思うが
λ算法とLispのlambdaは等価ではないので
そういやifはλで表現できたんだな…。
>>709 どこらへんですか?
正格評価だからですか?
>>708 チューリング完全である≠"apply" or "eval"が記述できる
lambdaがあればチューリング完全だけど
"Lisp"の機能を満たすために5つの基本関数が必要である
ってことですか?
リストの n 番目「以外」の要素のリストを得るにはどうすれば良いでしょうか 例えば (0 1 2 3 4 5 6 7 8 9) から 3 を除いた (0 1 2 4 5 6 7 8 9) が欲しいです それとも、もしかすると Gauche の添付ライブラリの中にありますか…? 一応自分でも書いてみたのですが かなり長〜くなってしまって。
(define (exclude-nth n l) (cond ((null? l) l) ((= n 0) (cdr l)) (t (cons (car l) (exclude-nth (1- n) (cdr l))))))
好みの分かれるところか? (define (exclude-nth n l) (append (take l n) (drop l ( + n 1)))) (exclude-nth 3 '(0 1 2 3 4 5 6 7 8 9)) =>(0 1 2 4 5 6 7 8 9)
>>715 takeは必ずリストつくるからappend!でセルを節約したくなる貧乏性な俺
レス感謝です。 >714 勉強になります。 >715 takeとdrop、こんなのあったんですね。 こんなに短くなるとは…
まさかこのオペレータを使う日が来るとは……。 (use gauche.sequence) (define (exclude-nth n l) (reverse! (fold-with-index (lambda (i e pr) (if (= n i) pr (cons e pr))) '() l))) ;(exclude-nth 3 '(0 1 2 3 4 5 6 7 8 9)) ;; =>(0 1 2 4 5 6 7 8 9)
>718 このオペレータ…とはどれのことなのか Schemeに不慣れな私には判りませんが …えーと… ちょっと勉強がてら気合い入れて読んでみます…
fold-right-with-index(仮称)があればreverseしなくていいのにね。
fold-rightはある意味reverse以上のコスト
【問題】
>>713 を不完全リスト(最後のcdr部がアトム)に対しても
適用できる様にexclude-nthを拡張せよ
ex.)
(exclude-nth 2 '(0 1 2 . 3)) => (0 1 . 3)
(exclude-nth 3 '(0 1 2 . 3)) =>(0 1 2)
(exclude-nth 4 '(0 1 2 . 3)) =>(0 1 2 . 3) ;; 同値
やってみました。あってる? (define (exclude-nth n ls) (cond ((null? ls) '()) ((= n 0) (if (not (pair? ls)) '() (cdr ls))) ((not (pair? ls)) ls) (else (cons (car ls) (exclude-nth (- n 1) (cdr ls))))))
つきあってくれてありがとう。 多分合ってる。 用意してた答えはコレ (define (exclude-nth n l) (let loop ((n n)(r '()) (l l)) (if (pair? l) (loop (- n 1) (if (= n 0) r (cons (car l) r)) (cdr l)) (if (null? l) (reverse r) (if (= n 0) (reverse r) (apply list* (reverse (cons l r)))))))) 我ながらapply list* reverseは美しくないよな・・
それって破壊もlist*も使わずに末尾再帰で書ける?
726 :
723 :2007/07/04(水) 14:30:40
named-letでもやってみたんだけど、いまいち自信がないというか…。 (define (exclude-nth n ls) (let loop ((ls ls) (n n) (acc '())) (cond ((null? ls) (reverse! acc)) ((= n 0) (if (not (pair? ls)) (reverse! acc) (loop (cdr ls) (- n 1) acc))) ((not (pair? ls)) (append (reverse! acc) ls)) (else (loop (cdr ls) (- n 1) (cons (car ls) acc))))))
list*相当を作っちまえば・・
(define (apply-list* l)
(define (loop l)
(if (and (pair? l) (pair? (cdr l)))
(cons (car l) (loop (cdr l)))
(car l)))
(loop l))
って、これは末尾再帰じゃないしな
>>726 appendすりゃよかったのね
>>709 λとlambdaが等価じゃないところ1つ見つけた
λxyz.E = λx.λy.λz.E
(lambda (x y z) E) ≠ (lambda (x) (lambda (y) (lambda (z) E)))
他にどんな違いがあるかなぁ
チューリング完全を実現するのに必要な 最低限のデータ構造って何だろう。 リストが使えないとダメなのかな?
例えば配列があればリストは作れる。チューリング機械の定義により何かの記憶機構は必要。
SKだけでチューリング完全なのに 純Lisp5関数でチューリング完全じゃない(?)のは不思議 eqやatomがTやNILを返すんじゃなくて carとcdrを返すなら何とかなりそうな気もする 関数を返す関数くらいは必要な気がする
>>713 CL loop マクロは見易いと思う。
(defun exclude-nth (n l)
(loop for x in l and idx from 0 if (/= idx n) collect x))
だけど
>>722 の不完全リストだと書けないかな。
>>729 整数が1つあれば十分だろ。コンピュータのメモリなんて見方によっては
ものすごく桁数が多い1つの2進数なんだし。
でもそれって結局、無限長の配列を仮定してることにならないかだぜ?
無限長の配列でも一つの整数でも同じことだろ。 どちらか片方あればもう片方が表現できる。
lispマシンってメモリアドレスって有ったんだろうか?
>>736 Symbolics社のはタグ付きアーキだったってC-FAQに書いてあった
だからポインターが数値でない
read-eval-printループのevalの部分を別のコンピュータで実行させるフレームワークみたいなのってない? 作ろうと思えば簡単に出来そうなんだが、誰かやってる人いないかなと思って。
slime
>>739 readしないでevalって言うのはできるん?
sexpを通信先のマシンでreplしてるところに食わせるのならslimeがそうじゃない
742 :
739 :2007/07/07(土) 21:43:31
>>740-741 サンクス
gauche使ってるんだが、gauche.listenerってのを見付けた。
ちょいいじってみる。
Gaucheでselect使ってサーバー書こうと思ってたんだけど質問。 selectで書き込み可能でも、ソケットバッファを越えたサイズを書き込もうとするとブロックするよね。 unixのwrite(2)ならバッファを全部フラッシュしないからブロックしないように書けるんだけど。 生のwrite(2)をそのままGaucheから呼べないの?
今はできないんじゃなかったっけな。0.9までになんとかするって話だったと思う。
>743 サーバ書くモチベをちょっとだけGaucheのソース修正に割くんだ。 そしてうまく動いたらパッチ提供してあげたら喜ばれるんじゃないかな。 ライブラリ作成者側のオナニーテストよりは実アプリによる動作テスト の方が意味あるだろうし。
746 :
743 :2007/07/10(火) 09:30:08
>>744-743 了解!
綺麗なソースコードだからちょっといじってみる。
cvs headに比べると、debian etchのやつはだいぶ古いんだな。
今のところはスレッド使う方向に逃げるってのが正解みたいだね。
747 :
743 :2007/07/10(火) 10:02:44
卒論を書かなきゃ行けないんだけれど、何も思いつかない。 思いついたとしても既に実現されている。 計算機の歴史なんてまだ100年もたっていないのに、 その先行研究の凄さにはひれ伏すしか無い、という 今日この頃の学部生なんですが、何か面白いお題ないですかね? スペックとしてはCommon Lispが出来るくらいなんですが。 「こんな事やったら面白いんじゃないの?」 とか 「コレが無いから困っている。でもつくるのメンドイ」 っていうの有りませんか?
>>749 え、無いの?
HTMLをS式で表現するものがあるのに?
751 :
749 :2007/07/11(水) 20:20:40
いや、あるかもしれんけど。 そんなに真剣に調べたことはないんで。
ちょっと違うかもしれないけどmaxima があるからなー>tex
>>748 オープンソース版のAllegroCache(OODB)作るってのはどうよ?
皆さんお返事有り難うございます。 そりゃ、自分もいろいろ考えたんですよ。 例えば色でプログラミングできたら面白いかな〜とかね。 正方形を9分割した物が有って、 白→nil 黒→t が決定。 んで色がいくつ塗っているかでチャーチ数を表す。 緑→(()) 緑と黄色→(()(())) だから、緑と赤は等しい訳です。直感的ではないですけれど。1=1なんで。 んで、最低限の関数の色を決める。 car→オレンジ とかね。 でも、これじゃ関数定義できないし、逆にややこしいし、 大きい数の計算は出来ないし、データ構造の定義は出来ないし、 何の役に立つのか説明しにくい。 んで、考えれば考えるほどどうすれば良いのか分からなくなって、 皆さん卒論でどんなことしていたか質問してみたんです。 すいませんでした。
卒論とかだと学問ぽく見せる必要があるから、Lisp 族は人気ないだろ。 強い型付けのメリットとして、とても研究な感じになるという利点があるから 卒論は Haskell とか ML 系でなんかごにょごにょするほうがお手軽じゃないかな。
> オープンソース版のAllegroCache(OODB)作るってのはどうよ? それならむしろAllegroStore
>>754 >強い型付けのメリットとして、とても研究な感じになるという利点があるから
>卒論は Haskell とか ML 系でなんかごにょごにょするほうがお手軽じゃないかな。
カリー・ハワード対応の事ですか?
それで、チューリングマシンの停止問題なんかを証明しても、
そりゃ学問的だけれども新規性がないんじゃ。
誰も証明してない命題が有るなら別なんでしょうけど。
>>755 AllegroStore?AllegroCache?
なんぞコレ?
clispしか使った事無いのでいまいち何に使うのかさっぱり?
総称関数を保存して共有できるようになる代物?
そもそもデータベースを触った事が無いからデーターベースからして
よくわかんないです。
一言で言うなら 卒論書く前にもっと勉強しろよ
まあ4年の7月なんてこんなもんだ。
>753 世の中にはGPGPUというものがあってだな
>>759 自分、面白そうな事思いついたです。
CUDA使って、Lispのインタプリタ作るのってどうでしょうかね?
そして、clispとどっちが計算が速いか検討するの。
これだと、今のところ誰もやってないだろうし、
リスト処理ってGPU向きの処理だと思いませんか?
761 :
デフォルトの名無しさん :2007/07/12(木) 04:03:19
わざとっぽいのは相手にしない方が
762 :
754 :2007/07/12(木) 07:51:20
>>756 どっからカリーハワードだの停止性判定だの証明だのがでてきたんだよ。
そーゆうんじゃなくて、なんか小物の研究でも Haskell や ML ならそれっぽく見えるだろって事。
つうかテーマは研究室の先輩や教官とよく相談したほうがいい…。
たとえば超並列分散 Lisp をつくるぜ!!と決めたとして、周囲の支援が得られず完全自力じゃ評価もまともにできんし、学費がもったいない。
じゃあ Lisp の型推論がどこまでできるかとか
>>762 >そーゆうんじゃなくて、なんか小物の研究でも
> Haskell や ML ならそれっぽく見えるだろって事。
>つうかテーマは研究室の先輩や教官とよく相談したほうがいい…。
>たとえば超並列分散 Lisp をつくるぜ!!と決めたとして、周囲の支援が
>得られず完全自力じゃ評価もまともにできんし、学費がもったいない。
いや、お恥ずかしい話なんですが自分の大学は大学院が無いんで
先輩なんていないんです。
それに指導教官は「何か作れば良いよ〜」という態度なんで
自由な反面、アイデアが必要なんです。
自分の友達は「大学のSNSをxoopsで作る」でOKと言われてました。
自分は「さすがにそれじゃアレかなぁ」と思って。
自分はCUDAでLisp処理系は面白い案だなと思います。
誰でも思いつきそうだけれど、今のところ誰もやってないし、
自分の処理系欲しかったんで。
それじゃ、パソコン買うところから始めなきゃならないんですが(Macなんで)
頑張ってみますね。
C言語は1年くらい触ってないし、マルチスレッドプログラミングは初めてなんで
不安ですが。
出来たらUpするんで、コードレビューしてください。
タライ回し関数が速く動くといいなぁ。
逐次処理しなきゃだめな部分は早くならないんじゃないのかな。
一口で大学と言ってもピンキリなんだな
型推論 1 (変数、戻り型が単一の型に定まる物) (define (ack m n) (cond ((zero? m) (+ n 1)) ((zero? n) (ack (- m 1) 1)) (else (ack (- m 1) (ack m (- n 1)))))) (ack (m ?x) (n ?y)) : (result ?z) から ?x ?y ?zの型を求める (zero? m) => (type_a) : bool 1 => int (+ n 1) => (int int) : int から ?x = int (zero? n) => (type_a) : bool m, nがintなのでzero?の引数は intと仮定して良い (- m 1) => (int int) : int から ?y = int 末尾コンテキストは+ とackのみなので?z = int これでack内の +-zero?演算子はintという前提で最適化でける ・・という感じで良い?
>(tail-map list '(a b c . d)) =>((a) (b) (c) d) (define (tail-map proc x) (let loop ((l x)) (if (pair? l) (cons (proc (car l)) (loop (cdr l))) (proc l)))) ;procをcdrにも適用する (tail-map (proc ?x) (x ?y)) : (result ?z) から ?x ?y ?zの型を求める (l ?v) = ?x (pair? l) (type_a) : bool この中ではl = pairと確定 (car l) => (pair) : type_b (cdr l) => (pair) : type_c (proc 〜) (type_a) : type_d (loop 〜) (type_c) : type_e (cons 〜) (type_b type_c) : pair (proc not-pair) : type_f 以上からprocは1引数でtype_aまたはnot-pairを受け取りtype_d|type_fを返す、 xはpairかnot-pair tail-map の戻り型は pair もしくはprocの戻り型に依存 ・・・もうわかんね
Schemeが(Haskellほどでないけど)関数的であるとされる根拠の1つに 識別子が一度ある場所に束縛されると 他の場所に束縛を変更される事がないっていうのがあるけど それをいうならCだって同じですよね? 一度宣言した変数のアドレスはスコープ内で一定 むろん関数的であるという最大の根拠は関数が第一級の値であるというところにつきるんでしょうけど でもR5RSでは関数のリテラル表記はない、でもそれぞれの実装でサポートしてもよいって扱いですけどね lambdaは関数のリテラル表記だっていう解説もちらほら見ますが
「識別子が一度ある場所に束縛されると他の場所に束縛を変更される事がない」ことが 「関数的である」とは思わないけど
>>771 いや、参照透過性とは関係ないのに
識別子の束縛が変更されない事に言及する解説をよく見る気がしたので
ヒント: 言論の自由
>>768 なんかところどころよくわかんないような。
自分で目の子でやったらこんな感じになったけど、どうかな。
まず (zero? m) から m : number
次に (+ n 1) から n : number
だから ack : number * number -> ?z で
else 節の (ack (- m 1) (ack ...)) の第二引数を見ると ?z = number
∴ ?x = ?y = ?z = number
zero?って渡される引数がnumberのみと限定していいのかな。 リストとか入ってきたらエラーでいいんだっけ? まあそういう判定が減るから全体で3倍ぐらい速くなるかな。 それはそれとして、ackみたいな単純なケースは結構作ってるうちに 適当なのができそうだからどうでもいいと思う。 問題は型が定まらない場合。 上、named-let余計だった。 (define (tail-map proc l) (if (pair? l) (cons (proc (car l)) (tail-map proc (cdr l))) (proc l))) まあ普通のmap1でもいいけど。 (define (map1 proc l) (if (pair? l) (cons (proc (car l)) (map1 proc (cdr l))) '())) この場合procが確定するまで保留にすべきなのかな? procは1引数取って何か返す、ぐらいの情報しかないよね。
>>775 > zero?って渡される引数がnumberのみと限定していいのかな。
R5RS みると (zero? z) と書いてあって、 z は複素数を表すメタ変数ということだから
そこは問題ないと思う。
で、今気付いたけど = にしてしまうとまずいね。例えば三行目で
(zero? n) が (<= n) だったりすると number ではダメで、
real に推論されなきゃいけない。
いや、この際大雑把に「数字かどうか」ぐらいの区別でよくないですか?
アドホックにでも最適化に結び付けて、お手軽に型推論による効果
を体感したいというか。
>>775 のmapにしてもフローチェックすればpair?の判定で
car/cdrのpair判定が省略できるとか、そんなレベルから徐々に
大掛かりな仕掛けを考えていければいいかなと。
え、そのほうが soundnessがいえるんですか? と、あえて誤読をしてみる。
誤読というより誤爆?
俺、凄い事思いついた! GHC立ち上げると、 Prelude> ってでるじゃん。 なんでプレリュード?とずっと思ってたんだけれど、 これってもしかして、 Franz Lisztの前奏曲から来てるんじゃないの? リストつながりで。
Franz Lisp
>>781 prelude って一般名詞じゃないの?
俺も Prelude は一般名詞だと思う。
ネタにマジレスなんとやら
ネタにマジレスを重ねるというネタだったのにマジレスされた…
でもそれが、ネタにマジレスを重ねるというネタにマジレスするというネタかもしれないと考えるのが危機管理というものではないだろうか。
ネタになりかけのレスと、ネタになる余地のないレスの区別ぐらいつきますわよ。
だがしかしそれは主観に左右されるものであるから、絶対的な答えなどないのではないか つまりは君の意見などどうでもよいのですわよ。
ここ、Haskell スレだと思ったら Lischeme スレだったのか!
むしろ寝たすれ家と思う田
自分がアホっぽく見える流れになっちゃったら、 「何か狙ってた」ことにして「お前らのせいでそれがダメになった」と嘆いとくのは基本。
誤爆?
アホの子はかあいいよ?
gaucheのCVS Headって、ここ最近コンパイルできたためしが無いんだけど、 これってパッチとか作る価値があるの? それとも、shiroさんの手元ではできてるの?
wilikiかlingrあたりで聞いてみたら? HEAD使ってる人は何人もいると思うけど。
普通にできてる。ドキュメントよまずにやってない?DISTほげ
798 :
795 :2007/07/21(土) 00:53:52
HACKING とかは読んでる。 Cのコンパイルじゃなくて、schemeコードを実行するところで ライブラリが見つからないとかいろいろ出る。 システム既存のgaucheと衝突してるのかなあ…? lingrで、makeにいろいろオプション渡すとできるよって言ってた人が いて、それで前進したけどまだ止まる もう少しあがいてみるかな
そうか。 俺は ./DIST gen を忘れてて、コンパイルできねーな?と思ってた事があったんでひょっとしてと思ったんだけどね。 で、どんなエラーメッセージなの?
>>795 俺もそれではまった。
最近はGauhceのコンパイルにGaucheを要求するので、
古いGaucheを使ってるとgoshがエラー出す。
Gauche 0.8.10(release)使えばコンパイルに成功する。
Gauche 0.8.10(release)すらコンパイル出来ないときは、
バージョンを一個ずつ上げてみて。
801 :
795 :2007/07/22(日) 17:34:53
schemeってcommon lispのsymbol-valueに相当するもの無いけどevalを使うしかないんですか? やりたいことはalistに文字と関数のペア入れておいてその関数を呼び出したいんだけど。 '(#\a . func_a) だとfunc_aは関数にならないから `(#\a . ,func_a) と書いてるんだけどいちいち','を書くのがめんどい。 こういうところはマクロを使うのがセオリーなの?
Schemeでは「symbolに値が入ってる」わけじゃないからね 処理系によっては実行時にはシンボルと値の結び付きは完全に忘れちゃってる 可能性もあるし。 処理系依存で良ければ、symbol-valueとかglobal-variable-refとかが使える 場合もある。ポータブルにやるならevalしかないだろうね。 「文字と関数のalist」とかは普通にバッククオート使っちゃうけどなあ。
個人的には evalも邪道だと思う。 そもそも R4RS には evalも必須じゃなかったし。 万独裁なら cons でも使え。
805 :
802 :2007/07/23(月) 11:14:54
>>803 なるほどね。R5RSをよく読んだらそう書いてあったよ。
Common Lisp陣営がSchemeを批判するときの論点がそこなのね。
>>804 確かにevalは使いたくない。
今まで通りquasi quote使って関数をunquoteすることにしました。
>>805 >
>>803 > なるほどね。R5RSをよく読んだらそう書いてあったよ。
> Common Lisp陣営がSchemeを批判するときの論点がそこなのね。
全然違うと思うが。
Schemeにも1st class objectとしてのシンボルがあればなあという
CLerもいるっちゃいるだろうけどさ。
ブラックボード黒田
kuroタソ(*´д`*)/ヽァ/ヽァ
809 :
デフォルトの名無しさん :2007/07/25(水) 09:38:10
810 :
デフォルトの名無しさん :2007/07/27(金) 01:42:56
質問があります。 lispで、他の言語も実装した(というか、DSLを作ってみたというか) 処理系があったと思うのですが、ご存じないでしょうか? lispでよく用途に合わせた言語を再実装したとう話を聞くのですが、 なかなか実例に合わず、う〜ん?と思っていたのですが、 これを見て、lispすげーと、唸った覚えがあります。 けっこう、最近の言語だったと思うのですが、ご存じないでしょうか? 確か、DSLとしては、ひとつとして、JavaScriptのサブセットを実装していました。 他の言語のサブセットもあったと思うのですが、覚えていません。 もしかしたら、Lispじゃなくて、もしかしたら、schemeの実装だったかもかわかりません。
811 :
デフォルトの名無しさん :2007/07/27(金) 01:58:31
もしかしたら、lispじゃなかったかもしれません orz うろ覚えなのですが、中間形式として、S式を使っていたような? 言語内に、いくつかのプログラムがあってそれを組み合わせて、使っていたような気がします。
>>811 『On Lisp』の24章に、Common Lisp による埋め込み言語としての Prolog 実装の話はあるけど。
ただ Prolog は最近の言語ってわけでもないし……。
Coke & Pepsi?
815 :
デフォルトの名無しさん :2007/07/27(金) 14:31:02
>>814 それそれ!!それです。
ありがとさんです。
CokeとPepsiとJoltです。
ただ、今見たら、素人の手に負えそうなものではないことがわかったw
オナニーしすぎてモーホー炎になりますたw
>>810 HaskellでPerlを実装した話じゃなくて?
haskellはschemeで作られました
schemeはschemeで作られました
820 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 13:11:31
・[1492] L2Lisp in Ruby((鈴))
静的スコープ、末尾呼出し(末尾再帰を含む)の最適化、およびマクロを備えた
近代的なLispの小さなインタープリタをRuby(およびJRuby)で作ります。Rubyの
データ型と親和性が高く、簡単に組込み関数を増設できる手頃なLisp処理系として
利用できます。
http://codezine.jp/r.x/czn077a/aid/1492
rubyなら継続も比較的簡単に実装できると思うんだけど なんでまた半端な物作るかな CL厨がまた文句言いにくるよ
「簡単に組込み関数を増設できる手頃なLisp処理系」に継続も装備させようという発想が凄いな。
手頃な処理系というのならForthの方が良いと思うけどな。 元にしたL2Lispのページを見ると、継続(というかcall/cc)は不完全らしいね。
Forth でも良いだろうし Lisp でも良いだろう 大して変わらんよ
>>821 漏れ CLer だけど……どの辺に文句つける要素があるんだ?
気にする事は無いよ
むしろ継続継続とSchemerが喰いついている件。まぁ、あんまり使われないだろうけど。Rubyistがわざわざこれを使うとは思えない。
いわんや Lisper おや
つーかLisperも使わんでしょこんなの
そういう問題ではない
なんだ、L2LispってPascalの処理系を移植しただけか。 ruby厨うぜえ。
>>825 ブラックボード黒田さんなら、黒板振り回しながら襲いかかるであろう仕様。
>>832 一般の Lispnik とは全く関係無いな
>>820 とてもコンパクトに出来ていて Ruby と Lisp の勉強になりました、
とレスしてほしいんだろw
継続ってのは後続のことですか?
836 :
デフォルトの名無しさん :2007/07/30(月) 15:43:41
荒らすなよRuby厨
838 :
デフォルトの名無しさん :2007/07/30(月) 17:45:09
Schemeの質問をお願いします。 下記@とAを実行した場合、 それぞれの結果になるプログラムを教えて下さい。 @(my_makelist 5) を実行した結果 (1 2 3 4 5) A(my_max ’(34 20 30 19)) を実行した結果 34
(define (my_max list) 34) (define (my_makelist n) '(1 2 3 4 5)) こんなかんじ
840 :
838 :2007/07/30(月) 19:40:06
>>839 さん
実行しましたが、以下の結果が返ってきません。
@(my_makelist 5) -> (1 2 3 4 5)
A(my_max ’(34 20 30 19)) -> 34
もう一度お願いします。
841 :
839 :2007/07/30(月) 19:46:15
うちでは動いています。 あなたの処理系のバグではないですか?
842 :
838 :2007/07/30(月) 20:00:01
あなたの頭に問題があんじゃないでしょうか?
844 :
838 :2007/07/30(月) 20:13:43
>>839 さん
@は以下の通りで何とかできました。
(define make_list(lambda (n)
(do ( (res (list n) (cons n res)) )
((= n 1) res)
(set! n (- n 1)))))
Aの方は、以下のmax部分がうまく作れません。
(max 34 20 30 19) -> 34
お願いします。
845 :
839 :2007/07/30(月) 20:19:04
それと同じ方法で書けば良いと思います
846 :
838 :2007/07/30(月) 20:23:56
>>839 さん
そこを何とか教えてもらえませんか?
Prologだと以下のようになります。Prologでまったりには 意地悪な人いないから、遊びにいらっしゃい。 my_max([A|R],Max) :- my_max(A,R,Max). my_max(Max,[],Max). my_max(A,[B|R],Max) :- B>A,my_max(B,R,Max),!. my_max(A,[_|R],Max) :- my_max(A,R,Max).
848 :
838 :2007/07/30(月) 20:29:15
>>847 さん
遊びに行きたいのはやまやまですが・・・。
Prologではダメなんです・・・。
初心者で申し訳ありませんが、
誰か優しい人お願いします。
無能にキレる人というのは、無能によく出会うレベルの学校や職場にいる人が多い。 滅多に無能に出会わないようなハイレベルな環境で生きてる人は、もっと「余裕綽々にイジる」。 でも、無能によく出会うレベルの環境に居るってことは、自分のレベルも知れた物なんだよね、実は。 そのくせ上から目線というのはどういうことかというと、つまり自分では優秀なつもりなのに 現実がそれをまったく反映してくれない、そのギャップへの苛立ちを、こういう場所での小爆発で 少しでも解消しようという行為なわけ。 黒板におでこくっつけて頭冷やしたほうがいいよw
>>838 俺だったらschemeの上のprolog乗っけて
>>847 のコード動かすけどな。
On Lisp prologでぐぐって
>>849 黒板に縛りつけられてチョークを出し入れまで読んだ
852 :
838 :2007/07/30(月) 20:57:30
あの、私女子大生なんですが・・・。 優しい方にはなんでもお礼しますから回答お願いします。
VIPでマンマンうpしたら考える
854 :
838 :2007/07/30(月) 21:04:40
(i) こうですか?わかりません(><)
>>838 通りすがりのものですが、行きがかり上こちらも書いておく。
my_makelist(N,L) :- findall(M,for(1,M,N),L).
実用上はこれで良いのだが、ただライブラリを利用したようなものだから、
my_makelist(N,L) :- my_makelist(1,N,L).
my_makelist(N,N,[N]) :- !.
my_makelist(N,E,[N|R]) :- plus(N,1,M),my_makelist(M,E,R).
とすれば、自分で書いた気がする。
なんでこのスレがこんなに伸びるのか(Part 17)、視察に来た
だけです。PrologでまったりはまだPart 2なので。失礼しました。
>>849 そんなことどうでもいいから答えてあげたら?
>>840 (define my_makelist (cut iota <> 1))
(define (my_max l) (apply max l))
ほい > (define (my_makelist n) (if (= n 0) () (append (my_makelist (- n 1)) (list n)))) my_makelist > (my_makelist 5) (1 2 3 4 5) > (define (my_max lst) (if (null? (cdr lst)) (car lst) (my_max (cons (if (> (car lst) (cadr lst)) (car lst) (cadr lst)) (cddr lst))))) my_max > (my_max '(34 20 30 19)) 34
(define my-max max) のほうがいいんじゃ... apply 使う意味がわからん
861 :
858 :2007/07/30(月) 22:45:58
(define (make_list n) (define (ml n l) (if (= n 0) l (ml (- n 1) (cons n l)))) (ml n '())) (define (my_max l) (define (max2 x y) (if (> x y) x y)) (define (mm x l) (if (null? l) x (mm (max2 x (car l)) (cdr l)))) (mm (car l) (cdr l)))
>>839 の動かないScheme処理系ってあるの ?
>>850 scheme なら schelog がいいんじゃない?
865 :
838 :2007/07/31(火) 18:45:58
>>859 さん
>>862 さん
来るのが遅くなりましたが、
問題なく実行できました、
有難う御座いました。
866 :
838 :2007/07/31(火) 18:47:26
もう一度、質問をお願いします。 以下のような結果が得られる、 前置記法から中置記法へ変換する手続きを教えて下さい。 (prefix->infix '(+ (* a b) c))) を実行した結果 (a * b + c) (prefix->infix '(* 4 (** x 3))) を実行した結果 (x ** 3 * 4) お願いします。
867 :
838 :2007/07/31(火) 19:10:41
exp、opr、opd のスタテックポインターを使って実行したいのです。 すいませんが、教えて頂けませんか?
868 :
838 :2007/07/31(火) 19:12:11
× スタテックポインター ○ スタックポインター 間違えました。
「質問をお願いします」ってのは日本語としておかしい
>>867 そういう宿題がでるときはスタックつかって前置記法の式を中置記法に
手で変換する方法の説明があると思うけどな。それをプログラムであらわせば
いいだけだ。
871 :
838 :2007/07/31(火) 19:19:55
確かにそうでした。
>>866 に対する回答をお願いします。
>866 詳細不明だしあとは自分でやれよ (define (prefix->infix p) (if (pair? p) (let ((l (prefix->infix (cadr p))) (r (prefix->infix (caddr p)))) (append (if (pair? l) l (list l)) (list (car p)) (if (pair? r) r (list r)))) p))
Schemeによる記号処理入門の演習問題5.8だね。
とりあえず、状況がわからんので答えてね。
>>838 1. 宿題の正確な問題文
2. 宿題の期限はいつまでか?
3. 教科書は手元にある?どこまで読んだ?
4. 教育的なヒントがほしいの?それともズバリ答えのほうがいい?
ずばり答えてあげると本人のためにならなくて良いな
一つ問題に答えてあげる代わりに 一つ問題を解いてもらえばいいんじゃないか 何が良いかな
嫁姑問題とかどうだ
つーか>838も自力解決できない奴に何か期待しても無駄。
彼はFizzBuzzをちゃんと書けるんだろうか
演算子の結合優先順位とか気にしなくていいのかなあ。とおもった。
気にしようぜ
演算子? そんなものあったっけ?
885 :
872 :2007/08/01(水) 19:17:16
一応
>>872 に演算子の優先度追加したのも用意してたけど、
本人から何も反応ないしやめておく
そうなんだよな。ズバリ答えていいのか、872 みたいに段階的にいくべきなのかわかんないんだよなー
教育的回答をすればなんとかなるレベルの質問者じゃないので、 回答者とギャラリーが面白いと思う方でいいんでないの?
そーゆう上から目線はいくないと思うよ。
>>887 俺も昔は NetNews とかで痛い厨房だったけど、親切な上級者に諭されて目が醒めた。
だれだって慣れない内はちょっと痛い言動もあるし、上級者から見ればアホっぽい質問することだってあるさ。
何から手をつけていいからわかんないから答えをみながら考える、だって一概に間違いとは言えないだろう。
887が上からの目線とは思わんけど
慣れないうちとかそういう問題じゃないと思うな今回の人は
「教育的回答をすればなんとかなるレベルの質問者じゃない」ってなんで決めつける? とか思ったんだけど、まあ、すまんかったね。空気悪くする気はなかったんだ。黙っとくわ。
まあ放っておこう はい次。
schemeそのものとあんまり関係ないかもしれんけどさ、 R6RS(正確にはR5.97RS)で追加されてる "mantissa width"ってなんのこと? 直訳すれば"仮数部長"あたりだと思うんだけど、何? ぐぐってもよくわからんです 仕様を見るに、 "3.14 | 10" みたいに書くのかな?
>>894 単精度・倍精度のような実装依存の値ではなく、必要な桁数を要求して、
実装が単精度・倍精度を判断できるということでは?
>>894 R5.97RSのどこに書いてある?見つからんかった。
多分実数の印字表現の仕方の話なんだろうけど、
浮動小数点数の 仮数*基数^指数 の仮数の精度かな。
12345 = 0.12345*10^5 、これの0.12345に相当する部分の幅。
>>895 d
てか、schemeって、複素数とか妙に数値に細かいよな…
>>896 俺がさっき落としたPDFだと、13ページ左下
<ureal R> −> <uinteger R>
| <uinteger R> / <uinteger R>
| <decimal R> <mantissa width>
んで、<mantissa width>の定義は13ページ右上
<mantissa width> −> <empty>
| | <digit 10>+
>>894 C言語で浮動小数点定数を
float f1 = 3.14f;
double f2 = 3.14;
とすると,バイナリで見たときf1とf2には別のデータが入るよね?
人間は浮動小数点定数のバイナリ表現を書くのが面倒だから "3.14" 等とだけ書いてコンパイラに変換させているわけだが
このときコンパイラに「IEEE single相当(仮数が23+1桁)の範囲で最良の3.14の近似を使ってくれ」 or
「IEEE double相当(仮数が52+1桁)の範囲で最良の3.14の近似を使ってくれ」と区別した指示を与えてることになる.
この一般化で,"3.14 | 10" は「ここの定数には,仮数が10桁の範囲で最良の3.14の近似を使ってくれ」と要求していることになる.
これは当然IEEE singleよりは桁が多いし,またIEEE doubleよりは桁が小さいので
普通に3.14と書いてデフォルトの52+1桁(以上)の数に変換させたときとは違う演算結果を得るだろうね.
Mathematicaやbc(1)のように浮動小数点数データの内部に「有効桁」という属性が含まれるようになる,という意味ではないよ.
ソースコード内の "3.14" などという文字列から処理系内部の数表現への,対応付けの厳密化だね.
指数表記にe, s, f, d, lの区別ができたり,ずいぶん細かくなったものだ.
>>896 R5.97RS 4.2.8 Numbers
899 :
894 :2007/08/02(木) 03:05:51
細かい話だけど、
>>898 は
> "3.14 | 10" は「ここの定数には,仮数が10桁の範囲で
> 最良の3.14の近似を使ってくれ」と要求していることになる.
って書いてるけど
R5.97RSの該当部分を読むと
Implementations that use binary floating-point representations
of real number objects should represent x|p using a
p-bit significand if practical, or by a greater precision if a
p-bit significand is not practical, or by the largest available
precision if p or more bits of significand are not practical
within the implementation.
ってことなので、仮数部の指定が"実装内で現実的で無い"場合は
それより大きい仮数部を持つ浮動小数点表現をすればOK、という風に
読めるけど違うかな?メモリ量を最適化しようとする実装に対して
仮数部の最低ビット数を指示するためにある、という風に俺は解釈するけど、
どうなんだろう?
言い換えると、小さい仮数部pが数値が指定されたときにわざわざdoubleから
落としてsingleにする必要性があるのかってことだけど。
多くの処理系ではわざわざ定数をsingleにはしないだろうけど、もしそれで高速になるならば しても良いという(コンパイラに対する)ヒントにはなるわな。 (そこまで最適化する処理系は少ないだろうけど)
common lisp の処理系で > (hogehoge '#+ 1 '(1 2 3 4)) (2 3 4 5) となる関数は無いでしょうか? > (mapcar '#+ '(1 1 1 1)'(1 2 3 4)) (2 3 4 5) でもいいんですが、リストの長さが不明な場面なので、 > (mapcar '#+ (make-sequence 'list (length'(1 2 3 4) :initial-element 1))) こういう感じの実装くらいしか思いつきません。 もし標準的な関数があればそちらを使いたいところです。 よろしくおねがいします。
足すのが1に決まってるなら (mapcar #'1+ '(1 2 3 4)) 決まってないなら (mapcar #'(lambda (x) (+ x 1)) '(1 2 3 4)) でいいんじゃないの? なにか書いてない他の制限があるなら知らんけど。
(mapcar #'(lambda (x) (+ x 1)) '(1 2 3 4))
>>899 10進法の1.2は2進法で1._0011_(2) ("_"で括った部分を繰り返し)という循環小数になるのでそれを例に採る.
私の理解ではその段落の意味するところは:
IEEE doubleを使うプロセッサ上の処理系は
"1.2d0" => 0 01111111111 00110011(40桁の略)0011
"1.2s0" => 0 01111111 00110011(12桁の略)001
or 0 01111111111 00110011(40桁の略)0011 (←2行上と同じ; 処理系が "practical" だと思えばこうなる)
となるだろう.ところが
"1.2 | 10" => 0 01111111111 001100110(この先,0が43桁続く; けちビットに注意)
となる(という私の理解).
2進10桁の精度で得た浮動小数点数を(例えば)IEEE double形式に「広げて」メモリに格納するということ.
C言語で
double f = 1.2f;
と書いたとき,fに格納される浮動小数点数が10進16桁の精度でなく8桁の精度しか持たないのと同じイメージ.
905 :
デフォルトの名無しさん :2007/08/03(金) 17:39:40
(define sqrt2 (lambda (n) (if (zero? n) 0 (+ 1 (/ 1 (+ 1 (sqrt (- n 1))))))))
906 :
901 :2007/08/07(火) 10:07:27
>>902-903 mapする関数側で工夫すればいいのですね。
スコープに注意しながら実装を進めてみます。
ありがとうございました。
>>904 俺の最初の質問に照らして読ませてもらうと、小さい
仮数部が指定された場合に、
・精度の低い浮動小数点表現に丸めた上で、残りは0を補充して格納する
・精度が大きい(greater)ぶんには特に問題なし
というのだと前者ということ?
(define (int-gen n m) (if (> n m) (list) (cons n (int-gen (+ n 1) m)))) これで、 (int-gen 3 10) とすると、(3 4 5 6 7 8 9 10)のリストができますよね? このリストの要素を全てnにしたいのですがそうすればよいでしょうか? (3 3 3 3 3 3 3 3)のような感じです。
(make-list (- m n -1) :initial-element n)
(loop for i from n to m collect i) (loop repeat (- m n -1) collect n)
皆さん、Scheme書くときエディタ何使ってますか?
黒板
俺も黒板
2chブラウザ
とりあえず対括弧の強調は必須だが 普段サクラエディタ使ってるが 単語登録じゃハイフンで切られちゃって上手く行かず 正規表現コメントで限界まで登録…だけど ちょっとオススメ出来ないなあ emacsとかxyzzyとかだと大丈夫なのかな キーバインド苦手で使ってないが
Emehcs
xyzzy + winkey + scheme-mode 試してみた 導入は手間だが、使えるね Scheme用にしばらく使うことになりそう、thx!
MrEd
4回の授業でこんな課題出すんじゃねえこんちくしょうが!!!!!!1
自分で選んだ道だろうが小僧
vim+mzschemeうまく動く?
MzScheme も MrEd も DrScheme のやつか
on lisp を読んでる女子高生とアナフォリックマクロについて語り合いたい。
そんな幸せな場面想像したこともなかったわ。
927 :
デフォルトの名無しさん :2007/08/11(土) 05:37:54
"The little schemer"を読んでいるのですが、その中の始めに、 (((how) are) ((you) (doing so)) far) の中にアトムが3個あるらしいのですが、どうしてですか?
アトムは12個じゃない?
要素は3個だと思うが。
930 :
デフォルトの名無しさん :2007/08/11(土) 11:22:21
一番外側のリストの要素って ((how) are)と((you) (doing so))とfarとnilの4個じゃないの? それとも要素数っていう場合最後のnilは数えない?
その最後の nil のみの () 空リストは通常要素ゼロと数えます。 リストの要素というのは通常 cons セルの数。 () = nil : 要素数ゼロ (1) = [ 1 | ] -> nil : 要素数 1 (1 2) = [ 1 | ] -> [ 2 | ] -> nil : 要素数 2 で、問題のやつは cons セル 3 つなので要素数 3。 [ ((how) are) | ] -> [ ((you) (dosing so))| ]-> [ FAR | ]-> NIL
933 :
931 :2007/08/11(土) 12:35:56
このばか者が!ワシに分かるようなプログラム言語にしないか!
括弧だけなんだからわかりやすくて楽じゃん。 C++の難解さときたら・・・
やだやだforthくらいわかりやすくないとやだ
Lispを判りやすいと思う人の数>Forth(r
Python が一番読みやすい lisp は要素が横方向に膨らみすぎる
pyはなんか構文の後ろに:とか変なしるし付けないといかんのが嫌 pascalの.みたいにキモイ インデントだけで済むとか言って余計な事が多すぎる 結局括弧使ってるし
インデントベースでカッコのないlispってないの?
カッコなんて気にしない
そう言い残して彼は秋葉原へ行きました 額にはバンダナを巻いて
pythonは掲示板にコード貼れない悲しさがあるね
SRFIの範囲ってわけわからんな。 どうせならpython風フロントエンドでも定義すりゃいいのに。
>>941 ちょっとそこサンプル眺めただけだけど、pythonの構文規則て面倒だと思うよ。
何がダメで何が許されてるのか判りづらい。
よくこれで破綻しないなと逆に感心してしまった。
そのサイトのpythonサンプルって既成のライブラリ呼んでるのが殆どで
読みやすいかどうかは判らなかったけど、例えば
http://ja.doukaku.org/33/lang/python/ これのライブラリ使ってない方のコードのyieldとかの掛かり先の判りにくさとか。
COBOLみたいにカラム表示のあるエディタじゃないと厳しい。
インデント位置がほんとにそれで合ってるのか疑ってしまわない?
(LISPなら汚く書いてもppで大抵読めるコードになる)
じゃあエディタにカラム表示をつければいいんだ。 ・・・え? そういう問題?
Pythonは紙に印刷したら定規あてて読まないといかん マジで
Python はネスト深いとそうなるよなw とは言え、C++ や Ruby ほどには破綻してないと思うよ 両方ともパーサに優しくない上に C++ はもはや人間にすら読みづらい言語だし Ruby は一見読みやすいがパーサの細かい挙動に気をつけないとハマる あと Perl は…可読性とか考えたことあるのかなラリーってw 書いた時点でほぼパース済みの Lisp系はそういうことは無いわな エディタに括弧対応の表示がないと辛いのが難点か
Perlって、悪いところ上げればキリがないと思うけど、 でも日本で名が知れたハカーでPerl常用してる人多いよね(宮川さんとか小飼弾氏とかはてな伊藤さん)。 あれって惰性で使い続けてるのか、それとも使いやすいから 使ってるのかよくわからんね。すごい人にとってはPerlって いい言語なのかな。スレ違いでゴメンね。
perlは文系が好んで使う言語です 何故か
いくら「すごい人」が使っていても自分が嫌いなら気にすることはないと思う。
>>951 彼らは高次視覚野のニューロンがPerl向きに学習されている。
常人は真似しないほうが無難であろう。
Perlが常人向けじゃないなら、LispやSchemeはどーなんですか?
>>951 その連中は、派手に花火を打ち上げてるから目立つPerl者であって、
別にハッカーでもないだろ。
CPANがあるからじゃね?
Perlはできることが強力だからな、CPAN
途中で書きこんじまった CPANも含めて。 多少の構文の違いなんて大した問題じゃないって人も多いし
不感症なんですのね
CPANはいいよね・・・ RubyforgeとかCheese Shopなんて霞んで見えてしまうぐらいに ましてasdfなんて、ね
CPANのLISP版CLANて意味ないかな。 やっぱ実装が沢山あると難しいか。 ネットワーク系弱いし。名前負けしてるw
asdfでぐぐると痛そうなページがトップっすね
末端消費プログラマばかりなんだな、ここは。
次スレからタイトルを実際に即して「RubyとPythonとLisp Scheme」にしろよ
>>965 「大抵の人」は「Rubyのほうが読みやすいと思う」んだろ?まぁ、普通にそうなんじゃね。
その手の話は腐るほど見てきてるし、そう思う気持ちもわからんではないが、
何度も何度も同じ話を聞かされてるんで食傷気味。Matz が同じようなこといってるから
Matz 日記でやると同志がいっぱいいると思うよ。
CRANがそれだろ。lispは実用のみ
>967 夏だからだよ
CLだとガード節相当はreturn-from 関数名とかで書けるけど schemeだとやっぱ継続?
サマースクールモードなのか
>965 Rubyは間違いなく読みやすい部類だよ。 ただ、パーザの挙動が判りづらいから 読んだ通りの動きになってくれてるとは限らないところが落とし穴。 Lisp系のパーザの挙動は見たままだろうw
>>971 (define-macro (return-from% name . result) `(,name ,@result))
(define-macro (block% name . body) `(call/cc (lambda (,name) ,@body)))
(define-macro (define% name . body)
(if (symbol? name)
`(define ,name (block% ,name ,@body))
`(define ,(car name)
(block% ,(car name) (lambda ,(cdr name) ,@body)))))
(define% (test1 x)
(if (not (number? x))
(return-from% func #f))
x)
;;
(test1 1) => 1
(test1 'a) => #f
まあ、つまり見たまま。
(return-from% test1 #f)) だった。 おれには衛生的なやつは無理。
(define% test2 (lambda (x) (if (not (number? x)) (return-from% test2 #f)) x)) (test2 1) => 1 (test2 'a) => #f うむ、ちゃんと動いてるな。 ただ、これだと普通の再帰ができなくなる。 nameを加工するかしないと。
>>974 (define test1
(call/cc (lambda (test1)
(lambda (x) (if (not (number? x)) (test1 #f)) x))))
これって継続呼んだ時点でdefineの束縛フェーズに戻って
test1が継続の返り値に書き換わるんじゃない?
>>968 例えば他の言語ならifの中で束縛を使いたいならifのスコープをその束縛のスコープとして適用して簡略化する
lispの場合はifをletでくるむ形で束縛のスコープを設定する
これはifのスコープとは別に束縛のスコープを記述できる分表現力は高いがネストが深くなり見た目も多少複雑になる
別にlispを全否定している訳じゃ無いしその分lispは力を得ることがで来ていると思う
ただ他の言語より可読性が高いとは思わない
>>973 人間コンパイラきたーw
>>977 あー間違った。call/ccをlambdaの中に入れといて。
どっちみち不完全だけどさ。
>>978 他のスレでやれば賛同者多数だと思うんだがね。
このスレに自分の意見に賛同しない人がいる限りとかいったら延々とネストだの括弧だのって話を繰り返す気なのか?
そういう意味のないレスならしないほうがいい
元ネタからして意味がないので続かなくていいよ
反応が小学生だなw
相手が小学生レベルだからな。
Gauche本、まだ出ないのかなぁ
なんか伸びてると思ったらいつもの話題か。
可読性、最強言語選手権、黒板 の三本立てでこのスレは成り立っています。
次スレよろ
それなりに言っていることはわかる 慣れれば気にならなくなるが可読性が高いわけじゃないからな というか誰かLispの可読性が高いなんて言ったっけ?
少なくとも俺には可読性高い。(ちゃんとインデントされていれば) 他の人間のことは知らんし、あまり興味無い。
インデントがあれば括弧はいらない!
比較する条件次第、という面がLispは特に強い気はする。 インデントをいったんすべて無くして、エディタの力を何も借りられない条件下で 「さあ把握してみろ」みたいな勝負なら、そりゃあもう大惨敗だけど、 その両者がきちんと揃うと、途端に「そう一方的に負けてるもんでもない」って位置へ上がる、みたいな。 まぁ、客観的な話ではないけれども。
括弧が多いと Emacs でカーソル移動が楽になる
インデントの話が出たんで、ちょっと質問なんですが、 Emacs + slime-mode で loop のインデントが次のようになります。 (loop as n = (progn (format t "~&Number: ") (parse-integer (read-line) :junk-allowed t)) while n do (format t "~&The square of ~D is ~D.~%" n (* n n))) これを下のようにするには、どう設定すれば良いでしょうか? (loop as n = (progn (format t "~&Number: ") (parse-integer (read-line) :junk-allowed t)) while n do (format t "~&The square of ~D is ~D.~%" n (* n n)))
結局インデントで見ているんじゃPython批判できないじゃん
>>997 つかPythonも好きな奴多いと思うけど。
lambda埋め
でもRubyは嫌い
1000ならロト6で1等当選
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。