Did you know ... Search Documentation:
Pack dcgutils -- prolog/snobol.pl
PublicShow source

NB. FAIL is just {fail} or dcg_core:fail SUCCEED is {repeat} or dcg_core:repeat. FENCE is ! (cut).

Sequence capture in SNOBOL ($) is also $ here: use Phrase $ List to capture the sequence matched by Phrase in the List.

ABORT cannot be implemented in plain Prolog because there is no ancestral cut operator. Instead abort//0 just throws an exception which you must arrange to catch yourself.

POS, RPOS, TAB and RTAB are not context-free rules and can only be implemented in paired-state DCG which counts the current position in the string.

 rem// is det
 any(+L:list(_))// is nondet
Matches any element of L.
 notany(+L:list(_))// is nondet
Matches anything not in L.
 arb// is nondet
Matches an arbitrary sequence. Proceeds cautiously.
 arbno(+P:phrase)// is nondet
Matches an arbitrary number of P. Proceeds cautiously. Any variables in P are shared across calls.
 span(+L:list(_))// is nondet
Matches the longest possible sequence of symbols from L.
 break(+L:list(_))// is nondet
Matches the longest possible sequence of symbols not in L.
 len(+N:natural)// is det
len(-N:natural)// is nondet
Matches any N symbols.
 bal(+Delims:list(C))// is nondet
Matches any expression with balanced generalised parentheses. The opening and closing parenthesis must be supplied as a list of terminals [Open,Close].

Undocumented predicates

The following predicates are exported, but not or incorrectly documented.

 $(Arg1, Arg2, Arg3, Arg4)