Я пытался написать простой веб-сервис в Prolog и задавался вопросом, как я могу обрабатывать необязательные параметры. Я думал, что с library(http/http_parameters)
это может быть столь же простым, как:Обработка дополнительных параметров HTTP в Prolog
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
).
Это лучший способ делать вещи, или я что-то не хватает? Я думаю, что условными становятся гораздо уродливее, если более чем один параметр не является обязательным ...
Приветствия,