この親子階層があるとしましょう:
(derive ::integer ::decimal)
(derive ::positive-integer ::integer)
(derive ::long ::integer)
そのような階層で最も低い共通の祖先を見つける方法を実装するClojureのイディオムは何ですか? すなわち:
(lca ::positive-integer ::long) ; => ::integer
私の最初の考えには、各引数の組み合わせをトラバースする再帰関数の使用が含まれますparents
が、おそらくもっと良いアプローチがあると思います。
私の動機は、2 つの引数を取り、引数の型に基づいて最適な実装にディスパッチする multimethod のディスパッチ関数としてこれを使用することです。