Inspired by Haskell, SWI-Prolog support quasi quotation. Quasi quotation allows for embedding (long) strings using the syntax of an external language (e.g., HTML, SQL) in Prolog text and syntax-aware embedding of Prolog variables in this syntax. At the same time, quasi quotation provides an alternative to represent long strings and atoms in Prolog.
The basic form of a quasi quotation is defined below. Here, Syntax is
an arbitrary Prolog term that must parse into a callable (atom or
compound) term and Quotation is an arbitrary sequence of characters, not
including the sequence |}
. If this sequence needs to be embedded, it
must be escaped according to the rules of the target language or the
`quoter' must provide an escaping mechanism.
{|Syntax||Quotation|}
While reading a Prolog term, and if the Prolog flag quasi_quotes
is
set to true
(which is the case if this library is loaded), the parser
collects quasi quotations. After reading the final full stop, the parser
makes the call below. Here, SyntaxName is the functor name of Syntax
above and SyntaxArgs is a list holding the arguments, i.e., Syntax
=.. [SyntaxName|SyntaxArgs]
. Splitting the syntax into its name and
arguments is done to make the quasi quotation parser a predicate with a
consistent arity 4, regardless of the number of additional arguments.
call(+SyntaxName, +Content, +SyntaxArgs, +VariableNames, -Result)
The arguments are defined as
..., {|html(Name, Address)|| <tr><td>Name<td>Address</tr> |}
variable_names
. It is a list of terms Name = Var
.The file library(http/html_quasiquotations) provides the, suprisingly simple, quasi quotation parser for HTML.
utf8
encoding.syntax_error(Error)
using the current location in the
quasi quoted input parser.