parse_ruleml(AssertItem, QueryItem, XML) :-
( ( var(AssertItem) ; var(QueryItem) ), var(XML) ->
throw(error(instantiation_error, parse_ruleml/2))
- ; phrase(ruleml_top_level_items(AssertItem, QueryItem), XML)
+ ; phrase(ruleml_top_level_items(AssertItem, QueryItem), XML),
+ !
).
ruleml_top_level_items(AssertItem, QueryItems) -->
( ruleml_assert(AssertItem),
- ruleml_query_items(QueryItems),
- !
+ ruleml_query_items(QueryItems)
; { AssertItem = [] },
ruleml_query_items(QueryItems)
).
( { var(Items) } ->
list_ws("<Assert mapClosure=\"universal\">"),
ruleml_assert_items(Items),
- !,
list_ws("</Assert>")
; "<Assert mapClosure=\"universal\">",
{ Items \== [] },
ruleml_assert_items(Items),
- !,
"</Assert>"
).
ruleml_assert_items([Item | Items]) -->
ruleml_assert_item(Item),
- !,
ruleml_assert_items(Items).
ruleml_assert_items([]) --> [].
ruleml_query_items(Items) -->
( { var(Items) } ->
ruleml_query_item(Item),
- !,
( { var(Item) } ->
ruleml_query_items(Items)
; { Items = [Item | Items0] },
)
; { Items = [Item | Items0] },
ruleml_query_item(Item),
- !,
ruleml_query_items(Items0)
).
ruleml_query_items([]) --> [].
decimal_point('.') --> ".".
-sign('-') --> "-", !.
+sign('-') --> "-".
sign('+') --> "+".
double_quote('"') --> "\"".
ruleml_item_conjunction([Item | Items]) -->
ruleml_condition(Item),
- !,
ruleml_item_conjunction(Items).
ruleml_item_conjunction([]) --> [].
ruleml_item_disjunction([Item | Items]) -->
ruleml_condition(Item),
- !,
ruleml_item_disjunction(Items).
ruleml_item_disjunction([]) --> [].
ruleml_atoms([Item|Items]) -->
ruleml_atom(Item),
- !,
ruleml_atoms(Items).
ruleml_atoms([]) --> [].
*/
ruleml_data_contents(number, Cs) -->
- ruleml_number(Cs), !.
+ ruleml_number(Cs).
ruleml_data_contents(symbol, Cs) -->
- ruleml_symbol(Cs), !.
+ ruleml_symbol(Cs).
ruleml_data_contents(string, Cs) -->
ruleml_string(Cs).
* complicated by Scryer's current lack of multi-argument indexing.
*/
-fold_list([Item], _, Item) :-
- !.
+fold_list([Item], _, Item).
fold_list([Item|Items], F, Form) :-
Form =.. [F, Item, Fs],
fold_list(Items, F, Fs).