Lisp Scheme Part18
..
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
5099日前に更新/189 KB
担当:undef