filter

On Lispを読み始めました。

で、4章にでてくるfilterの訳について、ちょっと異議がある。

次の関数filterのsomeに対する性質は、remove-if-notのfind-ifに対する性質と似ている。組み込み関数remove-if-notの返り値は、find-ifに関数を渡してリストの一連のcdr部に適用したときの返り値全体と同じだ。それと似たように、filterの返り値は、ある関数がリストの一連のcdr部に対して返すものと同じだ:

ここで『一連の』というのは『successive』の訳なのだけれども、これは『後続の』とか『残りの』とかいう訳をあてるべきだと思う。

まず、some,remove-if-not,find-ifは組み込みの関数。すべて述語pとリストlstを受けとる。

some
lstに順にpを適用して、最初に非nilな値を返すと、それを返す。
remove-if-not
lst中のpを満さないものを削除する
find-if
lst中のpを満すものを返す

で、これを考慮にいれて、このパラグラフの意図を考えると、

  • find-ifは述語pを満すやつを見付けると、後続のリストは無視する
  • で、その無視された『後続のリスト』に対して関数を何度も適用すると、remove-if-notを適用したときと同じ値が得られる
  • 同じように、someも述語pを満すやつを見付けると、後続のリストは無視する
  • 後続のリストに対して何度も関数を適用していると、filterを適用したときと同じ値が得られる

という意味だと思う。

なので、ここでsuccessiveには『後続の』などという訳をあてるべきで、『一連の』という訳は間違っていると思うわけですよ。