ところで、LISPにはscanlに該当する関数ってあるんでしょうか? > valvallowさん正直わかりません、知りません、すみません。。Haskell 読めませんが、fold っぽいですね。取りあえず確認がてら同じようなものをでっち上げてみます。遅延評価でもなく Gauche 依存ですけれども。以下コード。
非常にカッコ悪いですね・・・。なんでこんなに難しそうになるわけ・・・。
素直に named-let で書いた方がよかったみたいです。
きっと R5RS の範囲の Scheme にはないんじゃないでしょうか。たぶん R6RS にも。srfi か Common Lisp にはあるかも?教えてエロい人!
追記
そうか。fold2 で書くにしても、こうすれば receive 取れて少しマシか。追記2
毎度のことながら教えていただきました!@valvallow (use gauche.collection)(define (scanl f x xs)(values-ref (map-accum (^(a acc)(let1 z (f a acc) (values z z))) x xs) 0))なるほど、map-accum ですかー!ちょっと写経。
values-ref ってのもあるのか。
追記3
Clojure で書いてる人がいらっしゃる。追記4
遅延評価だとこんな感じ?いや、良くわかりませんが・・・。追記5
また教えていただきました!ですが、マニュアル見ても iterator->stream がよくわかりません。。@valvallow (use srfi-1)(use util.stream)(define(scanl f x xs)(iterator->stream(lambda(n e)(until(null? xs)(n x)(set! x(f x(pop! xs))))(e))))せっかくなので、インデント付けて gist に貼っつけました。
0 件のコメント:
コメントを投稿