10:37:15 [g000015'in]
10:37:39 <g000015> 今日も Successful Lisp / David B. Lamkins ぼっち読書会やります
10:38:27 <g000015> 今日は13章です
10:38:28 <g000015> (((Chapter 13 - Still More Things You Can Do with Sequences)))
10:39:11 <g000015> sequence関係の関数の紹介のようです
10:39:39 <g000015> ((((CONCATENATE: new sequences from old))))
10:39:50 <g000015> concatenateの説明です
10:40:42 <g000015> listの連結についていえば、appendとの違いは、concatenateは全部のリストをコピーする、というところでしょうか。まあ、appendで足りることがほとんどですが
10:40:57 <g000015> ((((ELT and SUBSEQ get what you want from any sequence (also, COPY-SEQ)))))
10:42:11 <g000015> eltはsequence全般に使える指定の位置の要素を取り出すもの、subseqはスライス、copy-seqはその名の通りコピーです
10:44:10 <g000015> なんで、copy-sequenceじゃないのかというところですが、先行するZetalispがcopy-seqだったので互換性でこうなったんでしょうか。他は、seqじゃなくて、sequenceです。make-sequenceとか。あsubseqもseqですね
10:44:55 <g000015> subseqはコピーしたsequenceを返すので (subseq a 0 nil)とすると、copy-seqと同じになる、みたいなことが指摘されています
10:45:02 <g000015> ((((REVERSE turns a sequence end-for-end (also, NREVERSE)))))
10:46:06 <g000015> reverse・nreverseの説明です
10:46:52 <g000015> listを回して、要素をpushしていき逆順になるので最後にnreverseで破壊的にひっくりかえすというイディオムが紹介されています
10:48:33 <g000015> ((((LENGTH: size counts after all))))
10:48:54 <g000015> lengthの紹介です。そのままな説明です
10:49:01 <g000015> ((((COUNT: when it's what's inside that matters))))
10:49:05 <g000015> countというのもあります
10:50:16 <g000015> count-ifや、オプションの説明がされています。オプションを駆使すると結構多機能です
10:51:55 <g000015> ((((REMOVE, SUBSTITUTE, and other sequence changers))))
10:55:23 <g000015> remove・substitute・remove-duplicatesの説明です
10:56:51 <g000015> remove-duplicatesは大抵意図した動作は使い:from-end Tなことが多いですが、そのことにも触れられています
10:57:14 <g000015> ((((DELETE, REMOVE-DUPLICATES, DELETE-DUPLICATES, and NSUBSTITUTE.))))
10:58:02 <g000015> 破壊系と非破壊系の一覧というところです
10:58:17 <g000015> ((((FILL and REPLACE))))
11:01:57 <g000015> fillとreplaceの説明です。これらは名前がn系でもdelete系でもない破壊系の関数ですね
11:02:54 <g000015> fillはある要素で埋めるのと、replaceは置き換え
11:05:46 <g000015> (setf (subseq u s e) v) としたい時があるんですが
11:10:20 <g000015> (replace u v :start1 s :end1 e)でも良いってところですね
11:11:02 <g000015> あれ、(setf subseq)って処理系依存だったか
11:13:01 <g000015> いや、HyperSpecにも載ってますね
11:13:02 <g000015> http://www.lispworks.com/documentation/HyperSpec/Body/f_subseq.htm
11:14:13 <g000015> subseqは基本的にコピーを返すので、setfとの組み合わせってことになると、若干矛盾してる気もするんですが、有用なのでこういう仕様になってるんでしょうね
11:14:21 <g000015> 実際のところは、replaceに展開されるみたいです
11:15:12 <g000015> ((((Locating things in sequences: POSITION, FIND, SEARCH, and MISMATCH))))
11:16:11 <g000015> 探索系の関数ですが、一通り説明があります
11:17:15 <g000015> ((((SORT and MERGE round out the sequence toolkit))))
11:20:10 <g000015> sort・stable-sort・mergeの説明です
11:20:29 <g000015> sortは破壊的というのが初心者のハマりどころの一つです
11:20:40 <g000015> stable-sortはその名のとおり安定ソート
11:20:56 <g000015> mergeについては、動作の注意点が述べられています
11:22:48 <g000015> というところで、13章は終わります。Common Lispを数年使ってる人でも、標準のsequence系の関数の動作を押えてない人は結構いるみたいです
11:23:11 <g000015> 丁寧に解説されていて、分かりやすいので、この章は復習にも良いですね
11:23:45 <g000015> 次回は、14章からです
11:24:22 [g000015'out] ; Quit: (quit)
15:00:59 [usaturn_'in]
15:02:31 [usaturn'out] ; Ping timeout: 252 seconds