String interpolation (GNAT Reference Manual)

#### 18.2.6 String interpolation ¶

The syntax for string literals is extended to support string interpolation. An interpolated string literal starts with `f`, immediately before the first double-quote character.

Within an interpolated string literal, an arbitrary expression, when enclosed in `{ ... }`, is expanded at run time into the result of calling `'Image` on the result of evaluating the expression enclosed by the brace characters, unless it is already a string or a single character.

Here is an example of this feature where the expressions `Name` and `X + Y` will be evaluated and included in the string.

    procedure Test_Interpolation is
       X    : Integer := 12;
       Y    : Integer := 15;
       Name : String := "Leo";
    begin
       Put_Line (f"The name is {Name} and the sum is {X + Y}.");
    end Test_Interpolation;

This will print:

    The name is Leo and the sum is 27.

In addition, an escape character (`\`) is provided for inserting certain standard control characters (such as `\t` for tabulation or `\n` for newline) or to escape characters with special significance to the interpolated string syntax, namely `"`, `{`, `}`,and `\` itself.

escaped_character | meaning
`\a` | ALERT
`\b` | BACKSPACE
`\f` | FORM FEED
`\n` | LINE FEED
`\r` | CARRIAGE RETURN
`\t` | CHARACTER TABULATION
`\v` | LINE TABULATION
`\0` | NUL
`\\` | `\`
`\"` | `"`
`\{` | `{`
`\}` | `}`

Note that, unlike normal string literals, doubled double-quote characters have no special significance. So to include a double-quote or a brace character in an interpolated string, they must be preceded by a `\`. Multiple interpolated strings are concatenated. For example:

    Put_Line
      (f"X = {X} and Y = {Y} and X+Y = {X+Y};\n" &
       f" a double quote is \" and" &
       f" an open brace is \{");

This will print:

    X = 12 and Y = 15 and X+Y = 27
    a double quote is " and an open brace is {