こんにちわ。Daizo です。
なんか、問題40のロジックが浮かばないので、Gauche で前の問題を解いてましたループ処理がどうしてもわかりません。なので、ループ処理をしないやり方とか聞いてやるのですが、それはそれで、よくわからないんだよね。
その時によく出るのが、lambda なんだよね。
使い捨て関数ってことなんだけど、書き方とか、使い方とかわからないんだよね。
これが出来るようになれば、数行渡って書いていたようなことも、1行程度で終わるんだよね。
便利なのはわかるんだけど、理解して使えるようになるのは、なかなか難しい。
例えば、
;; データリストの作成
(define num-lst
(filter-map digit->integer (string->list num-str)))
;; 計算関数の作成
(define (calc13 i)
(fold * 1 (take (drop num-lst i) 13)))
;; ポジションリストの作成
(define pozi (iota (- (length num-lst) 13)))
;; ポジションリストに従って、順番に計算
(define keisan
(map calc13 pozi))
こんな感じのコードがあるんだけど、lambda を使うと、
(define num-lst
(filter-map digit->integer (string->list num-str)))
(define keisan
(map (lambda (i)
(fold * 1 (take (drop num-lst i) 13 )))
(iota (- (length num-lst) 13))))
と、これぐらいで終わるんだよね。
出来るようになりたいんだけど、なかなか理解が難しくてね。
少しづつ、勉強してわかるようになりたいです。