Để đặt hàm của bạn func
nội dòng giống như toán tử +
(cùng với nhiều người khác), bạn sẽ cần phải xác định thứ tự ưu tiên cho func
và đối số của nó. Bạn có thể đạt được điều này trong SWI-PROLOG với op/3
.
Ví dụ, chỉ thị (trước mã nơi func/2
được sử dụng):
:- op(500,yfx,func).
Thực hiện func/2
, bạn có thể viết một meta-phiên dịch cho ngôn ngữ của bạn (ví dụ, bạn viết một chương trình PROLOG mà phân tích cú pháp biểu ngữ bao gồm func
và giải thích chúng như bạn muốn), hoặc nếu func/2
là đúng số học, bạn có thể sử dụng arithmetic_function/1 cũng như một chỉ thị như sau:
:- arithmetic_function(func/2).
nghiệm này với các định nghĩa sau đây cho func/2
:
func(X, Y, Z) :-
Z is X + Y.
Cung cấp, với ví dụ của bạn:
?- A is (2 func 3) func (4 func (2+1)).
A = 12.
Bây giờ trong hướng dẫn của SWI Prolog, chỉ thị này không được chấp nhận, làm cách nào để có giải pháp được cập nhật? Tx –
Không chắc chắn lý do tại sao nó không được chấp nhận, tốt nhất để yêu cầu [Jan Wielemaker] (https://github.com/JanWielemaker) nếu bạn thực sự cần phải biết. Sự hiểu biết của tôi là nó vẫn hoạt động, mặc dù nó đã không được chấp nhận ... tôi có sai không? – sharky