#:g1: C++ STLにCommon Lispの影響はあるのかを探る旅(2)

Posted 2015-04-18 06:54:53 GMT

前回は、C++ STLにCommon Lispの影響はあるのかをSTLの歴史を遡って先祖にあたるAdaのリストライブラリを眺めてみました
今回は、C++ STLそのものについてですが、とりあえずC++ STLの作者によるレポートがあるので眺めてみます。

この中で、

accumulate is similar to the APL reduction operator and Common Lisp reduce function

という風にCommon Lispに触れてはいますが、影響を受けたようなことは特に記載されていません。

他にも何かないかなと探してみましたが、プレゼン資料でDylanやLispの良いとこ取りをしよう、的なことが書いてあるので、まあ影響があるといえばあるのかもしれません。

Dylanの名前が挙がっているのは若干意外ではありますが、DylanもCommon Lispの影響が非常に強く、シークエンス系に関しては、殆どそのままというか進化形みたいな所ではあります。

いまいちぱっとしませんが、とりあえず前回と同じく表にして眺めてみます。

C++ STL CLそのまま CLとは別名
accumulate REDUCE
adjacent_find
adjacent_difference
binary_search
copy COPY-SEQ
copy_backward
count COUNT
count_if COUNT-IF
equal EQUAL
equal_range
fill FILL
fill_n FILL :START :END
find FIND
find_end FIND :FROM-END T
find_first_of POSITION
find_if FIND-IF
for_each MAPC
genarate_n
generate MAP-INTO
includes SUBSETP ※リストのみ
inner_product
inplace_merge
iter_swap
lexicographical_compare
lower_bound
make_heap
max MAX ※REDUCEと組み合わせ
max_element
merge MERGE
min MIN
min_element
mismatch MISMATCH
next_permutation
nth_element ELT NTH
partial_sum
partial_sort
partial_sort_copy
partition
pop_heap
prev_permutation
push_heap
random_shuffle
remove REMOVE ※ DELETE
remove_copy REMOVE
remove_copy_if REMOVE-IF
remove_if REMOVE-IF ※ DELETE-IF
replace REPLACE
replace_copy
replace_copy_if
replace_if
reverse REVERSE ※ NREVERSE
reverse_copy REVERSE
rotate ROTATEF
rotate_copy
search SEARCH
search_n SEARCH :START1 :END1
set_difference SET-DIFFERENCE ※リストのみ
set_intersection INTERSECTION ※リストのみ
set_symmetric_difference
set_union UNION ※リストのみ
sort SORT
sort_heap
stable_sort stable-sort
stable_partition
swap ROTATEF
swap_ranges ROTATEF+SUBSEQ
transform MAP-INTO
unique DELETE-DUPLICATES
unique_copy REMOVE-DUPLICATES
upper_bound

Adaのリストライブラリ程、そのまんまではないですが、まあまあ機能と名前は被っている風に見えます。
全般的な所ですが、Adaと同じく、C++ STLも破壊的操作が基本のようで、元を変更しない場合には、_COPY 版が用意されているようです。
Common Lispはシークエンス全般ではなくリストに特化した関数の方が充実しているのが、LISPらしいというか古めかしい所。
シークエンス用関数に関しては、範囲指定が取り込まれているのでC++ STLより汎用的な面もあるようです。

まとめ

Stepanov氏の文献にはSchemeという名前は出てくるのですが、Common Lispの名前はあまり出て来ないのが残念です。
まあ、Lispの良いとこ取りをしよう、とプレゼンでも書いていますし、関数の名前と機能もかなり被っていますし、影響はありますいうことで良いのではないでしょうか。
この件について何か良い資料をご存知でしたら是非とも教えて下さい!


HTML generated by 3bmd in SBCL 1.2.10

comments powered by Disqus