我正在尋找像Prolog中具有返回值的內置算術運算符(特別是在SWI-Prolog中)。例如。如果您運行A is (1+2) + (3+2).
,則返回A = 8.
。自定義Prolog算術函數
如何定義func
運算符來做類似+
運算符的運算符?
例如A is (2 func 3) func (4 func (2+1)).
。
我正在尋找像Prolog中具有返回值的內置算術運算符(特別是在SWI-Prolog中)。例如。如果您運行A is (1+2) + (3+2).
,則返回A = 8.
。自定義Prolog算術函數
如何定義func
運算符來做類似+
運算符的運算符?
例如A is (2 func 3) func (4 func (2+1)).
。
爲了像+
運算符(以及其他許多運算符)一樣內聯函數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.
這是手冊中,arithmetic_function/1
將提高你的關係到一些東西,is
可以理解,看到
http://www.swi-prolog.org/pldoc/doc_forobject=section(2,'4.26',swi('/doc/Manual/extendarith.html'))
既然在SWI Prolog的手冊中它說這個指令已被棄用,那麼如何更新解決方案呢? Tx – 2016-05-06 13:05:30
不確定爲什麼它被棄用,如果你真的需要知道,最好問問[Jan Wielemaker](https://github.com/JanWielemaker)。我的理解是它仍然有效,儘管它已被廢棄......我錯了嗎? – sharky 2016-05-07 05:50:42