Lisp Scheme Part18
..
751:デフォルトの名無しさん
07/12/20 01:28:38
>>748
Schemeの文法良く調べろよ。
752:デフォルトの名無しさん
07/12/20 04:05:38
(define assoc
(lambda (key alist)
(cond ((null? alist)
#f)
((equal? key (caar alist)))
(car alist))
(else
(assoc key (cdr alist))))))
753:デフォルトの名無しさん
07/12/20 17:54:21
>>752
乙!
null?だよね。間違ってたw
あとcaarの方が簡潔だね。
754:デフォルトの名無しさん
07/12/20 17:55:22
>>751
文法はアルゴリズムじゃないぜw
755:デフォルトの名無しさん
07/12/20 17:57:38
>>754
アルゴリズムの話なんてしてないだろw
756:デフォルトの名無しさん
07/12/20 18:00:54
>>750
釣りかもしれないけどSICPとかどうよ?
757:デフォルトの名無しさん
07/12/20 18:03:46
>>755
はぁ?
>750 名前:デフォルトの名無しさん 投稿日:2007/12/20(木) 00:26:32
>SchemeかLispで書いてあるアルゴリズムの教科書を教えてください。
>
>
>751 名前:デフォルトの名無しさん 投稿日:2007/12/20(木) 01:28:38
>>>748
>Schemeの文法良く調べろよ。
>
>754 名前:デフォルトの名無しさん 投稿日:2007/12/20(木) 17:55:22
>>>751
>文法はアルゴリズムじゃないぜw
>
>
>755 名前:デフォルトの名無しさん 投稿日:2007/12/20(木) 17:57:38
>>>754
>アルゴリズムの話なんてしてないだろw
アルゴリズムの話じゃなきゃなんなの?
758:デフォルトの名無しさん
07/12/20 18:30:18
これは新手の荒しか?
759:デフォルトの名無しさん
07/12/20 18:34:33
/\⌒ヽペタン
/ /⌒)ノ ペタン
∧_∧ \ (( ∧_∧
(; ´Д`))' ))(・∀・ ;)
/ ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O ノ ) ̄ ̄ ̄()__ )
)_)_) (;;;;;;;;;;;;;;;;;;;)(_(
アンカーをもう一度見直すんだ
760:デフォルトの名無しさん
07/12/20 18:58:27
>>759
わはー、おっちょこちょいはワシだけじゃなかったらすぃ
761:デフォルトの名無しさん
07/12/20 18:58:29
>>754 が勘違いしたってことでいいのか?
762:デフォルトの名無しさん
07/12/20 20:15:05
Lisp/Schemeでセジウィックみたいなアルゴリズムの本って思いつかないな?
SICPは良い本だけど辞書的ではないしなぁ。
763:デフォルトの名無しさん
07/12/20 21:05:07
>>752
(define (assoc key alist)
(and alist
(let loop ((ls alist))
(if (equal? key (caar ls))
(car ls)
(loop (cdr ls))))))
764:デフォルトの名無しさん
07/12/20 21:10:53
関数型という範疇であればアルゴリズムの本はあるよ。MLだけど。
Purely Functional Data Structures
Algorithms: A Functional Programming Approach
765:デフォルトの名無しさん
07/12/20 22:08:20
>>749さんのは動かなかったので修正しておきました。
(define assoc
(lambda (key alist)
(cond
((null? alist) #f)
((equal? key (car (car alist))) (car alist))
(else (assoc key (cdr alist))))))
>>752さんのも動かなかったので修正しておきました。
(define assoc
(lambda (key alist)
(cond
((null? alist) #f)
((equal? key (caar alist)) (car alist))
(else (assoc key (cdr alist))))))
>>763さんのは動きました。loopの使い方がイイ感じですね。
766:デフォルトの名無しさん
07/12/20 23:38:07
Lispで
(setq pref-alist
'(("山梨県" . "甲府市")
("神奈川県" . "横浜市")
("愛知県" . "名古屋市")
("茨城県" . "水戸市")))
とやっているのをschemeではどのように書けばよいのでしょうか?お願いします。
767:デフォルトの名無しさん
07/12/20 23:40:38
トップレベルなら setq を define にするだけだべ
768:デフォルトの名無しさん
07/12/21 00:06:44
>>767
gaucheでそうやってみると
gosh> *** READ-ERROR: Read error at "c:/meadow/test-assoc.scm":line 43: EOF encountered in a string literal: "壤壤壤「壤ィ"
Stack Trace:
となるので間違っているのかと思いまして。日本語が上手く通っていないだけなんですね。ちょっとがっかりですが納得できました。有り難うございます。
769:デフォルトの名無しさん
07/12/21 00:15:17
英語で
(define pref-alist
'(("yamanashi" . "kofu")
("kanagawa" . "yokohama")
("aichi" . "nagoya")
("ibaraki" . "mito")))
と書いて、
>
で
c-c c-l ファイル名
したあと
>gosh> (assoc "ibaraki" pref-alist)
("ibaraki" . "mito")
と出来ました。お騒がせしました。utf-8が上手く行ってないようです。
770:デフォルトの名無しさん
07/12/21 00:24:35
c-x return f utf-8 return
してからセーブしたら解決しました。
Gaucheの仕様がコンソール上ではsjisでOKなのに、ファイルだとutf-8しか受け付けないというのがわかっていなかったのが原因でした。
771:デフォルトの名無しさん
07/12/21 00:46:35
>>748
> (let ((x)) x) -> ERROR
これはletの返り値じゃなくて、文法エラーだぜ。
初期値省略は許されてない!
772:デフォルトの名無しさん
07/12/21 01:09:49
>>765
> >>763さんのは動きました。
動かないと思うんですが
773:748
07/12/21 06:38:07
=>が返り値
->が結果のつもりで書き分けたんですが…
774:デフォルトの名無しさん
07/12/21 07:23:25
URLリンク(page13.auctions.yahoo.co.jp)
>希望落札価格:10,000 円
(; ・`д・´) な、なんだってー!! (`・д´・ ;)
775:デフォルトの名無しさん
07/12/21 08:08:30
amazonのマーケットプレイスでの「入門Scheme」が\12,000だからなぁ。
776:デフォルトの名無しさん
07/12/21 09:07:32
>>773
> ->が結果のつもりで書き分けたんですが…
>>748では
> (let ((x)) x) -> ERROR
> Unspecific値が返るかと密かに期待したんですけど
って自分で言ってんじゃん。
> CLと違ってSchemeではletはlambdaの派生式だから当然と言えば当然ですね
とか何の関係ないし。初期化しないとUnspecific値が得られると思ったんでしょ。
777:デフォルトの名無しさん
07/12/21 09:12:24
>>774
この人かな
URLリンク(www.geocities.jp)
778:748
07/12/21 09:57:25
いやだから
期待したのは(let ((x)) x) => #<unspecific>
結果は(let ((x)) x) -> ERROR
そもそも私の使ってる実装にERROR値はないんです
ダミーの引数を受け取る名前付きletを書いてて
初期値を最初'()にしてたんですけど
'()よりも#<unspecific>のほうがいいかなと思って
深く考えずに実引数を省略してみたんです
その時はletがlambdaの派生式だってことを忘れてて
じゃあletがlambdaのマクロじゃないCLがどうなのかなと思って調べただけなんです
779:デフォルトの名無しさん
07/12/21 15:25:21
Makefileの文法が気に入らないので、
S式で書けるイカスmakeの代替プログラムがないかと思ってるんですが、
みなさんごぞんじないですか?
780:デフォルトの名無しさん
07/12/21 17:00:41
>>778
> そもそも私の使ってる実装にERROR値はないんです
仕様的に、エラーは値じゃなくて、
エラー状態にあることが、「通知(signaled)される」か、
通知が明記されてない場合は、推奨されないが無視していいんですよ。
エラーが無視された時に式の値が未規定(unspecified)である実装はありうるけど、
それは「エラー値」じゃないし、#<unspecific>とも限らないのです。
なんらかのオブジェクトである必要はあります。
通知される場合には、値を返さず、
トップレベルに復帰する実装が多いと思います。
781:748
07/12/21 18:05:36
内容のある話じゃないのにドツボにはまっていく…
>>780
771さんが
>>(let ((x)) x) -> ERROR
>これはletの返り値じゃなくて、文法エラーだぜ。
と仰ったので
返り値じゃないことは分かっています、だから=>と->で書き分けました
と773で書いたのです
>>776
CLはたしかletがlambdaの糖衣構文じゃないから
((lambda (x) x))がエラーになる処理系でも
(let ((x)) x)がエラーになるとは限らない
他方、R5RSはletがlambdaの派生式だから
((lambda (x) x))がエラーになる場合は
(let ((x)) x)も当然エラーになる
と書きたかったのです
ところでR5RSの3.2においてport?という述語がありますが
port?という述語は標準手続きにありませんよね?
あと、promiseは典型的にはthunkで実現されてますけど
R5RSでは「一つの可能な実装」とされているにすぎませんので
標準手続きにおいてpromiseかどうかを判定する手段はありませんよね?
782:デフォルトの名無しさん
07/12/21 18:42:02
>>772
Gaucheで動くと思うけどなぁ?
(define (assoc key alist)
(and alist
(let loop ((ls alist))
(if (equal? key (caar ls))
(car ls)
(loop (cdr ls))))))
;-----------------------------------------------------------------
(define pref-alist
'(("山梨県" . "甲府市")
("神奈川県" . "横浜市")
("愛知県" . "名古屋市")
("茨城県" . "水戸市")))
;-----------------------------------------------------------------
(assoc "山梨県" pref-alist)
783:デフォルトの名無しさん
07/12/21 18:53:44
(assoc "山梨" pref-alist)
*** ERROR: pair required, but got ()
784:デフォルトの名無しさん
07/12/21 19:15:03
>>783
ファイルに>>782を書き込んで、そのファイルをeamcsとかMeadowでc-c c-l <<ファイル名>> したあとでやってみるといいYO!
785:デフォルトの名無しさん
07/12/21 19:16:29
>>783
山梨じゃなくて「山梨県」だYO!
786:デフォルトの名無しさん
07/12/21 19:17:29
gosh> (assoc "山梨県" pref-alist)
("山梨県" . "甲府市")
gosh>
787:デフォルトの名無しさん
07/12/21 19:25:50
783さんはマッチしないキーがある場合の判定が抜けていることを指摘しているのでは?
788:デフォルトの名無しさん
07/12/21 19:28:45
ところで最初の(and alistは何のため?
789:デフォルトの名無しさん
07/12/21 19:30:07
日本語がおかしかった
与えられたキーがマッチしなかった場合
790:デフォルトの名無しさん
07/12/21 21:15:06
>>787-789
漏れもandだけではnull?の代わりにならないような希ガス
791:デフォルトの名無しさん
07/12/21 23:36:44
再帰の方がきれいに書けちゃうんだな
792:デフォルトの名無しさん
07/12/22 00:39:53
>>779 Lisp で良ければ defsystem とか asdf とか?Scheme にも多分似たようなものがありそう。
793:デフォルトの名無しさん
07/12/22 01:33:19
>>763
(define (assoc key alist)
(and (pair? alist)
(let loop ((ls alist))
(if (equal? key (caar ls))
(car ls)
(loop (cdr ls))))))
794:デフォルトの名無しさん
07/12/22 01:38:15
>>793
>>788
795:デフォルトの名無しさん
07/12/22 02:28:53
>>794
andはリストを左から右へ評価して行って、偽が見つかると#fを返すから。
(cond ((null? alist) #f)
...)
と書くよりは短く書ける。
(pair? alist)が偽だったら即座に#fを返しそこで終了する。
796:デフォルトの名無しさん
07/12/22 03:00:08
>>793で(pair? alist)が評価されるのは最初の1回だけでしょ?
alistのcdrをとっていってcdr部が空リストになった場合=keyがなかった場合の判定が欠けてる
gosh> (assoc "山梨" pref-alist)
*** ERROR: pair required, but got ()
797:デフォルトの名無しさん
07/12/22 04:14:14
>> 781
なるほど
きみの言わんとする意味がだいたい見当がつきました
きみはこう言いたいのでしょう
Unspecific値はどこだ!
798:デフォルトの名無しさん
07/12/22 04:24:14
;andを使った場合
(define (assoc key alist)
(let loop ((ls alist))
(and (pair? ls)
(if (equal? key (caar ls))
(car ls)
(loop (cdr ls))))))
;andを使わない場合
(define (assoc key alist)
(let loop ((ls alist))
(cond ((null? ls)
#f)
((equal? key (caar ls))
(car ls))
(else
(loop (cdr ls))))))
799:デフォルトの名無しさん
07/12/22 08:52:13
>>781
内容ないって事ないんだけどな。
エラー状態とトップレベルの関係、さらにunspecified値の扱いは、
メタ・サーキューラな意味において、schemeが昔から弱かった部分。
MLなんかはもっとカッチリしてる。
SchemeはR6RSで少し前進したけれど、
やっぱりR?RS的な非形式的な意味論なんだな。
800:デフォルトの名無しさん
07/12/22 12:52:47
>>797
Unspecific 値なんて存在しない!
801:デフォルトの名無しさん
07/12/22 13:23:04
Lifting して Unspecific 値を、メタに扱える言語ってあったよな。
802:デフォルトの名無しさん
07/12/22 14:23:23
>>765と>>798で4つのassocが登場。
どれが一番早いんだろう?
教えて!判定方法を知ってるエロい人。
803:デフォルトの名無しさん
07/12/22 14:32:16
>>802
実測基本
804:デフォルトの名無しさん
07/12/22 16:15:18
>>802-803
メモリ使用量の少ないのはどれかも考えると面白いね。
805:デフォルトの名無しさん
07/12/22 16:17:31
>>803
ストップウォッチでは差が出ません。
どうやればいいでしょうか?
例えばGaucheではどうやるんでしょう?
806:デフォルトの名無しさん
07/12/22 16:24:28
差が出ないなら、差が出る程度まで繰り返せばいいじゃないの。
807:デフォルトの名無しさん
07/12/22 16:40:00
Gaucheにはtimeがあるみたい
808:デフォルトの名無しさん
07/12/22 16:54:23
プロファイラ的なものって何がある?
809:デフォルトの名無しさん
07/12/22 17:07:24
gosh> (time (assoc "山梨県" pref-alist))
;(time (assoc "山梨県" pref-alist))
; real 0.000
; user 0.000
; sys 0.000
("山梨県" . "甲府市")
gosh>
810:デフォルトの名無しさん
07/12/22 17:38:00
シーケンシャルに検索してんのに
1番目のデータを計ってどーすんのw
811:デフォルトの名無しさん
07/12/22 17:40:45
gosh> (time (assoc "茨城県" pref-alist))
;(time (assoc "茨城県" pref-alist))
; real 0.000
; user 0.000
; sys 0.000
("茨城県" . "水戸市")
gosh>
812:デフォルトの名無しさん
07/12/22 17:41:59
O(n)なんだからnの数を増やしてみなきゃ
813:デフォルトの名無しさん
07/12/22 22:12:16
1億個くらいは入れなきゃですよ
814:デフォルトの名無しさん
07/12/23 19:02:44
あれ?Kahua FreeBSDで動くようになった?
815:デフォルトの名無しさん
07/12/23 20:04:51
>>814
かなり前からなってるぞ。
816:デフォルトの名無しさん
07/12/24 18:53:25
;(define (assoc key alist)
; (and (pair? alist)
; (pair? (car alist))
; (or (and (equal? key (caar alist))
; (cdar alist))
; (assoc key (cdr alist))))
817:デフォルトの名無しさん
07/12/24 18:56:45
インデント思いっきり間違えたorz
しかもずれてるしorz
(cdar alist)は(equal?と同格ね
818:デフォルトの名無しさん
07/12/25 02:11:31
さらにどこか間違ってると思ったら
(cdar alist)じゃなくて(car alist)だったorz
cdarだったら連想リストじゃなくてデータだけを返す上に
データが#fだった場合に次に進んでしまう
819:デフォルトの名無しさん
07/12/25 16:59:43
キタ━━\(^λ^)/━━!!
プログラミングGauche
・著者:川合史朗 監修
Kahuaプロジェクト 著
・定価:3360円(本体3200円+税)
・B5変 464頁
・ISBN 978-4-87311-348-7
・発売日:2008/02
URLリンク(ssl.ohmsha.co.jp)
820:デフォルトの名無しさん
07/12/25 21:01:42
2月かあ
821:デフォルトの名無しさん
07/12/25 23:22:54
Kahuaプロジェクトのメンバーがもしここを見てたら期待してるので頑張ってくださいね。
バグ取りと校正もしっかりお願いしますねw
必ず買いますYO!
822:デフォルトの名無しさん
07/12/25 23:34:01
その前に読んどきたい本があるからちょうどいいや
823:デフォルトの名無しさん
07/12/26 02:40:05
>>819
あれ? 延びたの?
オライリーからのメールだと一月予定だったんだが。
824:デフォルトの名無しさん
07/12/26 22:44:18
609で書いたzaurus-OpenBSDでGambit-Cのリーダがいかれてる理由が分かりました
エンディアンネスの誤認でした
最初に疑ったのがエンディアンネスの問題でしたが
リーダ以外に変な挙動をしなかったので見逃してました
OpenBSD4.2になってBoehm-GCの7.x系統が動くようになったので
Gaucheも7.x系統に移行した暁には動くようになりそうです
現在もgcディレクトリをいじったら
そこそこ動く実行ファイルはできるのですが
特定の場合にassertで落ちるので常用はできなそうです
あとLinuxの場合は特に問題にならないのですが
BSD系でscheme48から外部モジュールを読み込む場合
実行ファイルであるscheme48vmが-−export-dynamicでリンクされていないと
s48_で始まる関数が外部モジュールから利用できないようです
(Linuxは--export-dynamicがデフォルト?)
Gambit-Cもscheme48も(zaurus-OpenBSDも)
利用者があまりいないので有用な情報でもありませんが
一応報告しときます
825:デフォルトの名無しさん
07/12/27 01:31:26
GaucheはさっさとWindowsに完全対応しろよ。何やってんだ。
826:デフォルトの名無しさん
07/12/27 01:54:40
Windows(笑)
827:デフォルトの名無しさん
07/12/27 05:08:21
Windows使ってねーから個人的にはどうでもいいけど。
必要ならScheme Artsに仕事として依頼するのがはやくて確実じゃないか。
828:デフォルトの名無しさん
07/12/27 07:30:30
Gaucheは早く1.0出して欲しいなー
829:デフォルトの名無しさん
07/12/27 08:59:40
バージョン番号なんてどうでも良くない?
830:デフォルトの名無しさん
07/12/27 13:01:03
頭の尖った上司が気にするんですよお
831:デフォルトの名無しさん
07/12/27 15:57:04
「まだ0.*だからうるさく言うなよ」
832:デフォルトの名無しさん
07/12/27 19:34:48
非R6RSのschemeでファイルをランダムアクセスで読み込む場合は
処理系依存のfile-position相当の関数を呼ぶのと
遅延評価の無限ストリームを作るのと
どっちが一般的ですか?
R6RSになればset-port-position!が使えるみたいですけど
833:デフォルトの名無しさん
07/12/27 19:39:17
R6RSより、.NETに対応してほしい。
834:デフォルトの名無しさん
07/12/27 22:14:34
現在R6RSをサポートしてる処理系ってLarcenyだけですか?
大御所どころも軒並みR6RSを実装する予定もないみたいですし
どうなっちゃうんでしょうね
835:デフォルトの名無しさん
07/12/27 22:57:26
みんなこっそりやってるんですよ
836:デフォルトの名無しさん
07/12/28 01:48:42
URLリンク(www.cs.indiana.edu)
は、いまR6RSに9割準拠らしい。
837:デフォルトの名無しさん
07/12/30 12:42:16
ちゅーかみんな対応する気無いなら、策定すんなって感じだな。
838:デフォルトの名無しさん
07/12/30 13:44:48
向かい側ではC99とかね
839:デフォルトの名無しさん
07/12/30 23:32:51
>>837
R6RSの投票のとき処理系の作成者のほとんどが反対だったのに、数の暴力で押し切られたって事実を知ってる?
840:デフォルトの名無しさん
07/12/31 00:10:27
嫌なら処理系の作成者で別の標準を作ればよいのでは?
841:デフォルトの名無しさん
07/12/31 00:12:35
いまさら変な標準なんか作らなくていいから、.net frameworkに対応しろよ。
842:デフォルトの名無しさん
07/12/31 00:35:01
>>839
反対した人はどんな人が居るの?
shiro さんは反対に投票した様に記憶しているけど
843:デフォルトの名無しさん
07/12/31 01:05:09
>>840
「嫌なら対応しなけりゃいい」だろ。
で、実際にみんなそうやってる。めでたしめでたしだ。
844:デフォルトの名無しさん
07/12/31 01:15:07
>>842 調べてみた。
票:投票内容(○:賛成、×:反対、−:未投票)
実:R6RSを実装するかどうか(Marc Feeleyのアンケート)
票 実
Manuel Serrento (Bigloo) − ×
Kent Dybvig (Chez Scheme) ○ ○
Felix WinkelMann (Chiken) × ×
Marc Feeley (Gambit) × ×
Shiro Kawai (Gauche) × ×
Ludovic Courtes (Guile) − ×
Tim Hickey (JScheme) − ×
Per Bothner (Kawa) × ×
Will Clinger (Larceny) × ○
Tom Lord (Pika Scheme) ○ ×
Matthew Flatt (PLT Scheme) ○ ○
Mike Sperber (Scheme 48) ○ ○
Aubrey Jaffer (SCM) × ×
Scott Miller (SISC) − ×
Jeffrey Mark Siskind (Stalin) × ×
Erick Gallesio (STklos) − ×
845:844
07/12/31 01:21:15
ミスった。
Kawaの人、反対票じゃなくて未投票
846:デフォルトの名無しさん
07/12/31 01:26:24
>>844-845
大感謝!
一応 Gauche は R6RS も気にしつつ行くみたいですね
URLリンク(lists.sourceforge.jp)
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5089日前に更新/189 KB
担当:undef