14

Church encoding (別名 Visitor Pattern) は、データを関数として表現する方法です:

data T = C1 F1 F2 | C2 F3 F4

あなたが定義することができます

data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r)

. 何でも関数として表現できるのは素晴らしいことですが、最初のバージョンの方がすっきりしていて、言語拡張 (明示的) を必要としないため、常に好ましいと思っていましたforall。ただし、公共図書館で教会がエンコードしたデータを見つけることができます。それを使用する利点は何ですか?

公共図書館における教会のエンコーディングの例:

4

1 に答える 1

10

これは、複数の継続を伴う継続渡しスタイルに対応し、パフォーマンスのために行われます。データの明示的な構築と破棄が回避され、代わりにパターン マッチの出力に基づいて直接制御が渡され、代わりにすぐに行われます。これにより常にパフォーマンスが向上するとは限りませんが、改善された場合はかなり重要になります。

基本的に、データ対コントロールと考えることができます。パーサーの成功分岐と失敗分岐など、本質的にコントロールに似た処理を行っている場合は、コントロール ベースの表現の方が優れている可能性があります。それ以外の場合は、データに固執します。

于 2012-03-21T14:36:12.620 に答える