我一直在嘗試在Prolog中編寫一個簡單的Web服務,並想知道如何處理可選參數。我認爲,與library(http/http_parameters)
它可能是那樣簡單:在Prolog中處理可選的HTTP參數
my_request_handler(Request) :-
http_parameters(Request, [ param_1(Param1, []), param_2(Param2, []) ]),
... ### handle both parameters
my_request_handler(Request) :-
http_parameters(Request, [ param_1(Param1, []) ]),
... ### handle only param_1
所以如果param_2
不提供引擎將回溯到第二條規則。但是在SWI-Prolog http_parameters
中,如果參數與規範不匹配,則會引發異常,因此代碼在第一條規則中斷,而不是嘗試評估第二條規則。
不幸的是,加入optional(true)
到param_2
規範使綁定,迫使我使用條件檢查這樣的:
my_request_handler(Request) :-
http_parameters(Request, [ param_1(Param1, []), param_2(Param2, [optional(true)]) ]),
(error:text(Param2) ->
... ### handle both parameters
;
... ### handle only param_1
).
這是做事情的最好方法還是我失去了一些東西?我想,該條件語句變得醜陋,如果超過一個參數是可選的...
乾杯,