4

指数関数的に大きいまたは無限の空間を検索するプログラムを作成しているとします。ゲームプレイ、定理証明、最適化など、空間全体を検索できないものであり、結果の品質は、検索する部分の選択に大きく依存します。利用可能なリソース内。

熱心な言語では、これは概念的に単純です。言語では評価の順序を指定でき、それを使用して、検索スペースのどの部分を最初に評価するかを制御できます。(実際には、推論制御のコードレイアウトが問題の定義と混ざり合うため、面倒で複雑になる傾向があります。これが、代わりに怠惰な言語でこれを行う方法に興味がある理由の1つです。概念的に簡単です。)

Haskellのような怠惰な言語では、そのようにすることはできません。代わりに、2つの方法を考えることができます。

  1. 使用しているコンパイラの現在のバージョンによってたまたま選択された評価の正確な順序に依存するコードを、使用している最適化フラグを使用して記述します。これにより、処理が正しい順序で行われるようになります。これは、保守性の問題につながる可能性があります。

  2. コードを記述するコードを記述します。具体的には、問題の定義を一連のヒューリスティックとともに、実行する必要のある正確な順序を指定する熱心な言語の一連の命令に変換するコードを記述します。前払い費用を支払う気があるなら、これにはメリットがあるようです。

この種のことを行うための他の推奨される方法はありますか?

4

2 に答える 2

5

怠惰な言語でこれを行う一般的な方法は、検索スペースを(おそらく無限の)データ構造として定義し、この構造を個別にトラバースするために使用する戦略を作成することです。このようにして、使用する戦略を管理できますが、問題の定義とは別になります。

于 2011-07-09T16:33:01.510 に答える
1

Haskellコードの一部を厳密な評価に基づいて作成することができます

http://www.haskell.org/haskellwiki/Performance/Strictness

于 2011-07-09T16:28:03.340 に答える