2013-05-19 52 views
2

在SWI Prolog中做一些非常基本的事情時遇到了一些困難。對於初學者來說,我如何擁有一個將符號綁定到值的函數?這是我試過了,我不知道這是否是正確的:在Prolog中綁定符號和查詢符號值

bind(Name) :- assert(Name = 'A'). 

現在,如果我在一個解釋器中運行bind(Test).我想符號Test綁定到值'A'。這是做到這一點的方式嗎?如果是,那麼我該如何查詢符號的值?

回答

0

你是否在問Prolog中的統一這樣一個非常基本的東西?

如果你有一個謂語

bind('A'). 

定義,那麼在任何謂詞,以後打電話

.... , %// #1 
bind(X), %// #2 
.... 

X將舉行'A'如下點#2的值,直到回溯發生時(如任何)回到點#2之上。

但是沒有必要單獨使用bind謂詞。統一的所指與=/2 built-in operator,如果你嘗試這種在SWI Prolog的控制檯同樣的效果與

實現,

1 ?- X = 'A'. 
X = 'A'. 

以後可以訪問它

2 ?- Z = $X. 
Z = 'A'. 

但如果你想要更有形的東西,你應該在你選擇的某個函數名稱下將它聲明到數據庫中,正如你在CapelliC的答案中所建議的那樣。

0

Prolog有一個關係數據模型。每個謂詞都可以看作關係數據庫的表格。

:- dynamic symbol_value/2. 

存儲綁定:

bind(Name, Value) :- assert(symbol_value(Name, Value)). 

查詢值:那麼你的協會可以用二元謂詞來模擬

?- symbol_value(S, V). 

加盟僅僅是連詞:

% two different symbols with same value ? 
?- symbol_value(S1, V), symbol_value(S2, V), S1 \= S2. 

功能離子在Prolog中並不存在。與關係模型相一致,應該被視爲可能的無限關係。出於實際目的,這些用於算術評估。 A 內建命名爲/ 2引入算術評估,一種子語言,我們有功能像+,罪等...