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.
library(http/html_write)). Examples of languages that may 
be embedded for processing in Prolog are SPARQL, RuleML or regular 
expressions.
The file library(http/html_quasiquotations) provides 
the, suprisingly simple, quasi quotation parser for HTML.
utf8 encoding.
| Goal | is executed as once(Goal). Goal 
must succeed. Failure or exceptions from Goal are interpreted 
as syntax errors. | 
syntax_error(Error) using the current location in 
the quasi quoted input parser.