2023-10-16 22:31:10 +00:00
|
|
|
|
For a value <span class="postcard-grammar binarysyntax">*V*</span>, we write <span
|
|
|
|
|
class="postcard-grammar binarysyntax">«*V*»</span> for the binary encoding of <span
|
|
|
|
|
class="postcard-grammar binarysyntax">*V*</span>.
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
«`#f`» | = | `80`
|
|
|
|
|
«`#t`» | = | `81`
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
«`@`*W* *V*» | = | `85` «*W*» «*V*»
|
|
|
|
|
«`#!`*V*» | = | `86` «*V*»
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
«*V*» | = | `87``08` **binary64**(*V*) | if *V* ∈ Double
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
«*V*» | = | `B0` **varint**(|**intbytes**(*V*)|) **intbytes**(*V*) | if *V* ∈ SignedInteger
|
|
|
|
|
«*V*» | = | `B1` **varint**(|**utf8**(*V*)|) **utf8**(*V*) | if *V* ∈ String
|
|
|
|
|
«*V*» | = | `B2` **varint**(|*V*|) *V* | if *V* ∈ ByteString
|
|
|
|
|
«*V*» | = | `B3` **varint**(|**utf8**(*V*)|) **utf8**(*V*) | if *V* ∈ Symbol
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
«`<`*L* *F*<sub>1</sub> ... *F*<sub>m</sub>`>`» | = | `B4` «*L*» «*F*<sub>1</sub>» ... «*F*<sub>m</sub>» `84`
|
|
|
|
|
«`[`*X*<sub>1</sub> ... *X*<sub>m</sub>`]`» | = | `B5` «*X*<sub>1</sub>» ... «*X*<sub>m</sub>» `84`
|
|
|
|
|
«`#{`*E*<sub>1</sub> ... *E*<sub>m</sub>`}`» | = | `B6` «*E*<sub>1</sub>» ... «*E*<sub>m</sub>» `84`
|
|
|
|
|
«`{`*K*<sub>1</sub>`:`*V*<sub>1</sub> ... *K*<sub>m</sub>`:`*V*<sub>m</sub>`}`» | = | `B7` «*K*<sub>1</sub>» «*V*<sub>1</sub>» ... «*K*<sub>m</sub>» «*V*<sub>m</sub>» `84`
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
**varint**(*n*) | = | <span class="outputish">*n*</span> | if *n* < 128
|
|
|
|
|
| | <span class="outputish">(*n* & 127) | 128</span> **varint**(*n* >> 7) | if *n* ≥ 128
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
2023-10-16 23:34:21 +00:00
|
|
|
|
**intbytes**(*n*) | = | <span class="roman">the empty sequence if</span> *n* = 0<span class="roman">, otherwise</span> **signedBigEndian**(*n*)
|
|
|
|
|
|
|
|
|
|
{:.postcard-grammar.binarysyntax}
|
|
|
|
|
**signedBigEndian**(*n*) | = | <span class="outputish">*n* & 255</span> | if −128 ≤ *n* ≤ 127
|
2023-10-16 22:31:10 +00:00
|
|
|
|
| | **signedBigEndian**(*n* >> 8) <span class="outputish">*n* & 255</span> | otherwise
|
|
|
|
|
|
2024-01-27 10:34:51 +00:00
|
|
|
|
The function <span class="postcard-grammar binarysyntax">**binary64**(*D*)</span> yields the
|
|
|
|
|
big-endian 8-byte IEEE 754 binary representation of <span class="postcard-grammar
|
|
|
|
|
binarysyntax">*D*</span>.
|
2023-10-16 22:31:10 +00:00
|
|
|
|
|
|
|
|
|
<!--
|
|
|
|
|
Together, <span class="postcard-grammar binarysyntax">**div**</span> and <span
|
|
|
|
|
class="postcard-grammar binarysyntax">**mod**</span> give [Euclidean
|
|
|
|
|
division](https://en.wikipedia.org/wiki/Euclidean_division); that is, if
|
|
|
|
|
<span class="postcard-grammar binarysyntax">*n* **div** *d* = *q*</span> and
|
|
|
|
|
<span class="postcard-grammar binarysyntax">*n* **mod** *d* = *r*</span>, then
|
|
|
|
|
<span class="postcard-grammar binarysyntax">*n* = *dq* + *r*</span> and
|
|
|
|
|
<span class="postcard-grammar binarysyntax">0 ≤ *r* < |d|</span>.
|
|
|
|
|
-->
|