トップページ⇒tech
1001コメント344KB

Lisp Scheme Part19

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/01/14(月) 00:14:56
過去スレ
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
0446デフォルトの名無しさん2008/02/03(日) 17:51:47
>>>444

全く問題ないよ。
Schemerになりなさい。
0447デフォルトの名無しさん2008/02/03(日) 17:57:42
>>444
読めるよ。全10章中、Yコンビネータが出てくるのは第9章だけ。
これを理解するのに "To Mock A Mockingbird" が巻末で推奨されている。
"Litle Schemer" は習うより慣れろの精神で書かれているので読みやすい。
0448デフォルトの名無しさん2008/02/03(日) 18:02:35
Yコンビネータなんて見りゃどういう事か直感で判るだろ
0449デフォルトの名無しさん2008/02/03(日) 18:03:57
Arcはハッシュが標準装備か。連想リストを使わないでこれもいいかも。

arc> (= var (table))
#hash()
arc> var
#hash()
arc> (= (var 'x) 'x1)
x1
arc> (= (var 'y) 'y1)
y1
arc> var
#hash((y . y1) (x . x1))
arc> (var 'x)
x1
arc>
0450デフォルトの名無しさん2008/02/03(日) 18:11:41
この辺りはCommonLisp風なんだね。

arc> (cdr '())
nil
arc> (car '())
nil
arc> (is '() nil)
t
arc>
0451デフォルトの名無しさん2008/02/03(日) 18:14:59
こんなのもあるんだ〜。
arc> (type "a")
string
arc> (type 1)
int
arc> (type 0.1)
num
arc> (type 'a)
sym
arc> (type '(a))
cons
arc> (type 1+1i)
num
arc>
0452デフォルトの名無しさん2008/02/03(日) 18:19:04
>>445
>>446
>>447
>>448
アドバイスありがとうございます。
C++ばかりやっていて数学的基礎もあまりなく
どうかと思ってたのですが、まずはSchemerシリーズ
3冊を一読してから考えます。
0453デフォルトの名無しさん2008/02/04(月) 00:54:10
一言語を学び始めるのに入門書を3冊読む?気軽にやれよ
0454デフォルトの名無しさん2008/02/04(月) 04:14:49
The Little 〜
http://www.crockford.com/javascript/little.html
0455デフォルトの名無しさん2008/02/04(月) 12:54:21
Arcのリストと文字列って?

arc> (subst 'a '(b) '(a b c))
"aac"
arc> (subst "a" "b" "abc")
"aac"
arc>
0456デフォルトの名無しさん2008/02/04(月) 13:26:47
【普通のやつらの】 Arc Language 0 【上を行け】
http://pc11.2ch.net/test/read.cgi/tech/1202098949/

ついカッとして立ててみた。悪気はなかった。たとえスレが寂れても
後悔するつもりはない。
0457デフォルトの名無しさん2008/02/05(火) 15:07:50
正直サブタイトルは要らなかったと思う
0458デフォルトの名無しさん2008/02/05(火) 15:15:24
荒し呼んでるようなもんだもんなw
0459デフォルトの名無しさん2008/02/05(火) 16:24:01
ま、スレが盛り上がるのを期待してるよ。おれたちの期待の
斜め上を行ってくれ。w
0460デフォルトの名無しさん2008/02/05(火) 18:29:14
アルファブロガー隔離スレだろ
0461デフォルトの名無しさん2008/02/05(火) 18:55:28
たとえ荒氏でも廃れるよりはマシということかw

Arc自体、ちゃんとしたモノになるまでまだ何年かは時間が掛かるだろう。
0462デフォルトの名無しさん2008/02/05(火) 19:06:57
現役処理系で動く3-Lispの系統の実装ってありますか?
3-Schemeとか、3-Arcでもいいです。

; Smithの元の実装はMacLISPでした。
0463デフォルトの名無しさん2008/02/05(火) 19:12:07
HtDP (How to Design Programs) って読んだ人いる?
http://www.htdp.org/2003-09-26/Book/
これどんなもんなんかな?
0464デフォルトの名無しさん2008/02/05(火) 21:45:46
>>463
お前が読めばいいだろ。
0465デフォルトの名無しさん2008/02/06(水) 09:32:49
>>464
そんないじわるな事言わないで><
0466デフォルトの名無しさん2008/02/06(水) 10:17:02
何かと思ったら全部オンラインで読めるじゃん
読むぐらい自分でしろよ
0467デフォルトの名無しさん2008/02/06(水) 10:20:38
つーか読みもしないで損得勘定してるのが気に入らんな。
消え失せろ。
0468デフォルトの名無しさん2008/02/06(水) 12:18:18
>>467
偉そうな事言わないで><
ネットで吠える事しかできない低能くん。
0469デフォルトの名無しさん2008/02/06(水) 12:30:13
自爆かよ
0470デフォルトの名無しさん2008/02/06(水) 15:22:53
>< ←これがきもい
0471デフォルトの名無しさん2008/02/06(水) 15:34:42
468 デフォルトの名無しさん [sage] Date:2008/02/06(水) 12:18:18  ID: Be:
    >>468
    偉そうな事言わないで><
    ネットで吠える事しかできない低能くん。
0472デフォルトの名無しさん2008/02/06(水) 19:30:38
>>463
以前ざっと読んだよ。
いきあたりばったりでしかプログラム書いたことのない無能向け教科書。
0473デフォルトの名無しさん2008/02/06(水) 20:25:59
>472
つまりごく当たり前の事しか書いてないと言いたいわけか。
0474デフォルトの名無しさん2008/02/06(水) 21:07:29
>>473
思考の段取りもつけられないようなバカも
少なからず存在しているのが世の中なわけで。

プログラミング上の概念については何がとりあげられているかは
目次見ればわかる。あとはデザイン・レシピの部分を拾って
ざっと流せば自分にとって読む必要のあるなしは判断できるだろう。
0475デフォルトの名無しさん2008/02/06(水) 22:03:52
>>474
> 思考の段取りもつけられないようなバカも
> 少なからず存在しているのが世の中なわけで。
ちゃいます!!!
"少なからず"ではなく, 彼らの方が多数なんです, 現場に行けば...
0476デフォルトの名無しさん2008/02/06(水) 22:31:14
現場に恵まれていませんね
0477デフォルトの名無しさん2008/02/06(水) 23:02:29
... まあええやん。次いこ。
0478デフォルトの名無しさん2008/02/07(木) 00:23:25
>>474
絡む気は毛頭ないですが、
ざっと読むだけで必要、不必要が分かるってのは
言い過ぎな気がします

ざっと見た人が不必要だと思ったものでも、じっくり
読めばありな部分とかはないもんですかね?

基本的に安いものじゃないんで本はじっくり見る派です。
0479デフォルトの名無しさん2008/02/07(木) 02:41:50
関数型言語マニアのための論文紹介3:FelleisenとSICPとHTDP
http://d.hatena.ne.jp/sumii/20060413/1144920144
SICP目次
http://d.hatena.ne.jp/win_fmv/20000101
HtDP目次
http://d.hatena.ne.jp/win_fmv/20000102

HtDPはSICPより易しいです。
でも「計算機プログラムの構造と解釈」を読み通す根性がないなら
英語アレルギーを乗り越えてHtDPを読むのはなおさら無理です。
素直に「計算機プログラムの構造と解釈」を買って熟読しましょう。
0480デフォルトの名無しさん2008/02/07(木) 05:48:04
どこかのスレにあった紹介だと思うが、
よほどの超絶英語コンプレックスだったんだな、それ書いたやつ。
0481デフォルトの名無しさん2008/02/07(木) 07:51:12
>>478
ママに読んでもらえバカ。
0482デフォルトの名無しさん2008/02/07(木) 08:00:49
じゃあ僕はコンピューターおばあちゃんに読んでもらいます。
0483デフォルトの名無しさん2008/02/07(木) 12:51:51
guileはutf-8で日本語は使えないのでしょうか?
0484デフォルトの名無しさん2008/02/07(木) 20:44:33
>>483
> guileはutf-8で日本語は使えないのでしょうか?

guile> (let ((s "日本語表示テストです."))
(string? s))
#t
guile>
0485デフォルトの名無しさん2008/02/07(木) 20:51:57
日本語が使えるが何を意味してるかによる
0486デフォルトの名無しさん2008/02/07(木) 21:12:09
まあ、日本語なんてこっちじゃ乞食でも気違いでも使ってるからね
0487デフォルトの名無しさん2008/02/07(木) 22:59:39
gosh> (define (日本語が使えますか?) #t)
日本語が使えますか?
gosh> (日本語が使えますか?)
#t
0488デフォルトの名無しさん2008/02/07(木) 23:27:38
日本語schemeキタコレ
0489デフォルトの名無しさん2008/02/08(金) 00:20:27
全角カッコのあつかいはどうなるのでしょうか
0490デフォルトの名無しさん2008/02/08(金) 01:27:27
全角なんてありませんよw
0491デフォルトの名無しさん2008/02/08(金) 01:34:32
lispとかschemeとかやってるとチョコレートもらえないって
先輩が言ったんですけど、ほんまですか?
0492デフォルトの名無しさん2008/02/08(金) 01:36:14
あ、それは本当です。でも人に喋っちゃ駄目だよ。
0493デフォルトの名無しさん2008/02/08(金) 01:38:25
いつもの倍でお得になります。
0494デフォルトの名無しさん2008/02/08(金) 01:47:57
チョコレートもらえないからlispとかschemeとかやって
せつないきもちをまぎらわすんだよ
0495デフォルトの名無しさん2008/02/08(金) 06:09:52
チョコレートなんてLispで書けばいいだろ。
0496デフォルトの名無しさん2008/02/08(金) 08:51:30
((lambda (choco) (choco choco)) (lambda (choco) (choco choco)))
0497デフォルトの名無しさん2008/02/08(金) 10:33:35
guileでUTF-8で

guile> (define hoge "ほげほげ")
guile> hoge
"?\x81??\x81\x92?\x81??\x81\x92"
guile> (string-length hoge)
12

となってしまうけど、4にはならないの?
0498デフォルトの名無しさん2008/02/08(金) 15:26:02
>>497
guileではcharacterは8bitだったはず
(integer->char 256)はエラー
バイナリデータと文字が混在するファイルを扱う場合は
こっちのほうが割り切って使えるからいい
0499デフォルトの名無しさん2008/02/08(金) 16:31:45
ちょうどいいからお前らにUTF-8の文字数を数える
プログラムでも書いてもらおうかな。

【問題】上のGuileのような文字列のバイト列を
UTF-8とみなし、その文字数を返す関数を書け。
0500デフォルトの名無しさん2008/02/08(金) 16:44:49
宿題スレでLispの質問しちゃいけないわけじゃないでしょ?
0501デフォルトの名無しさん2008/02/08(金) 17:15:55
(define (utf8len str)
__(begin (define (follow-char? c)
____________(char<=? #\200 c #\277)))
__(and (string? str)
_______(let ((strlen (string-length str)))
_________(let loop ((acc 0)
____________________(i 0))
___________(cond ((= i strlen) acc)
_________________((char<=? #\0
___________________________(string-ref str i)
___________________________#\177)
__________________(loop (+ acc 1) (+ i 1)))
_________________((and (< (+ i 1) strlen)
_______________________(char<=? #\300
________________________________(string-ref str i)
________________________________#\337)
_______________________(follow-char? (string-ref str (+ i 1))))
0502デフォルトの名無しさん2008/02/08(金) 17:19:21
続きが書き込めない
0503デフォルトの名無しさん2008/02/08(金) 17:52:54
;; SICP挫折中の見習いです
(define (utf8-string-length s)
  (define (first-byte->length b)
    (define byte (char->integer b))
    (cond ((<= #x00 byte #xbf) 1)
          ((<= #xc0 byte #xdf) 2)
          ((<= #xe0 byte #xef) 3)
          ((<= #xf0 byte #xf7) 4)
          ((<= #xf8 byte #xfb) 5)
          ((<= #xfc byte #xfd) 6)))
  (define strlen (string-length s))
  (define (strlen-iter index len)
    (if (<= strlen index) len
      (strlen-iter (+ index (first-byte->length (string-ref s index)))
                  (+ len 1))))
  (strlen-iter 0 0))
0504デフォルトの名無しさん2008/02/08(金) 17:53:58
__(loop (+ acc 1) (+ i 2)))
_((and (< (+ i 2) strlen)
_______(char<=? #\340
________(string-ref str i)
________________#\357)
_______(follow-char? (string-ref str (+ i 1)))
_______(follow-char? (string-ref str (+ i 2))))
__(loop (+ acc 1) (+ i 3)))
_((and (< (+ i 3) strlen)
_______(char<=? #\360
________________(string-ref str i)
________________#\367)
_______(follow-char? (string-ref str (+ i 1)))
_______(follow-char? (string-ref str (+ i 2)))
_______(follow-char? (string-ref str (+ i 3))))
__(loop (+ acc 1) (+ i 4)))
_(else #f))))))
これならどうだ
0505デフォルトの名無しさん2008/02/09(土) 21:41:09
Windows Vistaなんだけど、
SBCL1.0.13よりLarcenyのほうが圧倒的に速いんだけど
こんなものなの?
0506デフォルトの名無しさん2008/02/09(土) 21:52:43
コンパイルした?
0507デフォルトの名無しさん2008/02/09(土) 22:12:21
>>462
3-Schemeと言っていい、Brownと後継Bloodはみつからず、
その代わり米澤研のRScheme, Blackが見つかりました。
RSchemeは論文に全コードが、Blackは米澤研のWebサーバ:/pub/black
0508デフォルトの名無しさん2008/02/09(土) 23:38:58
ウィンドウスxpで使えて最初から
hspみたいなライブラリがついてる実装って無い?
0509デフォルトの名無しさん2008/02/10(日) 01:03:55
>>505
測定したプログラムや測定方法を書いてくれたら追試してくれる人が居るかもよ
0510デフォルトの名無しさん2008/02/10(日) 01:06:52
Larcenyのほうが設計が10年以上新しいんだし、そんなもんじゃね。
>>508はPLT Schemeとかどうよ。
0511デフォルトの名無しさん2008/02/10(日) 03:04:12
scsh という Scheme シェルを入れてみた。未だ起動もしてないけど。

http://www.scsh.net/


それだけ。
0512デフォルトの名無しさん2008/02/10(日) 08:43:08
>>508
つ http://community.schemewiki.org/?scheme-faq-standards#H-3sv08v
つ http://community.schemewiki.org/?scheme-faq-standards#specialimpl
0513デフォルトの名無しさん2008/02/10(日) 11:47:46
>>510
見てみます
ありがとうございました
0514デフォルトの名無しさん2008/02/10(日) 22:14:31
>>505

Larceny めちゃくちゃ速いんで驚いたよ。
主要開発メンバーってLight Ship MacScheme 作ってた人でしょ。
この処理系、かなり期待。

0515デフォルトの名無しさん2008/02/10(日) 22:31:00
いやだからコンパイラで比べてるのかインタプリタで比べてるのかくらい晒してくれよ
0516デフォルトの名無しさん2008/02/10(日) 22:47:46
> (time (tak 12 6 0))
Words allocated: 0
Words reclaimed: 0
Elapsed time...: 156 ms (User: 156 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
12

compile-file にしてもしなくても同じ結果。読み込んだ時点で
コンパイル済みなんじゃないかな。
記憶違いかもしれないけどアセンブラがどうとかってHPにあったような。
かなり最適化をしているのかも。
0517デフォルトの名無しさん2008/02/10(日) 23:00:19
現在のLisp処理系のコンパイラってどんな仕組みになってんの?
Lisp1.5の時代はLAPを使ってたけど、今はVMなんかね?

Arcのコード読みでああいう簡単なのはおおよそわかったけど、
本格的なのってどういう仕組みをとってるんだろう。
0518デフォルトの名無しさん2008/02/10(日) 23:05:01
ネイティブ吐くのもいるし、
独自じゃなくて、JVMをターゲットにするのもある。
0519デフォルトの名無しさん2008/02/10(日) 23:58:11
最近ではC言語のソースを吐くってのは流行らんのかね?
あれ、良いと思うんだけどな。
0520デフォルトの名無しさん2008/02/11(月) 00:03:19
C言語のソースを吐かれても人間が可読でなければ意味がない。
0521デフォルトの名無しさん2008/02/11(月) 00:04:18
yaccとかlexの立場がないな
0522デフォルトの名無しさん2008/02/11(月) 00:04:51
いや、新しいCPUの最適化とかをC言語コンパイラに任す事ができるw。
0523デフォルトの名無しさん2008/02/11(月) 00:30:25
SBCLのManualページを見たけどよくわからない
・・・俺が馬鹿なのは知ってるから。
SBCLのコンパイルから実行までの手順をご教授願いたい。
正直言って
初めてLISPをインストールして
「どんなのかなあ?使ってみようかなあ」と思っても
CやJAVAのように簡単に入口の手順が調べられないんですよ。
「そんな厨はLISP使うな!」は無しでお願いします。
0524デフォルトの名無しさん2008/02/11(月) 00:44:41
「SBCLをコンパイルする」のか「SBCLでコンパイルする」のかで、話が変わると思うよ
0525デフォルトの名無しさん2008/02/11(月) 00:47:36
>523
で、プラットフォームは何?
Mac,Linux,Windows?

初めてでWindows上ならxyzzy上のLispなんかの方が手近だと思うが。
Meadowだ、slimeだ、Emacsだとかは面倒くさいでしょ?
0526デフォルトの名無しさん2008/02/11(月) 01:01:22
xyzzyは独自仕様だからお勧めしにくいな。俺のお薦めはCLISP。
0527デフォルトの名無しさん2008/02/11(月) 01:08:39
1. LispWorks Personal Edition をダウンロードする
2. インストールする
3. New File でファイルを編集
4. コンパイルボタンを押す
5. REPL から呼び出す
0528デフォルトの名無しさん2008/02/11(月) 01:09:31
って言うか、何のために「SBCLのコンパイルから実行」したいの?
それによっても答えが変わると思う
0529デフォルトの名無しさん2008/02/11(月) 01:13:14
i386とpowerpc以外のCPU
LinuxとFreeBSDとMacOSX以外のUnixLikeOSで動かせて
Gauche並の軽さ&速さとは言わないけど
Pythonくらいの軽さ&速さはあるCL処理系ってありますか?
SchemeでもGaucheより速い処理系も軽い処理系もあるけど
速さと軽さのバランスが一番いいのはやはりGauche
コンパイルすればCLのがチョッ速だと思うけど重い処理系が多いように思えます
0530デフォルトの名無しさん2008/02/11(月) 01:16:48
>CやJAVAのように簡単に入口の手順が調べられない

と書いてあるから、SBCL 自体のコンパイルをしたい訳ではないと予想。
cc や javac を使う様な感じで、コンパイル済みファイル(fasl?)を作成して
それをロード→実行する方法を聞いているんじゃないかしら。

すまんが俺は最近 SBCL を触っていないので、やり方が分からん。
0531デフォルトの名無しさん2008/02/11(月) 01:18:32
>>529
CLISP
0532デフォルトの名無しさん2008/02/11(月) 01:22:00
わざわざ答えて頂いたのに申し訳ないのですが
CLISPの最近のverはi386-OpenBSDでも動かないのです
(ビルドは出来るけどsaveinitmem:executable Tとか動かない)
それにちょっと遅すぎます
ECLのほうが速いくらいです
0533デフォルトの名無しさん2008/02/11(月) 01:23:15
>524、525
すみません説明不足で
要するに先に出てた、SBCL VS Larceny を
Tak関数を使ってやりたいのです。

OS:Windows Vista
LISP:SBCL1.0.13
でTak関数がtak.clというファイル名であるとして
(compile-file "tak.cl")
とすれば、tak.fasl ファイルができるのですが・・・
ここから先が・・・orz

でもコンパイルしたとしても
実行時にSBCL起動して
(time (tak 12 6 0))
なんてすると意味の無いような気がするし、
"(time)"の部分も当初の tak.cl に入れて
コンパイルすればいいのでしょうが、
そこまで頭が回らないので助けていただこうかと。




0534デフォルトの名無しさん2008/02/11(月) 01:23:53
そんな無理して CL 使わんでも…。
今度は CLISP より ○○ のほうが優れているように思えます!! とか言いそうだな…。
無理せず Gauche 使えばいいじゃん。
0535デフォルトの名無しさん2008/02/11(月) 01:25:40
>>532
そういう事は先に書かないと駄目だよ
ECL はネイティブコンパイルするから CLISP よりも速くて当然なんじゃないの?
0536デフォルトの名無しさん2008/02/11(月) 01:27:38
ECLは速さはまあ及第点なのですが
重すぎるのが難点
KCLファミリーでありながらCLtl2な所とか
長所もいろいろあるのですが
(*package*がCOMMON-LISP-USERだからCLtl2とみなしてもいいんですよね?)
0537デフォルトの名無しさん2008/02/11(月) 01:29:18
Larceny が勝利!!よって Scheme >>> CL !!! とかやりだしそうだな…。
まぁ、10年以上後発なんだし結果は見えているような。
0538デフォルトの名無しさん2008/02/11(月) 01:31:25
元気な奴だな。マニュアルも読まれずに評価されるCLコンパイラがちょっとだけ気の毒
0539529=532=5362008/02/11(月) 01:43:40
普段はSchemerですが
CLにも敬意を表してちゃんと使えるようになりたいと考えております
多分に主観的ですが
エレガントさはSchemeに分が
それ以外の大部分はCLに分があると思っています

LuaみたいにAnsiCさえあれば動くぜ!みたいな処理系がCLにもSchemeにもほしいものです
0540デフォルトの名無しさん2008/02/11(月) 02:09:14
>>539
GC等のことを考えると速度的なペナルティ無しに完全にANSI-Cの範囲で記述するのは難しい
んじゃないかな。遅い処理系なら作れると思うけど、速くするには何かズルしないと。w
0541デフォルトの名無しさん2008/02/11(月) 02:09:25
(define (valentine choco)
     (if (zero? choco)
       (display "お前は既に死んでいる")
     (display "カエルchokochoko3chokochoko/n合わせてchokochoko6chokochoko")))
0542デフォルトの名無しさん2008/02/11(月) 02:11:41
>>533
(load "tak.fasl")
0543デフォルトの名無しさん2008/02/11(月) 02:37:04
Gaucheの本ってまだぁ?チンチン
0544デフォルトの名無しさん2008/02/11(月) 04:26:33
Common Lispに敬意を払いたいといいつつ
takを選んでしかも最適化宣言無し…意図が無いとしたら天才かもしれん。

haskell使えば?
0545デフォルトの名無しさん2008/02/11(月) 04:46:57
tak の人とは別人じゃないかな?
俺も Schemer が余興でやるなら CL より Haskell が良いと思う
■ このスレッドは過去ログ倉庫に格納されています