在SWI Prolog中做一些非常基本的事情時遇到了一些困難。對於初學者來說,我如何擁有一個將符號綁定到值的函數?這是我試過了,我不知道這是否是正確的:在Prolog中綁定符號和查詢符號值
bind(Name) :- assert(Name = 'A').
現在,如果我在一個解釋器中運行bind(Test).
我想符號Test
綁定到值'A'
。這是做到這一點的方式嗎?如果是,那麼我該如何查詢符號的值?
在SWI Prolog中做一些非常基本的事情時遇到了一些困難。對於初學者來說,我如何擁有一個將符號綁定到值的函數?這是我試過了,我不知道這是否是正確的:在Prolog中綁定符號和查詢符號值
bind(Name) :- assert(Name = 'A').
現在,如果我在一個解釋器中運行bind(Test).
我想符號Test
綁定到值'A'
。這是做到這一點的方式嗎?如果是,那麼我該如何查詢符號的值?
你是否在問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的答案中所建議的那樣。
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引入算術評估,一種子語言,我們有功能像+,罪等...