[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 19:46 / Filesize : 220 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part17



1 名前:デフォルトの名無しさん [2007/04/20(金) 19:41:39 ]
Lisp全般のスレです

過去スレ
Part16: pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: pc5.2ch.net/test/read.cgi/tech/1075630259/
Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/

http://が多すぎるらしいので分割

662 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:22:31 ]
ttp://blog.so-net.ne.jp/rainyday/2007-02-21

PAIP 読んだ事無いけど、λの発祥が ^ だとは知らんかった。

(^ (x) (* x x))

何気に良いんじゃないだろうか...

663 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:32:50 ]
今や (λ (x) (* x x)) で良いんじゃないかという気もする

664 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:59:50 ]
あちらの人はどうやって入力するんだ?

665 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:03:06 ]
ギリシャ人ならへっちゃらだな(本当か?)

666 名前:デフォルトの名無しさん [2007/07/01(日) 19:05:54 ]
>>662
え、めっちゃ有名な話だと思ってたよ。
俺の持ってる本にも書いてあるし。

667 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:07:11 ]
>>664
λ

668 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:26:31 ]
>>662
顔殴られたクマーみたい

669 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:36:59 ]
lambdaと打ったらリガチャ扱いでλ出す、くらいのことは出来るだろう

670 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:03:58 ]
>>666
俺、貧乏で本買えないから…



671 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:11:24 ]
>>670
図書館行くとよいぞ。


672 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:24:56 ]
関係ないけど、教養のためにとλ計算のプログラムを今書いてますが、
bashとかperlみたいに$を使う事にしてます。
(厳密には$と.で識別子を挟む。)
束縛子に$を使って、参照は識別子そのままなので、用法は逆ですけどね。
($m. $n. $s. $x. m s (n s x)) ($s. $x. s x) ($s. $x. s (s x))
こんな感じで

673 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:00:01 ]
>>671
あんた賢いな

674 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:12:31 ]
SKKのほうがいいよ

675 名前:デフォルトの名無しさん [2007/07/02(月) 07:03:32 ]
>>660
>>661
とても親切な返答有り難うございます。分かりました!


676 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 07:43:04 ]
>>662
俺LISPで採用けってい

677 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 11:00:15 ]
俺Lisp作ってる人ってどれくらいいるのかな

678 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:27:38 ]
少なくとも今ある処理系の数だけあるよな

679 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 14:14:52 ]
俺LISPといえるほどの独自仕様の処理系ってそんなにあったっけ

680 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 16:35:54 ]
だから俺Lispなんじゃね?



681 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 18:14:29 ]
lispじゃないけど>>662っぽい記法使ってる言語には
bugyo.tk/~zick/cosak/
こんな変なのがあったぞ。

682 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:18:53 ]
ホントだ、良く見つけたね。

個人的には ^ は return に見えてしまう...

683 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:55:16 ]
このSmalltalkerが

684 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:32:48 ]
Metaluaはluaでlispのマクロっぽい事ができるらしい。
いっちょ前にquasi-quoteっぽい仕組みまである(様に見える)。

685 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:31:01 ]
本質的にはλは開き括弧、.は閉じ括弧だから
[]でも<>でも{}でも`'でも良いのに
接頭字+空白セパレタが主流なのはなぜなんでしょうね?

686 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:34:22 ]
書き込んでから気づきましたが
歴史的には接頭字の方が先なんでしたね

687 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 14:32:31 ]
質問です。
アトムとリストと、
car,cdr,cons,atom,eq
これでどうやって足し算が出来たりするのでしょうか?

688 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 14:41:01 ]
>>687
チャーチ数 でググれ

689 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 14:42:49 ]
リストの長さで0以上の自然数を表すのがよく使われる手だね。
そうすると足し算はappendになる。他も自分で考えてみな。



690 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 14:54:04 ]
あ〜、足し算はappendなのか。
だいたいイメージつかめた。
有り難うございます。



691 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:35:22 ]
ん、やっぱりなんか引っかかります。
リストの長さで0以上の自然数を表すなら、
()=0
(())=1
((()))=2
は納得できるのですが、
これでどうやってリストを表すのでしょうか?
アトムしか表現できないんじゃないんですか?

692 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 18:49:44 ]
()
(())
(() ())
(() () ())

693 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:35:56 ]
>これでどうやってリストを表すのでしょうか?
言ってる意味が分かんないなぁ

694 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:56:23 ]
砂場の石ころでもできる
だから何ってやつ

695 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:13:45 ]
何段階かの問答を経て、ようやく「自分が何を訊ねたいのか」を掴む質問者っているけど、
この人もそれと同様、これから自分の疑問の内容がわかるんだと思う。

696 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:36:29 ]
ttp://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001094

リスパーなら演技くらいはできないとな。

697 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:42:57 ]
マジな話、Lisperと話しするときは教養がいるよ。
プログラム言語の話とかだけじゃ相手にしてもらえない。
科学好き、数学好きとかが多すぎる。

698 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:03:06 ]
個人的には数学は敬して遠ざけておきたい

そんな僕でも立派なLisperになれるでしょうか

699 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:09:47 ]
ところで河合さんの頭は本物なの?


700 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:13:10 ]
>>698
GNU GPLを暗唱できたらあるいみ立派なLisperになれるかも!



701 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:14:31 ]
687さんは純Lispが五つの基本関数「だけ」で
本当にチューリング完全かどうか
疑問に思ってるんじゃないですか?

ちょうど1ヶ月前の自分と同じで

マッカーシーの論文斜め読みしたら
関数は五つで良いけど
→表記も含まれるから
condかifスペシャルフォームも必要みたいに感じました

本当に五つの基本関数(と真偽値)「だけ」でチューリング完全なら
自分にも教えてください

702 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:15:18 ]
Lisp と GPL は全く関係無いな

703 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:25:57 ]
おいおい、Gの付く話はやめてくれよ

704 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:35:59 ]
>>701
再帰かループがないとどうにもならんよ


705 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:41:00 ]
大前提としてλ式が必要

706 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:41:26 ]
>>704
と、いうことはcondまたはifと
関数抽象のためのlambdaが必要ということになりますか
要素としては5関数2特別式でチューリング完全

707 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:44:52 ]
そうか、lambdaだけでチューリング完全ですね
でもそうすると5関数の立場が…

708 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:48:57 ]
Lispエバリュエータを書くのに最低限必要な関数だと思うが

709 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:51:55 ]
λ算法とLispのlambdaは等価ではないので

710 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:01:19 ]
そういやifはλで表現できたんだな…。



711 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:07:44 ]
>>709
どこらへんですか?
正格評価だからですか?

712 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:57:12 ]
>>708
チューリング完全である≠"apply" or "eval"が記述できる
lambdaがあればチューリング完全だけど
"Lisp"の機能を満たすために5つの基本関数が必要である

ってことですか?

713 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 10:57:50 ]
リストの n 番目「以外」の要素のリストを得るにはどうすれば良いでしょうか
例えば (0 1 2 3 4 5 6 7 8 9) から 3 を除いた (0 1 2 4 5 6 7 8 9) が欲しいです
それとも、もしかすると Gauche の添付ライブラリの中にありますか…?

一応自分でも書いてみたのですが
かなり長〜くなってしまって。

714 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 11:10:12 ]
(define (exclude-nth n l)
(cond
((null? l) l)
((= n 0) (cdr l))
(t (cons (car l) (exclude-nth (1- n) (cdr l))))))


715 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 11:25:50 ]
好みの分かれるところか?
(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)


716 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:12:11 ]
>>715
takeは必ずリストつくるからappend!でセルを節約したくなる貧乏性な俺


717 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:56:33 ]
レス感謝です。

>714
勉強になります。

>715
takeとdrop、こんなのあったんですね。
こんなに短くなるとは…

718 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:58:18 ]
まさかこのオペレータを使う日が来るとは……。

(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)

719 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:03:35 ]
>718
このオペレータ…とはどれのことなのか
Schemeに不慣れな私には判りませんが
…えーと…
ちょっと勉強がてら気合い入れて読んでみます…

720 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:05:28 ]
fold-right-with-index(仮称)があればreverseしなくていいのにね。




721 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:29:05 ]
fold-rightはある意味reverse以上のコスト


722 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:41:43 ]
【問題】 >>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) ;; 同値

723 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:59:22 ]
やってみました。あってる?
(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))))))

724 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 14:21:52 ]
つきあってくれてありがとう。
多分合ってる。
用意してた答えはコレ

(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は美しくないよな・・

725 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 14:28:04 ]
それって破壊もlist*も使わずに末尾再帰で書ける?

726 名前:723 mailto:sage [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))))))


727 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 14:33:34 ]
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すりゃよかったのね

728 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:17:00 ]
>>709
λとlambdaが等価じゃないところ1つ見つけた
λxyz.E = λx.λy.λz.E
(lambda (x y z) E) ≠ (lambda (x) (lambda (y) (lambda (z) E)))
他にどんな違いがあるかなぁ

729 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:50:27 ]
チューリング完全を実現するのに必要な
最低限のデータ構造って何だろう。
リストが使えないとダメなのかな?

730 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:59:27 ]
例えば配列があればリストは作れる。チューリング機械の定義により何かの記憶機構は必要。



731 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:13:14 ]
SKだけでチューリング完全なのに
純Lisp5関数でチューリング完全じゃない(?)のは不思議
eqやatomがTやNILを返すんじゃなくて
carとcdrを返すなら何とかなりそうな気もする
関数を返す関数くらいは必要な気がする

732 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:16:37 ]
>>713
CL loop マクロは見易いと思う。
(defun exclude-nth (n l)
(loop for x in l and idx from 0 if (/= idx n) collect x))
だけど >>722 の不完全リストだと書けないかな。

733 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:57:12 ]
>>729
整数が1つあれば十分だろ。コンピュータのメモリなんて見方によっては
ものすごく桁数が多い1つの2進数なんだし。


734 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:59:48 ]
でもそれって結局、無限長の配列を仮定してることにならないかだぜ?

735 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:04:59 ]
無限長の配列でも一つの整数でも同じことだろ。
どちらか片方あればもう片方が表現できる。

736 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:19:56 ]
lispマシンってメモリアドレスって有ったんだろうか?

737 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:41:20 ]
>>736
Symbolics社のはタグ付きアーキだったってC-FAQに書いてあった
だからポインターが数値でない

738 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 02:14:33 ]
>>736
なくてどうする

739 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 20:47:56 ]
read-eval-printループのevalの部分を別のコンピュータで実行させるフレームワークみたいなのってない?
作ろうと思えば簡単に出来そうなんだが、誰かやってる人いないかなと思って。

740 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 21:21:17 ]
slime



741 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 21:22:26 ]
>>739
readしないでevalって言うのはできるん?
sexpを通信先のマシンでreplしてるところに食わせるのならslimeがそうじゃない


742 名前:739 mailto:sage [2007/07/07(土) 21:43:31 ]
>>740-741
サンクス

gauche使ってるんだが、gauche.listenerってのを見付けた。
ちょいいじってみる。

743 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:23:48 ]
Gaucheでselect使ってサーバー書こうと思ってたんだけど質問。
selectで書き込み可能でも、ソケットバッファを越えたサイズを書き込もうとするとブロックするよね。
unixのwrite(2)ならバッファを全部フラッシュしないからブロックしないように書けるんだけど。
生のwrite(2)をそのままGaucheから呼べないの?

744 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 05:40:22 ]
今はできないんじゃなかったっけな。0.9までになんとかするって話だったと思う。

745 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 06:42:30 ]
>743
サーバ書くモチベをちょっとだけGaucheのソース修正に割くんだ。
そしてうまく動いたらパッチ提供してあげたら喜ばれるんじゃないかな。
ライブラリ作成者側のオナニーテストよりは実アプリによる動作テスト
の方が意味あるだろうし。

746 名前:743 mailto:sage [2007/07/10(火) 09:30:08 ]
>>744-743
了解!

綺麗なソースコードだからちょっといじってみる。
cvs headに比べると、debian etchのやつはだいぶ古いんだな。

今のところはスレッド使う方向に逃げるってのが正解みたいだね。


747 名前:743 mailto:sage [2007/07/10(火) 10:02:44 ]
アンカミスった>>744-745だった

748 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 04:17:03 ]
卒論を書かなきゃ行けないんだけれど、何も思いつかない。
思いついたとしても既に実現されている。
計算機の歴史なんてまだ100年もたっていないのに、
その先行研究の凄さにはひれ伏すしか無い、という
今日この頃の学部生なんですが、何か面白いお題ないですかね?
スペックとしてはCommon Lispが出来るくらいなんですが。
「こんな事やったら面白いんじゃないの?」
とか
「コレが無いから困っている。でもつくるのメンドイ」
っていうの有りませんか?

749 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 09:34:11 ]
>>748
S式で書ける TeX とかどうよ

750 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 15:56:13 ]
>>749
え、無いの?
HTMLをS式で表現するものがあるのに?



751 名前:749 mailto:sage [2007/07/11(水) 20:20:40 ]
いや、あるかもしれんけど。
そんなに真剣に調べたことはないんで。

752 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:16:07 ]
ちょっと違うかもしれないけどmaxima があるからなー>tex

>>748
オープンソース版のAllegroCache(OODB)作るってのはどうよ?

753 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:51:01 ]
皆さんお返事有り難うございます。
そりゃ、自分もいろいろ考えたんですよ。
例えば色でプログラミングできたら面白いかな〜とかね。
正方形を9分割した物が有って、
白→nil
黒→t
が決定。
んで色がいくつ塗っているかでチャーチ数を表す。
緑→(())
緑と黄色→(()(()))
だから、緑と赤は等しい訳です。直感的ではないですけれど。1=1なんで。
んで、最低限の関数の色を決める。
car→オレンジ
とかね。
でも、これじゃ関数定義できないし、逆にややこしいし、
大きい数の計算は出来ないし、データ構造の定義は出来ないし、
何の役に立つのか説明しにくい。
んで、考えれば考えるほどどうすれば良いのか分からなくなって、
皆さん卒論でどんなことしていたか質問してみたんです。
すいませんでした。

754 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 00:16:04 ]
卒論とかだと学問ぽく見せる必要があるから、Lisp 族は人気ないだろ。
強い型付けのメリットとして、とても研究な感じになるという利点があるから
卒論は Haskell とか ML 系でなんかごにょごにょするほうがお手軽じゃないかな。


755 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 00:47:38 ]
> オープンソース版のAllegroCache(OODB)作るってのはどうよ?

それならむしろAllegroStore

756 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:46:49 ]
>>754
>強い型付けのメリットとして、とても研究な感じになるという利点があるから
>卒論は Haskell とか ML 系でなんかごにょごにょするほうがお手軽じゃないかな。
カリー・ハワード対応の事ですか?
それで、チューリングマシンの停止問題なんかを証明しても、
そりゃ学問的だけれども新規性がないんじゃ。
誰も証明してない命題が有るなら別なんでしょうけど。
>>755
AllegroStore?AllegroCache?
なんぞコレ?
clispしか使った事無いのでいまいち何に使うのかさっぱり?
総称関数を保存して共有できるようになる代物?
そもそもデータベースを触った事が無いからデーターベースからして
よくわかんないです。




757 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:47:44 ]
一言で言うなら 卒論書く前にもっと勉強しろよ

758 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 02:20:34 ]
まあ4年の7月なんてこんなもんだ。

759 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 02:23:19 ]
>753
世の中にはGPGPUというものがあってだな

760 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 03:05:22 ]
>>759
自分、面白そうな事思いついたです。
CUDA使って、Lispのインタプリタ作るのってどうでしょうかね?
そして、clispとどっちが計算が速いか検討するの。
これだと、今のところ誰もやってないだろうし、
リスト処理ってGPU向きの処理だと思いませんか?



761 名前:デフォルトの名無しさん [2007/07/12(木) 04:03:19 ]
わざとっぽいのは相手にしない方が

762 名前:754 mailto:sage [2007/07/12(木) 07:51:20 ]
>>756
どっからカリーハワードだの停止性判定だの証明だのがでてきたんだよ。
そーゆうんじゃなくて、なんか小物の研究でも Haskell や ML ならそれっぽく見えるだろって事。
つうかテーマは研究室の先輩や教官とよく相談したほうがいい…。
たとえば超並列分散 Lisp をつくるぜ!!と決めたとして、周囲の支援が得られず完全自力じゃ評価もまともにできんし、学費がもったいない。

763 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 10:50:20 ]
じゃあ Lisp の型推論がどこまでできるかとか

764 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:26:16 ]
>>762
>そーゆうんじゃなくて、なんか小物の研究でも
> Haskell や ML ならそれっぽく見えるだろって事。
>つうかテーマは研究室の先輩や教官とよく相談したほうがいい…。
>たとえば超並列分散 Lisp をつくるぜ!!と決めたとして、周囲の支援が
>得られず完全自力じゃ評価もまともにできんし、学費がもったいない。

いや、お恥ずかしい話なんですが自分の大学は大学院が無いんで
先輩なんていないんです。
それに指導教官は「何か作れば良いよ〜」という態度なんで
自由な反面、アイデアが必要なんです。
自分の友達は「大学のSNSをxoopsで作る」でOKと言われてました。
自分は「さすがにそれじゃアレかなぁ」と思って。
自分はCUDAでLisp処理系は面白い案だなと思います。
誰でも思いつきそうだけれど、今のところ誰もやってないし、
自分の処理系欲しかったんで。
それじゃ、パソコン買うところから始めなきゃならないんですが(Macなんで)
頑張ってみますね。
C言語は1年くらい触ってないし、マルチスレッドプログラミングは初めてなんで
不安ですが。
出来たらUpするんで、コードレビューしてください。
タライ回し関数が速く動くといいなぁ。

765 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 16:20:23 ]
逐次処理しなきゃだめな部分は早くならないんじゃないのかな。


766 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 16:34:47 ]
>>764
くそうらやましす

767 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 20:12:46 ]
一口で大学と言ってもピンキリなんだな

768 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:17:35 ]
型推論 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という前提で最適化でける

・・という感じで良い?


769 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:36:38 ]
>(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の戻り型に依存

・・・もうわかんね

770 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:08:54 ]
Schemeが(Haskellほどでないけど)関数的であるとされる根拠の1つに
識別子が一度ある場所に束縛されると
他の場所に束縛を変更される事がないっていうのがあるけど
それをいうならCだって同じですよね?
一度宣言した変数のアドレスはスコープ内で一定

むろん関数的であるという最大の根拠は関数が第一級の値であるというところにつきるんでしょうけど

でもR5RSでは関数のリテラル表記はない、でもそれぞれの実装でサポートしてもよいって扱いですけどね
lambdaは関数のリテラル表記だっていう解説もちらほら見ますが



771 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:12:32 ]
「識別子が一度ある場所に束縛されると他の場所に束縛を変更される事がない」ことが
「関数的である」とは思わないけど

772 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:22:29 ]
>>771
いや、参照透過性とは関係ないのに
識別子の束縛が変更されない事に言及する解説をよく見る気がしたので

773 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:25:43 ]
ヒント: 言論の自由

774 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:20:13 ]
>>768
なんかところどころよくわかんないような。

自分で目の子でやったらこんな感じになったけど、どうかな。
まず (zero? m) から m : number
次に (+ n 1) から n : number
だから ack : number * number -> ?z で
else 節の (ack (- m 1) (ack ...)) の第二引数を見ると ?z = number
∴ ?x = ?y = ?z = number

775 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:43:17 ]
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引数取って何か返す、ぐらいの情報しかないよね。

776 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:50:20 ]
>>775
> zero?って渡される引数がnumberのみと限定していいのかな。
R5RS みると (zero? z) と書いてあって、 z は複素数を表すメタ変数ということだから
そこは問題ないと思う。

で、今気付いたけど = にしてしまうとまずいね。例えば三行目で
(zero? n) が (<= n) だったりすると number ではダメで、
real に推論されなきゃいけない。

777 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:59:38 ]
いや、この際大雑把に「数字かどうか」ぐらいの区別でよくないですか?
アドホックにでも最適化に結び付けて、お手軽に型推論による効果
を体感したいというか。
>>775のmapにしてもフローチェックすればpair?の判定で
car/cdrのpair判定が省略できるとか、そんなレベルから徐々に
大掛かりな仕掛けを考えていければいいかなと。

778 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:01:00 ]
>>777
うん、その方が健全な気がしてきた

779 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 08:55:16 ]
え、そのほうが soundnessがいえるんですか?

と、あえて誤読をしてみる。


780 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 13:14:34 ]
誤読というより誤爆?



781 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 06:51:44 ]
俺、凄い事思いついた!
GHC立ち上げると、
Prelude>
ってでるじゃん。
なんでプレリュード?とずっと思ってたんだけれど、
これってもしかして、
Franz Lisztの前奏曲から来てるんじゃないの?
リストつながりで。

782 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 12:17:40 ]
Franz Lisp

783 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 13:50:04 ]
>>781
prelude って一般名詞じゃないの?

784 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 16:01:21 ]
俺も Prelude は一般名詞だと思う。

785 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 16:54:13 ]
ネタにマジレスなんとやら

786 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 16:58:10 ]
ネタにマジレスを重ねるというネタだったのにマジレスされた…

787 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 17:13:36 ]
でもそれが、ネタにマジレスを重ねるというネタにマジレスするというネタかもしれないと考えるのが危機管理というものではないだろうか。

788 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 17:17:54 ]
ネタになりかけのレスと、ネタになる余地のないレスの区別ぐらいつきますわよ。

789 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 17:19:30 ]
だがしかしそれは主観に左右されるものであるから、絶対的な答えなどないのではないか
つまりは君の意見などどうでもよいのですわよ。

790 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 17:21:27 ]
ここ、Haskell スレだと思ったら Lischeme スレだったのか!



791 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 17:27:55 ]
むしろ寝たすれ家と思う田

792 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:07:40 ]
自分がアホっぽく見える流れになっちゃったら、
「何か狙ってた」ことにして「お前らのせいでそれがダメになった」と嘆いとくのは基本。

793 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:10:43 ]
誤爆?

794 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 23:41:45 ]
アホの子はかあいいよ?

795 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 16:31:39 ]
gaucheのCVS Headって、ここ最近コンパイルできたためしが無いんだけど、
これってパッチとか作る価値があるの?
それとも、shiroさんの手元ではできてるの?

796 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 18:36:58 ]
wilikiかlingrあたりで聞いてみたら? HEAD使ってる人は何人もいると思うけど。

797 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:15:04 ]
普通にできてる。ドキュメントよまずにやってない?DISTほげ

798 名前:795 mailto:sage [2007/07/21(土) 00:53:52 ]
HACKING とかは読んでる。
Cのコンパイルじゃなくて、schemeコードを実行するところで
ライブラリが見つからないとかいろいろ出る。

システム既存のgaucheと衝突してるのかなあ…?

lingrで、makeにいろいろオプション渡すとできるよって言ってた人が
いて、それで前進したけどまだ止まる

もう少しあがいてみるかな

799 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 01:16:10 ]
そうか。
俺は ./DIST gen を忘れてて、コンパイルできねーな?と思ってた事があったんでひょっとしてと思ったんだけどね。
で、どんなエラーメッセージなの?

800 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:01:50 ]
>>795
俺もそれではまった。
最近はGauhceのコンパイルにGaucheを要求するので、
古いGaucheを使ってるとgoshがエラー出す。

Gauche 0.8.10(release)使えばコンパイルに成功する。
Gauche 0.8.10(release)すらコンパイル出来ないときは、
バージョンを一個ずつ上げてみて。



801 名前:795 mailto:sage [2007/07/22(日) 17:34:53 ]
>>800
サンクス
調べてやってみます

802 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:00:07 ]
schemeってcommon lispのsymbol-valueに相当するもの無いけどevalを使うしかないんですか?

やりたいことはalistに文字と関数のペア入れておいてその関数を呼び出したいんだけど。
'(#\a . func_a)
だとfunc_aは関数にならないから
`(#\a . ,func_a)
と書いてるんだけどいちいち','を書くのがめんどい。
こういうところはマクロを使うのがセオリーなの?

803 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 07:13:30 ]
Schemeでは「symbolに値が入ってる」わけじゃないからね
処理系によっては実行時にはシンボルと値の結び付きは完全に忘れちゃってる
可能性もあるし。
処理系依存で良ければ、symbol-valueとかglobal-variable-refとかが使える
場合もある。ポータブルにやるならevalしかないだろうね。
「文字と関数のalist」とかは普通にバッククオート使っちゃうけどなあ。

804 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 08:50:18 ]
個人的には evalも邪道だと思う。
そもそも R4RS には evalも必須じゃなかったし。
万独裁なら cons でも使え。



805 名前:802 mailto:sage [2007/07/23(月) 11:14:54 ]
>>803
なるほどね。R5RSをよく読んだらそう書いてあったよ。
Common Lisp陣営がSchemeを批判するときの論点がそこなのね。

>>804
確かにevalは使いたくない。

今まで通りquasi quote使って関数をunquoteすることにしました。

806 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 20:16:11 ]
>>805
> >>803
> なるほどね。R5RSをよく読んだらそう書いてあったよ。
> Common Lisp陣営がSchemeを批判するときの論点がそこなのね。

全然違うと思うが。
Schemeにも1st class objectとしてのシンボルがあればなあという
CLerもいるっちゃいるだろうけどさ。

807 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:38:53 ]
ブラックボード黒田

808 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:49:38 ]
kuroタソ(*´д`*)/ヽァ/ヽァ

809 名前:デフォルトの名無しさん [2007/07/25(水) 09:38:10 ]
www.tekkon.net/ これってlisperの話?w

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式を使っていたような?
言語内に、いくつかのプログラムがあってそれを組み合わせて、使っていたような気がします。

812 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 02:05:25 ]
>>811
『On Lisp』の24章に、Common Lisp による埋め込み言語としての Prolog 実装の話はあるけど。
ただ Prolog は最近の言語ってわけでもないし……。

813 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 03:48:27 ]
>>811
まさか、TAOじゃないよな。

814 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 04:30:18 ]
Coke & Pepsi?


815 名前:デフォルトの名無しさん [2007/07/27(金) 14:31:02 ]
>>814
それそれ!!それです。
ありがとさんです。

CokeとPepsiとJoltです。

ただ、今見たら、素人の手に負えそうなものではないことがわかったw

816 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 17:25:35 ]
オナニーしすぎてモーホー炎になりますたw

817 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 00:07:51 ]
>>810
HaskellでPerlを実装した話じゃなくて?

818 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 00:31:50 ]
haskellはschemeで作られました

819 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:31:09 ]
schemeはschemeで作られました

820 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 13:11:31 ]
・[1492] L2Lisp in Ruby((鈴))
 静的スコープ、末尾呼出し(末尾再帰を含む)の最適化、およびマクロを備えた
近代的なLispの小さなインタープリタをRuby(およびJRuby)で作ります。Rubyの
データ型と親和性が高く、簡単に組込み関数を増設できる手頃なLisp処理系として
利用できます。
codezine.jp/r.x/czn077a/aid/1492



821 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 13:38:23 ]
rubyなら継続も比較的簡単に実装できると思うんだけど
なんでまた半端な物作るかな
CL厨がまた文句言いにくるよ

822 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:01:32 ]
「簡単に組込み関数を増設できる手頃なLisp処理系」に継続も装備させようという発想が凄いな。

823 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 15:56:16 ]
手頃な処理系というのならForthの方が良いと思うけどな。

元にしたL2Lispのページを見ると、継続(というかcall/cc)は不完全らしいね。


824 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:07:56 ]
Forth でも良いだろうし Lisp でも良いだろう
大して変わらんよ

825 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:15:49 ]
>>821 漏れ CLer だけど……どの辺に文句つける要素があるんだ?


826 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:28:16 ]
気にする事は無いよ


827 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:34:11 ]
むしろ継続継続とSchemerが喰いついている件。まぁ、あんまり使われないだろうけど。Rubyistがわざわざこれを使うとは思えない。

828 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:58:35 ]
いわんや Lisper おや

829 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:20:01 ]
つーかLisperも使わんでしょこんなの

830 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:05:29 0]
そういう問題ではない



831 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:12:06 0]
なんだ、L2LispってPascalの処理系を移植しただけか。
ruby厨うぜえ。

832 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:09:14 ]
>>825
ブラックボード黒田さんなら、黒板振り回しながら襲いかかるであろう仕様。

833 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:27:42 ]
>>832
一般の Lispnik とは全く関係無いな

834 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:59:26 ]
>>820
とてもコンパクトに出来ていて Ruby と Lisp の勉強になりました、

とレスしてほしいんだろw

835 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 04:54:46 ]
継続ってのは後続のことですか?

836 名前:デフォルトの名無しさん [2007/07/30(月) 15:43:41 ]
>>834
そうそう。わかればいいのです(^^)

837 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 17:24:55 ]
荒らすなよ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

839 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:22:03 ]
(define (my_max list) 34)
(define (my_makelist n) '(1 2 3 4 5))
こんなかんじ


840 名前:838 mailto:sage [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 mailto:sage [2007/07/30(月) 19:46:15 ]
うちでは動いています。
あなたの処理系のバグではないですか?


842 名前:838 mailto:sage [2007/07/30(月) 20:00:01 ]
839>>さん
昨年、以下のサイトで、
www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/index.html
これを『ChezEdit-NT Ver1.11 setup.exe』インストールしましたが、
何か問題があるのでしょうか?
他のプログラムは問題なく結果が返ってきます。
度々すいません。

843 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:10:51 ]
あなたの頭に問題があんじゃないでしょうか?

844 名前:838 mailto:sage [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 mailto:sageクズ学生は邪魔だ さっさと退学して社会の底辺で働けよ [2007/07/30(月) 20:19:04 ]
それと同じ方法で書けば良いと思います

846 名前:838 mailto:sage [2007/07/30(月) 20:23:56 ]
>>839さん
そこを何とか教えてもらえませんか?

847 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:25:38 ]
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 mailto:sage [2007/07/30(月) 20:29:15 ]
>>847さん
遊びに行きたいのはやまやまですが・・・。
Prologではダメなんです・・・。
初心者で申し訳ありませんが、
誰か優しい人お願いします。

849 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:36:21 ]
無能にキレる人というのは、無能によく出会うレベルの学校や職場にいる人が多い。
滅多に無能に出会わないようなハイレベルな環境で生きてる人は、もっと「余裕綽々にイジる」。

でも、無能によく出会うレベルの環境に居るってことは、自分のレベルも知れた物なんだよね、実は。
そのくせ上から目線というのはどういうことかというと、つまり自分では優秀なつもりなのに
現実がそれをまったく反映してくれない、そのギャップへの苛立ちを、こういう場所での小爆発で
少しでも解消しようという行為なわけ。

黒板におでこくっつけて頭冷やしたほうがいいよw

850 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:39:58 ]
>>838
俺だったらschemeの上のprolog乗っけて>>847のコード動かすけどな。
On Lisp prologでぐぐって



851 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:43:10 ]
>>849
黒板に縛りつけられてチョークを出し入れまで読んだ

852 名前:838 mailto:sage [2007/07/30(月) 20:57:30 ]
あの、私女子大生なんですが・・・。
優しい方にはなんでもお礼しますから回答お願いします。

853 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:02:57 ]
VIPでマンマンうpしたら考える

854 名前:838 mailto:sage [2007/07/30(月) 21:04:40 ]
(i)
こうですか?わかりません(><)

855 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:29:23 ]
>>849
えらく無能そうな人が出てきたなぁ

856 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:33:09 ]
>>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なので。失礼しました。

857 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:47:43 ]
>>849
そんなことどうでもいいから答えてあげたら?

858 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:37:17 ]
>>840
(define my_makelist (cut iota <> 1))
(define (my_max l) (apply max l))

859 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:39:39 ]
ほい

> (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


860 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:42:00 ]
(define my-max max) のほうがいいんじゃ... apply 使う意味がわからん



861 名前:858 mailto:sage [2007/07/30(月) 22:45:58 ]
>>860
おいおい。それじゃ>>838で示してる仕様通りにならんだろ。

862 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:53:01 ]
(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)))



863 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 01:08:21 ]
>>839の動かないScheme処理系ってあるの ?

864 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 03:13:29 ]
>>850
scheme なら schelog がいいんじゃない?

865 名前:838 mailto:sage [2007/07/31(火) 18:45:58 ]
>>859さん
>>862さん
来るのが遅くなりましたが、
問題なく実行できました、
有難う御座いました。


866 名前:838 mailto:sage [2007/07/31(火) 18:47:26 ]
もう一度、質問をお願いします。
以下のような結果が得られる、
前置記法から中置記法へ変換する手続きを教えて下さい。

(prefix->infix '(+ (* a b) c))) を実行した結果 (a * b + c)
(prefix->infix '(* 4 (** x 3))) を実行した結果 (x ** 3 * 4)

お願いします。

867 名前:838 mailto:sage [2007/07/31(火) 19:10:41 ]
exp、opr、opd
のスタテックポインターを使って実行したいのです。
すいませんが、教えて頂けませんか?

868 名前:838 mailto:sage [2007/07/31(火) 19:12:11 ]
× スタテックポインター
○ スタックポインター
間違えました。

869 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:17:02 ]
「質問をお願いします」ってのは日本語としておかしい

870 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:18:30 ]
>>867
そういう宿題がでるときはスタックつかって前置記法の式を中置記法に
手で変換する方法の説明があると思うけどな。それをプログラムであらわせば
いいだけだ。



871 名前:838 mailto:sage [2007/07/31(火) 19:19:55 ]
確かにそうでした。
>>866に対する回答をお願いします。

872 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:30:03 ]
>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))

873 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:30:38 ]
Schemeによる記号処理入門の演習問題5.8だね。

874 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:15:17 ]
とりあえず、状況がわからんので答えてね。 >>838
1. 宿題の正確な問題文
2. 宿題の期限はいつまでか?
3. 教科書は手元にある?どこまで読んだ?
4. 教育的なヒントがほしいの?それともズバリ答えのほうがいい?


875 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:04:11 ]
>>865
あれ?>>858は?

876 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:22:52 ]
ずばり答えてあげると本人のためにならなくて良いな

877 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:27:08 ]
一つ問題に答えてあげる代わりに
一つ問題を解いてもらえばいいんじゃないか
何が良いかな

878 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:31:51 ]
嫁姑問題とかどうだ

879 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 01:27:04 ]
つーか>838も自力解決できない奴に何か期待しても無駄。

880 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 01:57:45 ]
彼はFizzBuzzをちゃんと書けるんだろうか



881 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:57:59 ]
演算子の結合優先順位とか気にしなくていいのかなあ。とおもった。


882 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 03:19:11 ]
気にしようぜ

883 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 08:42:45 ]
演算子? そんなものあったっけ?


884 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:48:00 ]
>>883
スレを読め

885 名前:872 mailto:sage [2007/08/01(水) 19:17:16 ]
一応>>872に演算子の優先度追加したのも用意してたけど、
本人から何も反応ないしやめておく

886 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:14:38 ]
そうなんだよな。ズバリ答えていいのか、872 みたいに段階的にいくべきなのかわかんないんだよなー

887 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:32:29 ]
教育的回答をすればなんとかなるレベルの質問者じゃないので、
回答者とギャラリーが面白いと思う方でいいんでないの?


888 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:40:53 ]
そーゆう上から目線はいくないと思うよ。 >>887
俺も昔は NetNews とかで痛い厨房だったけど、親切な上級者に諭されて目が醒めた。
だれだって慣れない内はちょっと痛い言動もあるし、上級者から見ればアホっぽい質問することだってあるさ。
何から手をつけていいからわかんないから答えをみながら考える、だって一概に間違いとは言えないだろう。

889 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:44:49 ]
887が上からの目線とは思わんけど

890 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:48:21 ]
むしろ>>888が上から目線



891 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:52:53 ]
慣れないうちとかそういう問題じゃないと思うな今回の人は

892 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:07:55 ]
「教育的回答をすればなんとかなるレベルの質問者じゃない」ってなんで決めつける?
とか思ったんだけど、まあ、すまんかったね。空気悪くする気はなかったんだ。黙っとくわ。

893 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:10:28 ]
まあ放っておこう

はい次。

894 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 00:22:04 ]
schemeそのものとあんまり関係ないかもしれんけどさ、
R6RS(正確にはR5.97RS)で追加されてる "mantissa width"ってなんのこと?
直訳すれば"仮数部長"あたりだと思うんだけど、何?
ぐぐってもよくわからんです

仕様を見るに、 "3.14 | 10" みたいに書くのかな?


895 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:25:29 ]
>>894
単精度・倍精度のような実装依存の値ではなく、必要な桁数を要求して、
実装が単精度・倍精度を判断できるということでは?

896 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:32:00 ]
>>894
R5.97RSのどこに書いてある?見つからんかった。
多分実数の印字表現の仕方の話なんだろうけど、
浮動小数点数の 仮数*基数^指数 の仮数の精度かな。
12345 = 0.12345*10^5 、これの0.12345に相当する部分の幅。

897 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:49:58 ]
>>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>+


898 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:55:36 ]
>>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 mailto:sage [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にする必要性があるのかってことだけど。

900 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 03:33:44 ]
多くの処理系ではわざわざ定数をsingleにはしないだろうけど、もしそれで高速になるならば
しても良いという(コンパイラに対する)ヒントにはなるわな。
(そこまで最適化する処理系は少ないだろうけど)



901 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 12:37:25 ]
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)))
こういう感じの実装くらいしか思いつきません。
もし標準的な関数があればそちらを使いたいところです。
よろしくおねがいします。

902 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 12:56:17 ]
足すのが1に決まってるなら
(mapcar #'1+ '(1 2 3 4))
決まってないなら
(mapcar #'(lambda (x) (+ x 1)) '(1 2 3 4))
でいいんじゃないの? なにか書いてない他の制限があるなら知らんけど。


903 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 12:56:33 ]
(mapcar #'(lambda (x) (+ x 1)) '(1 2 3 4))




904 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 05:51:13 ]
>>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 mailto:sage [2007/08/07(火) 10:07:27 ]
>>902-903
mapする関数側で工夫すればいいのですね。
スコープに注意しながら実装を進めてみます。
ありがとうございました。

907 名前:894=899 mailto:sage [2007/08/07(火) 17:49:33 ]
>>904
俺の最初の質問に照らして読ませてもらうと、小さい
仮数部が指定された場合に、
・精度の低い浮動小数点表現に丸めた上で、残りは0を補充して格納する
・精度が大きい(greater)ぶんには特に問題なし
というのだと前者ということ?


908 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:34:33 ]
(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)のような感じです。

909 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:50:57 ]
(make-list (- m n -1) :initial-element n)

910 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 22:18:32 ]
(loop for i from n to m collect i)
(loop repeat (- m n -1) collect n)



911 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 03:44:18 ]
皆さん、Scheme書くときエディタ何使ってますか?

912 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 04:02:49 ]
黒板

913 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 16:09:09 ]
俺も黒板

914 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 16:23:23 ]
2chブラウザ

915 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 21:30:06 ]
とりあえず対括弧の強調は必須だが
普段サクラエディタ使ってるが
単語登録じゃハイフンで切られちゃって上手く行かず
正規表現コメントで限界まで登録…だけど
ちょっとオススメ出来ないなあ
emacsとかxyzzyとかだと大丈夫なのかな
キーバインド苦手で使ってないが

916 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 22:55:16 ]
>>915
xyzzy+winkey.l は?

917 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:16:28 ]
>>916
帰宅したら試してみる。

918 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 03:27:19 ]
Emehcs

919 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 03:37:59 ]
xyzzy + winkey + scheme-mode 試してみた
導入は手間だが、使えるね
Scheme用にしばらく使うことになりそう、thx!

920 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 07:08:15 ]
MrEd



921 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:48:31 ]
4回の授業でこんな課題出すんじゃねえこんちくしょうが!!!!!!1

922 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:20:17 ]
自分で選んだ道だろうが小僧

923 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 20:49:36 ]
vim+mzschemeうまく動く?

924 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:38:25 ]
MzScheme も MrEd も DrScheme のやつか

925 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 01:21:01 ]
on lisp を読んでる女子高生とアナフォリックマクロについて語り合いたい。

926 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 01:37:53 ]
そんな幸せな場面想像したこともなかったわ。

927 名前:デフォルトの名無しさん [2007/08/11(土) 05:37:54 ]
"The little schemer"を読んでいるのですが、その中の始めに、
(((how) are) ((you) (doing so)) far)
の中にアトムが3個あるらしいのですが、どうしてですか?

928 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 07:32:38 ]
アトムは12個じゃない?

929 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 10:04:41 ]
要素は3個だと思うが。


930 名前:デフォルトの名無しさん [2007/08/11(土) 11:22:21 ]
>>928
>>929
ありがとうございます。
アトムと要素ってちがうんですか?



931 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 11:50:37 ]
一番外側のリストの要素って
((how) are)と((you) (doing so))とfarとnilの4個じゃないの?
それとも要素数っていう場合最後のnilは数えない?

932 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 12:13:51 ]
その最後の 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 mailto:sage [2007/08/11(土) 12:35:56 ]
>>932
なるほど〜
ありがとう

934 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 13:21:32 ]
このばか者が!ワシに分かるようなプログラム言語にしないか!

935 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 13:34:04 ]
括弧だけなんだからわかりやすくて楽じゃん。
C++の難解さときたら・・・

936 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 13:57:52 ]
やだやだforthくらいわかりやすくないとやだ

937 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 14:11:35 ]
Lispを判りやすいと思う人の数>Forth(r

938 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 14:27:57 ]
Python が一番読みやすい
lisp は要素が横方向に膨らみすぎる

939 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 14:54:15 ]
pyはなんか構文の後ろに:とか変なしるし付けないといかんのが嫌
pascalの.みたいにキモイ
インデントだけで済むとか言って余計な事が多すぎる
結局括弧使ってるし

940 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 14:58:43 ]
インデントベースでカッコのないlispってないの?



941 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 15:05:59 ]
>>939
余計な事なんてそんなにないでしょ
普通に書いている分には十分に読みやすい
ここで Python と lisp を比べてみるとカッコ関係なく lisp の読みにくさを痛感する
ttp://ja.doukaku.org/

942 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 15:20:57 ]
カッコなんて気にしない

943 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 15:27:08 ]
そう言い残して彼は秋葉原へ行きました
額にはバンダナを巻いて

944 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 15:28:09 ]
pythonは掲示板にコード貼れない悲しさがあるね

945 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 15:36:56 ]
SRFI 49: indentation-sensitive syntax
srfi.schemers.org/srfi-49/srfi-49.html


946 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 15:44:56 ]
SRFIの範囲ってわけわからんな。
どうせならpython風フロントエンドでも定義すりゃいいのに。

947 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 16:08:08 ]
>>941
ちょっとそこサンプル眺めただけだけど、pythonの構文規則て面倒だと思うよ。
何がダメで何が許されてるのか判りづらい。
よくこれで破綻しないなと逆に感心してしまった。

そのサイトのpythonサンプルって既成のライブラリ呼んでるのが殆どで
読みやすいかどうかは判らなかったけど、例えば
ja.doukaku.org/33/lang/python/
これのライブラリ使ってない方のコードのyieldとかの掛かり先の判りにくさとか。
COBOLみたいにカラム表示のあるエディタじゃないと厳しい。
インデント位置がほんとにそれで合ってるのか疑ってしまわない?
(LISPなら汚く書いてもppで大抵読めるコードになる)

948 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 16:45:01 ]
じゃあエディタにカラム表示をつければいいんだ。
・・・え? そういう問題?

949 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 17:23:53 ]
Pythonは紙に印刷したら定規あてて読まないといかん
マジで


950 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 17:45:22 ]
Python はネスト深いとそうなるよなw

とは言え、C++ や Ruby ほどには破綻してないと思うよ

両方ともパーサに優しくない上に
C++ はもはや人間にすら読みづらい言語だし
Ruby は一見読みやすいがパーサの細かい挙動に気をつけないとハマる

あと Perl は…可読性とか考えたことあるのかなラリーってw

書いた時点でほぼパース済みの Lisp系はそういうことは無いわな
エディタに括弧対応の表示がないと辛いのが難点か



951 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 19:13:04 ]
Perlって、悪いところ上げればキリがないと思うけど、
でも日本で名が知れたハカーでPerl常用してる人多いよね(宮川さんとか小飼弾氏とかはてな伊藤さん)。
あれって惰性で使い続けてるのか、それとも使いやすいから
使ってるのかよくわからんね。すごい人にとってはPerlって
いい言語なのかな。スレ違いでゴメンね。

952 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 19:37:05 ]
perlは文系が好んで使う言語です
何故か

953 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 19:39:15 ]
いくら「すごい人」が使っていても自分が嫌いなら気にすることはないと思う。

954 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 19:47:01 ]
>>951
彼らは高次視覚野のニューロンがPerl向きに学習されている。
常人は真似しないほうが無難であろう。

955 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:07:13 ]
Perlが常人向けじゃないなら、LispやSchemeはどーなんですか?


956 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:17:31 ]
>>951
その連中は、派手に花火を打ち上げてるから目立つPerl者であって、
別にハッカーでもないだろ。

957 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:22:14 ]
CPANがあるからじゃね?

958 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:39:54 ]
Perlはできることが強力だからな、CPAN

959 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:41:02 ]
途中で書きこんじまった

CPANも含めて。
多少の構文の違いなんて大した問題じゃないって人も多いし

960 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:44:26 ]
不感症なんですのね



961 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 21:09:35 ]
CPANはいいよね・・・
RubyforgeとかCheese Shopなんて霞んで見えてしまうぐらいに
ましてasdfなんて、ね

962 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 21:10:28 ]
CPANのLISP版CLANて意味ないかな。
やっぱ実装が沢山あると難しいか。
ネットワーク系弱いし。名前負けしてるw

963 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 21:12:37 ]
asdfでぐぐると痛そうなページがトップっすね

964 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:09:05 ]
末端消費プログラマばかりなんだな、ここは。

965 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:17:59 ]
これ見れば判るけどネストが異様に深い
ttp://ja.doukaku.org/tag/gauche/

普通の言語ならガード節で処理するようなものも関数的にネストして処理するので深くなる
また束縛でスコープが増える分深くなると言うのもある
これはすべてのプログラムに影響することでそれを考えればPythonのyieldが判りづらい(判りづらいとは思わないけど)
なんてほんの些細なこと

可読性と統一性ってのは別の所にあって他の言語はそこをある程度崩して読みやすさを補っているんではないかと思う
Ruby読みにくいって言っている人が居るけど大抵の人はlispとRubyじゃRubyのほうが読みやすいというと思うよ
だってみんなもlispのコードをカッコ数で読んでいるんじゃないでしょ?
ttp://img264.imageshack.us/img264/1397/lispnd7.png

966 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:19:51 ]
気を落とすなよlisperども
頑張ってる連中もいるぞwww
pc11.2ch.net/test/read.cgi/tech/1183396621/l50



967 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:50:43 ]
次スレからタイトルを実際に即して「RubyとPythonとLisp Scheme」にしろよ

968 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 23:24:48 ]
>>965
「大抵の人」は「Rubyのほうが読みやすいと思う」んだろ?まぁ、普通にそうなんじゃね。

その手の話は腐るほど見てきてるし、そう思う気持ちもわからんではないが、
何度も何度も同じ話を聞かされてるんで食傷気味。Matz が同じようなこといってるから
Matz 日記でやると同志がいっぱいいると思うよ。



969 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:05:09 ]
CRANがそれだろ。lispは実用のみ

970 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:42:49 ]
>967
夏だからだよ



971 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:51:41 ]
CLだとガード節相当はreturn-from 関数名とかで書けるけど
schemeだとやっぱ継続?

972 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:01:57 ]
サマースクールモードなのか

973 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:07:08 ]
>965
Rubyは間違いなく読みやすい部類だよ。
ただ、パーザの挙動が判りづらいから
読んだ通りの動きになってくれてるとは限らないところが落とし穴。

Lisp系のパーザの挙動は見たままだろうw

974 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:42:01 ]
>>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
まあ、つまり見たまま。

975 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:43:39 ]
(return-from% test1 #f))
だった。
おれには衛生的なやつは無理。

976 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:48:46 ]
(define% test2
(lambda (x)
(if (not (number? x))
(return-from% test2 #f))
x))

(test2 1) => 1
(test2 'a) => #f
うむ、ちゃんと動いてるな。
ただ、これだと普通の再帰ができなくなる。
nameを加工するかしないと。

977 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 02:07:48 ]
>>974
(define test1
(call/cc (lambda (test1)
(lambda (x) (if (not (number? x)) (test1 #f)) x))))

これって継続呼んだ時点でdefineの束縛フェーズに戻って
test1が継続の返り値に書き換わるんじゃない?

978 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 02:17:19 ]
>>968
例えば他の言語ならifの中で束縛を使いたいならifのスコープをその束縛のスコープとして適用して簡略化する
lispの場合はifをletでくるむ形で束縛のスコープを設定する
これはifのスコープとは別に束縛のスコープを記述できる分表現力は高いがネストが深くなり見た目も多少複雑になる

別にlispを全否定している訳じゃ無いしその分lispは力を得ることがで来ていると思う
ただ他の言語より可読性が高いとは思わない

>>973
人間コンパイラきたーw

979 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 02:26:02 ]
return関係はshiroさんのが理解しやすい
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%81%aa%e3%81%9cScheme%e3%81%ab%e3%81%afreturn%e3%81%8c%e7%84%a1%e3%81%84%e3%81%ae%e3%81%8b

言語としてreturnが用意してあるのとreturnを作れるのは意味合いが違ってくると思う

980 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 02:40:53 ]
>>977
あー間違った。call/ccをlambdaの中に入れといて。
どっちみち不完全だけどさ。



981 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 02:59:57 ]
>>978
他のスレでやれば賛同者多数だと思うんだがね。
このスレに自分の意見に賛同しない人がいる限りとかいったら延々とネストだの括弧だのって話を繰り返す気なのか?

982 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:03:27 ]
そういう意味のないレスならしないほうがいい

983 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:07:26 ]
元ネタからして意味がないので続かなくていいよ

984 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:30:04 ]
反応が小学生だなw

985 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:34:02 ]
相手が小学生レベルだからな。

986 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:39:44 ]
Gauche本、まだ出ないのかなぁ

987 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 04:28:33 ]
なんか伸びてると思ったらいつもの話題か。

988 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 04:44:03 ]
可読性、最強言語選手権、黒板
の三本立てでこのスレは成り立っています。

989 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 05:23:35 ]
次スレよろ

990 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 19:28:21 ]
それなりに言っていることはわかる
慣れれば気にならなくなるが可読性が高いわけじゃないからな
というか誰かLispの可読性が高いなんて言ったっけ?



991 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 20:04:49 ]
少なくとも俺には可読性高い。(ちゃんとインデントされていれば)
他の人間のことは知らんし、あまり興味無い。

992 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 20:15:00 ]
インデントがあれば括弧はいらない!

993 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 20:26:41 ]
比較する条件次第、という面がLispは特に強い気はする。
インデントをいったんすべて無くして、エディタの力を何も借りられない条件下で
「さあ把握してみろ」みたいな勝負なら、そりゃあもう大惨敗だけど、
その両者がきちんと揃うと、途端に「そう一方的に負けてるもんでもない」って位置へ上がる、みたいな。
まぁ、客観的な話ではないけれども。

994 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 21:07:56 ]
括弧が多いと Emacs でカーソル移動が楽になる

995 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 21:10:20 ]
インデントの話が出たんで、ちょっと質問なんですが、
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)))


996 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 21:38:59 ]
立てといた
Lisp Scheme Part18
pc11.2ch.net/test/read.cgi/tech/1186922295/


>>995


997 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 21:43:56 ]
結局インデントで見ているんじゃPython批判できないじゃん

998 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:11:05 ]
>>997
つかPythonも好きな奴多いと思うけど。

lambda埋め

999 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:50:37 ]
でもRubyは嫌い

1000 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:55:37 ]
1000ならロト6で1等当選



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<220KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef