第130回 素人くさいSICP読書会(at 三田某所)
- 会場提供ありがとうございました
- 杉本さんが新しいMacBookを披露。かっくんが異様にうらやましがってた
- 問題4.50
- amb-choicesでシャッフルするよ派とanalyze-ambのcarとcdrを書き換えるよ派に分かれる
- シャッフルについてruiさんが書いてるのを杉本さんが発見→ここ
- 自分は後者
- こんな感じ↓のをかませばOKのはず
(use srfi-1) (use srfi-27) (let ((n (random-integer (length choices)))) (let ((rcar (list-ref choices n)) (rcdr (append (take choices n) (cdr (drop choices n)))))
- Alyssaの問題を救うかどうか確かめるにはそもそも問題4.49をやってなきゃなんない
- ということで戻る
- 問題4.49
- みんなはamb-list(リストを引数として取れるamb)がどうのという話をしてたんだけど、自分が「別にambじゃなくてランダムに返せばよくね」と言ったら割と賛同してもらえた
- というか家に帰った後で考えたんだけど、「常に成功し」と問題文に書いてある時点で、ambは使えないよね。ambだとすべて選択しおわったら失敗しちゃうので
- いつも違うものを返すようにまじめに実装してもいいんだけど、Alyssaがつまんないことを示すだけなら、↓みたいな手抜き実装で十分な気がしてきた
(define (parse-word word-list) (let ((tag (car word-list))) (cond ((equal? tag 'noun) '(noun student)) ((equal? tag 'verb) '(verb studies)) ((equal? tag 'article) '(article the)) ((equal? tag 'prep) '(prep for)))))
- eq?じゃなくて遅いequal?を使ってるのは、この処理系ではたしか標準でequal?しかスルーさせてなかったためで、他意はない
【追記】
処理系を見たら、スルーさせてるのはeq?の方だった…