[英]Memoizing goals in Prolog
Prolog是否有可能記住計算目標?
我的意思是說Prolog不應該重新計算之前計算過的目標。
因此,例如,對我來說相同的計算是:
goal([first, one], he, she, var(cat, 5)).
goal([first, one], he, she, var(cat, 5)).
但不是
goal([first, one], he, she, var(cat, 6)).
所以,事實上,必須有可能統一這些目標。
許多Prolog系統提供隱式記錄此類結果的能力。 這稱為表格 ; 請參閱Prolog系統有關如何啟用它的文檔。
關於Prolog的一個好處是,你可以輕松地構建一個更簡單(並且功能更強大)的自我制表變體,使用examlpe assertz/1
來存儲和加載計算結果。
一個非常簡單的實現可能看起來類似於:
:- dynamic memo_/1. memo(Goal) :- ( memo_(Goal) -> true ; Goal, assertz(memo_(Goal)) ).
買者自負...
那當然不是那些成熟的表格會給你的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.