我知道Prolog(邏輯程序設計)完全是關於返回true和false,而且函數是返回列表,數字,布爾值的任何東西。最初,它似乎並不認爲Prolog有函數的概念,而是依賴於統一的,但你可以做的東西,如:在Prolog中定義(數學)函數
?- X is log(42).
X = 3.7376696182833684.
如此看來,存在的功能呢?或者這真的只是某種隱藏統一部分的語法糖?
如果它真的只是語法糖,那麼如果我想要定義像log2這樣的數學「函數」,我該怎麼辦?
我當然可以使用統一的:
log2(X,Result) :- Result is log(X)/log(2).
但是說,我想用「語法糖函數風格」這樣我就可以寫:
?- X is log2(8).
X = 3.0.
我怎樣才能做到這一點在序言?
組合使用新定義的log 2時,有一個過時指令'arithmetic_function',將你想要做什麼,其解決問題。假設你的'的log 2/2'謂詞存在,指令': - arithmetic_function(LOG 2/1).'會讓你的第二個樣品的工作。我不確定它爲什麼被棄用,但似乎仍然在6.2.6中工作。 –
我也想知道這個貶義,有一點要問Jan W.。 Dennis M.喜歡和Amzi一起參與的方法! Prolog將定義「is」的替代方案(例如,帶中綴語法的'iz/2'),並構造評估任何附加功能所需的規則。 – hardmath