Lisp Scheme Part18 ..
[2ch|▼Menu]
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