2010-11-14 98 views
5

我正在尋找像Prolog中具有返回值的內置算術運算符(特別是在SWI-Prolog中)。例如。如果您運行A is (1+2) + (3+2).,則返回A = 8.自定義Prolog算術函數

如何定義func運算符來做類似+運算符的運算符?
例如A is (2 func 3) func (4 func (2+1)).

回答

6

爲了像+運算符(以及其他許多運算符)一樣內聯函數func,您需要爲func及其參數定義優先順序。您可以通過op/3在SWI-PROLOG中實現此目的。

例如,指令(前面的代碼在使用func/2):

:- op(500,yfx,func). 

要實現func/2,你可以寫一元解釋爲你的語言(例如,你寫了一個Prolog程序,它解析長期表達式,包括func並解釋他們爲你願意的話),或者如果func/2是嚴格運算,可以使用arithmetic_function/1也作爲指令,如下:

:- arithmetic_function(func/2). 

測試這種具有以下定義爲func/2

func(X, Y, Z) :- 
    Z is X + Y. 

給出,用你的例子:

?- A is (2 func 3) func (4 func (2+1)). 
A = 12. 
+0

既然在SWI Prolog的手冊中它說這個指令已被棄用,那麼如何更新解決方案呢? Tx – 2016-05-06 13:05:30

+0

不確定爲什麼它被棄用,如果你真的需要知道,最好問問[Jan Wielemaker](https://github.com/JanWielemaker)。我的理解是它仍然有效,儘管它已被廢棄......我錯了嗎? – sharky 2016-05-07 05:50:42

2

這是手冊中,arithmetic_function/1將提高你的關係到一些東西,is可以理解,看到

http://www.swi-prolog.org/pldoc/doc_forobject=section(2,'4.26',swi('/doc/Manual/extendarith.html'))