コードの最適化?
ということでちょっとコード書きますよっと。
Scheme手習いから。
(define (insertR new old lat) (cond ((null? lat) '()) (else (cond ((eq? old (car lat)) (cons old (cons new (cdr lat)))) (else (cons old (insertR new old (cdr lat))))))
(define (multiinsertR new old lat) (cond ((null? lat) '()) (else (cond ((eq? (car lat) old) (cons old (cons new (multiinsertR new old (cdr lat))))) (else (cons old (multiinsertR new old (cdr lat))))))))
(define (multiinsertL new old lat) (cond ((null? lat) '()) (else (cond ((eq? (car lat) old) (cons new (cons old (multiinsertL new old (cdr lat))))) (else (cons old (multiinsertL new old (cdr lat))))))))
で、この3つに共通する点があって
((null? lat) '()) (else (cond
ここの部分ですね。
以前書いた記事だと簡単に省略しちゃった
(else (cond
このコード。理由は
((null? lat) '())
が真のときこれ以下のコードは評価されることがないからだったんだが…。
同じ理由でいくと省いてもよさそうなんだけど、なんでだか省くのをためらわれる。
可読性というかそれなりに意味があるから…。
((null? lat) '()) (else
これはlatに関する2つの質問で「latはnullか」という質問と「latは1つ以上のS式から成り立つリストであるか」という質問だと思うんですよね。
恐らくは今後も似たようなパターンに出会うと思うんだけど、見た感じとちょっと動かしてみた感じだとこの部分の
(else (cond
はあってもなくてもいいと思うんです。(多分全体としての意味合いは変わらない?)
だけど、可読性を考えるとあった方がいいのかなぁと思ったりもする今日この頃。
- 作者: Daniel P. Friedman,Matthias Felleisen,元吉文男,横山晶一
- 出版社/メーカー: オーム社
- 発売日: 2010/10/22
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 129回
- この商品を含むブログ (32件) を見る