2024-05-07 07:22:32 +02:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< meta name = "generator" content = "Asciidoctor 2.0.20" >
< meta name = "author" content = "Celestino Amoroso" >
< title > Expr< / title >
< link rel = "stylesheet" href = "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700" >
< style >
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
< / style >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" >
< style >
pre.rouge table td { padding: 5px; }
pre.rouge table pre { margin: 0; }
pre.rouge, pre.rouge .w {
color: #fbf1c7;
background-color: #282828;
}
pre.rouge .err {
color: #fb4934;
background-color: #282828;
font-weight: bold;
}
pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cm, pre.rouge .cpf, pre.rouge .c1, pre.rouge .cs {
color: #928374;
font-style: italic;
}
pre.rouge .cp {
color: #8ec07c;
}
pre.rouge .nt {
color: #fb4934;
}
pre.rouge .o, pre.rouge .ow {
color: #fbf1c7;
}
pre.rouge .p, pre.rouge .pi {
color: #fbf1c7;
}
pre.rouge .gi {
color: #b8bb26;
background-color: #282828;
}
pre.rouge .gd {
color: #fb4934;
background-color: #282828;
}
pre.rouge .gh {
color: #b8bb26;
font-weight: bold;
}
pre.rouge .k, pre.rouge .kn, pre.rouge .kp, pre.rouge .kr, pre.rouge .kv {
color: #fb4934;
}
pre.rouge .kc {
color: #d3869b;
}
pre.rouge .kt {
color: #fabd2f;
}
pre.rouge .kd {
color: #fe8019;
}
pre.rouge .s, pre.rouge .sb, pre.rouge .sc, pre.rouge .dl, pre.rouge .sd, pre.rouge .s2, pre.rouge .sh, pre.rouge .sx, pre.rouge .s1 {
color: #b8bb26;
font-style: italic;
}
pre.rouge .si {
color: #b8bb26;
font-style: italic;
}
pre.rouge .sr {
color: #b8bb26;
font-style: italic;
}
pre.rouge .sa {
color: #fb4934;
}
pre.rouge .se {
color: #fe8019;
}
pre.rouge .nn {
color: #8ec07c;
}
pre.rouge .nc {
color: #8ec07c;
}
pre.rouge .no {
color: #d3869b;
}
pre.rouge .na {
color: #b8bb26;
}
pre.rouge .m, pre.rouge .mb, pre.rouge .mf, pre.rouge .mh, pre.rouge .mi, pre.rouge .il, pre.rouge .mo, pre.rouge .mx {
color: #d3869b;
}
pre.rouge .ss {
color: #83a598;
}
< / style >
< / head >
< body class = "article toc2 toc-right" >
< div id = "header" >
< h1 > Expr< / h1 >
< div class = "details" >
< span id = "author" class = "author" > Celestino Amoroso< / span > < br >
< / div >
< div id = "toc" class = "toc2" >
< div id = "toctitle" > Table of Contents< / div >
< ul class = "sectlevel1" >
< li > < a href = "#_expr" > 1. Expr< / a >
< ul class = "sectlevel2" >
< li > < a href = "#_dev_expr_test_tool" > 1.1. < code > dev-expr< / code > test tool< / a > < / li >
< li > < a href = "#_concepts_and_terminology" > 1.2. Concepts and terminology< / a > < / li >
< / ul >
< / li >
< li > < a href = "#_data_types" > 2. Data types< / a >
< ul class = "sectlevel2" >
< li > < a href = "#_numbers" > 2.1. Numbers< / a > < / li >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_fractions" > 2.2. Fractions< / a > < / li >
< li > < a href = "#_strings" > 2.3. Strings< / a > < / li >
< li > < a href = "#_boolean" > 2.4. Boolean< / a > < / li >
< li > < a href = "#_list" > 2.5. List< / a > < / li >
2024-05-07 07:22:32 +02:00
< / ul >
< / li >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_dictionaries" > 3. Dictionaries< / a > < / li >
< li > < a href = "#_variables" > 4. Variables< / a > < / li >
< li > < a href = "#_other_operations" > 5. Other operations< / a >
2024-05-07 07:22:32 +02:00
< ul class = "sectlevel2" >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_operator" > 5.1. < code class = "blue" > ;< / code > operator< / a > < / li >
< li > < a href = "#_but_operator" > 5.2. < code class = "blue" > but< / code > operator< / a > < / li >
< li > < a href = "#_assignment_operator" > 5.3. Assignment operator < code class = "blue" > =< / code > < / a > < / li >
< li > < a href = "#_selector_operator" > 5.4. Selector operator < code class = "blue" > ? : ::< / code > < / a > < / li >
2024-05-07 07:22:32 +02:00
< / ul >
< / li >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_priorities_of_operators" > 6. Priorities of operators< / a > < / li >
< li > < a href = "#_functions" > 7. Functions< / a >
2024-05-07 07:22:32 +02:00
< ul class = "sectlevel2" >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_function_calls" > 7.1. Function calls< / a > < / li >
< li > < a href = "#_function_definitions" > 7.2. Function definitions< / a > < / li >
2024-05-07 07:22:32 +02:00
< / ul >
< / li >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_builtins" > 8. Builtins< / a >
2024-05-07 07:22:32 +02:00
< ul class = "sectlevel2" >
2024-05-09 07:20:22 +02:00
< li > < a href = "#_builtin_functions" > 8.1. Builtin functions< / a > < / li >
< li > < a href = "#_import" > 8.2. < em class = "blue" > import()< / em > < / a > < / li >
2024-05-07 07:22:32 +02:00
< / ul >
< / li >
< / ul >
< / div >
< / div >
< div id = "content" >
< div id = "preamble" >
< div class = "sectionbody" >
<!-- toc disabled -->
< div class = "paragraph" >
2024-05-09 07:20:22 +02:00
< p > < mark > TODO: Work in progress (last update on 2024/05/09, 07:17 am)< / mark > < / p >
2024-05-07 07:22:32 +02:00
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_expr" > < a class = "anchor" href = "#_expr" > < / a > < a class = "link" href = "#_expr" > 1. Expr< / a > < / h2 >
< div class = "sectionbody" >
< div class = "paragraph" >
< p > < em > Expr< / em > is a GO package capable of analysing, interpreting and calculating expressions.< / p >
< / div >
< div class = "sect2" >
< h3 id = "_dev_expr_test_tool" > < a class = "anchor" href = "#_dev_expr_test_tool" > < / a > < a class = "link" href = "#_dev_expr_test_tool" > 1.1. < code > dev-expr< / code > test tool< / a > < / h3 >
< div class = "paragraph" >
< p > < code > dev-expr< / code > is a simple program that can be used to evaluate expressions interactively. As its name suggests, it was created for testing purpose. In fact, beyond in additon to the automatic test suite based on the Go test framework, < code > dev-expr< / code > provides an important aid for quickly testing of new features during their development.< / p >
< / div >
< div class = "paragraph" >
< p > It cat work as a REPL, *R*ead-*E*xecute-*P*rint-*L*oop, or it can process expression acquired from files or standard input.< / p >
< / div >
< div class = "paragraph" >
< p > The program in located in the < em > tools< / em > directory.
Here are some examples of execution.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > Run < code > dev-expr< / code > in REPL mode and ask for help< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "shell" > < span class = "c" > # Assume the expr source directory. Type 'exit' or Ctrl+D to quit the program.< / span >
2024-05-08 07:51:01 +02:00
< span class = "o" > [< / span > user]< span class = "nv" > $ < / span > tools/expr < span class = "nt" > --< / span > Expressions calculator v1.7.0,2024/05/08 < span class = "o" > (< / span > celestino.amoroso@portale-stac.it< span class = "o" > )< / span >
2024-05-07 07:22:32 +02:00
Type < span class = "nb" > help < / span > to get the list of command.
See also https://git.portale-stac.it/go-pkg/expr/src/branch/main/README.adoc
< span class = "o" > > > > < / span > < span class = "nb" > help< / span >
< span class = "nt" > ---< / span > REPL commands:
2024-05-08 07:51:01 +02:00
base < span class = "nt" > --< / span > Set the integer output base: 2, 8, 10, or 16
< span class = "nb" > exit< / span > < span class = "nt" > --< / span > Exit the program
2024-05-07 07:22:32 +02:00
< span class = "nb" > help< / span > < span class = "nt" > --< / span > Show < span class = "nb" > command < / span > list
ml < span class = "nt" > --< / span > Enable/Disable multi-line output
mods < span class = "nt" > --< / span > List < span class = "nb" > builtin < / span > modules
2024-05-08 07:51:01 +02:00
< span class = "nb" > source< / span > < span class = "nt" > --< / span > Load a file as input
2024-05-07 07:22:32 +02:00
< span class = "nb" > tty< / span > < span class = "nt" > --< / span > Enable/Disable ansi output < i class = "conum" data-value = "1" > < / i > < b > (1)< / b >
< span class = "nt" > ---< / span > Command line options:
< span class = "nt" > -b< / span > < < span class = "nb" > builtin< / span > < span class = "o" > > < / span > Import < span class = "nb" > builtin < / span > modules.
< < span class = "nb" > builtin< / span > < span class = "o" > > < / span > can be a list of module names or a glob-pattern.
Use the special value < span class = "s1" > 'all'< / span > or the pattern < span class = "s1" > '*'< / span > to import all modules.
< span class = "nt" > -e< / span > < expression> Evaluate < expression> instead of standard-input
< span class = "nt" > -i< / span > Force REPL operation when all < span class = "nt" > -e< / span > occurences have been processed
< span class = "nt" > -h< / span > , < span class = "nt" > --help< / span > , < span class = "nb" > help < / span > Show this < span class = "nb" > help < / span > menu
< span class = "nt" > -m< / span > , < span class = "nt" > --modules< / span > List all < span class = "nb" > builtin < / span > modules
< span class = "nt" > -p< / span > Print prefix form
2024-05-08 07:51:01 +02:00
< span class = "nt" > -t< / span > Print tree form < i class = "conum" data-value = "2" > < / i > < b > (2)< / b >
< span class = "o" > > > > < / span > < / code > < / pre >
2024-05-07 07:22:32 +02:00
< / div >
< / div >
< div class = "colist arabic" >
< table >
< tr >
< td > < i class = "conum" data-value = "1" > < / i > < b > 1< / b > < / td >
< td > Only available for single fraction values< / td >
< / tr >
< tr >
< td > < i class = "conum" data-value = "2" > < / i > < b > 2< / b > < / td >
< td > Work in progress< / td >
< / tr >
< / table >
< / div >
< div class = "listingblock" >
< div class = "title" > REPL examples< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "shell" > < span class = "o" > [< / span > user]< span class = "nv" > $ < / span > tools/expr < span class = "nt" > --< / span > Expressions calculator v1.6.1,2024/05/06 < span class = "o" > (< / span > celestino.amoroso@portale-stac.it< span class = "o" > )< / span >
Type < span class = "nb" > help < / span > to get the list of command.
See also https://git.portale-stac.it/go-pkg/expr/src/branch/main/README.adoc
< span class = "o" > > > > < / span > 2+3
5
< span class = "o" > > > > < / span > 2+3< span class = "k" > *< / span > < span class = "o" > (< / span > 4-1.5< span class = "o" > )< / span >
9.5
< span class = "o" > > > > < / span > 0xFD + 0b1 + 0o1 < i class = "conum" data-value = "1" > < / i > < b > (1)< / b >
255
< span class = "o" > > > > < / span > 1|2 + 2|3 < i class = "conum" data-value = "2" > < / i > < b > (2)< / b >
7|6
< span class = "o" > > > > < / span > ml < i class = "conum" data-value = "3" > < / i > < b > (3)< / b >
< span class = "o" > > > > < / span > 1|2 + 2|3
7
-
6
< span class = "o" > > > > < / span > 1+2 but 5|2+0.5 < i class = "conum" data-value = "4" > < / i > < b > (4)< / b >
3
< span class = "o" > > > > < / span > 1+2< span class = "p" > ;< / span > 5|2+0.5 < i class = "conum" data-value = "5" > < / i > < b > (5)< / b >
3
< span class = "o" > > > > < / span > < / code > < / pre >
< / div >
< / div >
< div class = "colist arabic" >
< table >
< tr >
< td > < i class = "conum" data-value = "1" > < / i > < b > 1< / b > < / td >
< td > Number bases: 0x = hexadecimal, 0o = octal, 0b = binary.< / td >
< / tr >
< tr >
< td > < i class = "conum" data-value = "2" > < / i > < b > 2< / b > < / td >
< td > Fractions: numerator | denominator.< / td >
< / tr >
< tr >
< td > < i class = "conum" data-value = "3" > < / i > < b > 3< / b > < / td >
< td > Activate multi-line output of fractions.< / td >
< / tr >
< tr >
< td > < i class = "conum" data-value = "4" > < / i > < b > 4< / b > < / td >
< td > But operator, see < a href = "#_but_operator" > < code class = "blue" > but< / code > operator< / a > .< / td >
< / tr >
< tr >
< td > < i class = "conum" data-value = "5" > < / i > < b > 5< / b > < / td >
< td > Multi-expression: the same result of the previous single expression but this it is obtained with two separated calculations.< / td >
< / tr >
< / table >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_concepts_and_terminology" > < a class = "anchor" href = "#_concepts_and_terminology" > < / a > < a class = "link" href = "#_concepts_and_terminology" > 1.2. Concepts and terminology< / a > < / h3 >
< div class = "paragraph" >
< p > < mark > TODO< / mark > < / p >
< / div >
< div class = "imageblock" >
< div class = "content" >
< img src = "expression-diagram.png" alt = "expression diagram" >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_data_types" > < a class = "anchor" href = "#_data_types" > < / a > < a class = "link" href = "#_data_types" > 2. Data types< / a > < / h2 >
< div class = "sectionbody" >
< div class = "paragraph" >
< p > < em > Expr< / em > supports numerical, string, relational, boolean expressions, and mixed-type lists.< / p >
< / div >
< div class = "sect2" >
< h3 id = "_numbers" > < a class = "anchor" href = "#_numbers" > < / a > < a class = "link" href = "#_numbers" > 2.1. Numbers< / a > < / h3 >
< div class = "paragraph" >
< p > Numbers can be integers (GO int64) or float (GO float64). In mixed operations involving integers and floats, integers are automatically promoted to floats.< / p >
< / div >
< table class = "tableblock frame-all grid-all stretch" >
< caption class = "title" > Table 1. Arithmetic operators< / caption >
< colgroup >
< col style = "width: 7.6923%;" >
< col style = "width: 15.3846%;" >
< col style = "width: 46.1538%;" >
< col style = "width: 30.7693%;" >
< / colgroup >
< thead >
< tr >
< th class = "tableblock halign-center valign-top" > Symbol< / th >
< th class = "tableblock halign-center valign-top" > Operation< / th >
< th class = "tableblock halign-left valign-top" > Description< / th >
< th class = "tableblock halign-left valign-top" > Examples< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > / < code class = "blue" > -< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > change sign< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Change the sign of values< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > -1< / code > < em > [-1]< / em > < br >
< code class = "blue" > -(+2)< / code > < em > [-2]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > sum< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Add two values< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > -1 + 2< / code > < em > [1]< / em > < br >
< code class = "blue" > 4 + 0.5< / code > < em > [4.5]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > -< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > subtraction< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Subtract the right value from the left one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 3 - 1< / code > < em > [2]< / em > < br >
< code class = "blue" > 4 - 0.5< / code > < em > [3.5]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > *< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > product< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Multiply two values< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code > -1 * 2< / code > < em > [-2]< / em > < br >
< code class = "blue" > 4 * 0.5< / code > < em > [2.0]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > /< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Division< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Divide the left value by the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > -1 / 2< / code > < em > [0]< / em > < br >
< code class = "blue" > 1.0 / 2< / code > < em > [0.5]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ./< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Float division< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Force float division< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > -1 ./ 2< / code > < em > [-0.5]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > %< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Modulo< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Remainder of the integer division< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 % 2< / code > < em > [1]< / em > < / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_fractions" > < a class = "anchor" href = "#_fractions" > < / a > < a class = "link" href = "#_fractions" > 2.2. Fractions< / a > < / h3 >
< div class = "paragraph" >
< p > < em > Expr< / em > also suports fractions. Fraction literals are made with tow integers separated by a vertical bar < code > |< / code > .< / p >
< / div >
< div class = "paragraph" >
< div class = "title" > Examples< / div >
< p > < code > > > > < / code > < code class = "blue" > 1 | 2< / code > < br >
< code class = "green" > 1|2< / code > < br >
< code > > > > < / code > < code class = "blue" > 4|6< / code > < br >
< code class = "green" > 2|3< / code > < em class = "gray" > Fractions are always reduced to theri lowest terms< / em > < br >
< code > > > > < / code > < code class = "blue" > 1|2 + 2|3< / code > < br >
< code class = "green" > 7|6< / code > < br >
< code > > > > < / code > < code class = "blue" > 1|2 * 2|3< / code > < br >
< code class = "green" > 1|3< / code > < br >
< code > > > > < / code > < code class = "blue" > 1|2 / 1|3< / code > < br >
< code class = "green" > 3|2< / code > < br >
< code > > > > < / code > < code class = "blue" > 1|2 ./ 1|3< / code > < em class = "gray" > Force decimal division< / em > < br >
< code class = "green" > 1.5< / code > < br >
< code > > > > < / code > < code class = "blue" > -1|2< / code > < br >
< code class = "green" > -1|2< / code > < br >
< code > > > > < / code > < code class = "blue" > 1|-2< / code > < em class = "gray" > Wrong sign specification< / em > < br >
< em class = "red" > Eval Error: [1:3] infix operator "|" requires two non-nil operands, got 1< / em > < br >
< code > > > > < / code > < code class = "blue" > 1|(-2)< / code > < br >
< code class = "green" > -1|2< / code > < / p >
< / div >
< div class = "paragraph" >
< p > Fractions can be used together with integers and floats in expressions.< / p >
< / div >
< div class = "paragraph" >
< p > < code > > > > < / code > < code class = "blue" > 1|2 + 5< / code > < br >
< code class = "green" > 11|2< / code > < br >
< code > > > > < / code > < code class = "blue" > 4 - 1|2< / code > < br >
< code class = "green" > 7|2< / code > < br >
< code > > > > < / code > < code class = "blue" > 1.0 + 1|2< / code > < br >
< code class = "green" > 1.5< / code > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_strings" > < a class = "anchor" href = "#_strings" > < / a > < a class = "link" href = "#_strings" > 2.3. Strings< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > Strings are character sequences enclosed between two double quote < code class = "blue" > "< / code > . Example: < code class = "blue" > "I’ m a string"< / code > .< / p >
< / div >
< div class = "paragraph" >
< p > Some arithmetic operators can also be used with strings.< / p >
< / div >
< table class = "tableblock frame-all grid-all stretch" >
< caption class = "title" > Table 2. String operators< / caption >
< colgroup >
< col style = "width: 7.6923%;" >
< col style = "width: 15.3846%;" >
< col style = "width: 46.1538%;" >
< col style = "width: 30.7693%;" >
< / colgroup >
< thead >
< tr >
< th class = "tableblock halign-center valign-top" > Symbol< / th >
< th class = "tableblock halign-center valign-top" > Operation< / th >
< th class = "tableblock halign-left valign-top" > Description< / th >
< th class = "tableblock halign-left valign-top" > Examples< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > concatenation< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Join two strings or two < em > stringable< / em > values< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > "one" + "two"< / code > < em > ["onetwo"]< / em > < br >
< code class = "blue" > "one" + 2< / code > < em > ["one2"]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > *< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > repeat< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Make < em > n< / em > copy of a string< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > "one" * 2< / code > < em > ["oneone"]< / em > < / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_boolean" > < a class = "anchor" href = "#_boolean" > < / a > < a class = "link" href = "#_boolean" > 2.4. Boolean< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > Boolean data type has two values only: < em > true< / em > and < em > false< / em > . Relational and Boolean expressions produce Boolean values.< / p >
< / div >
< table class = "tableblock frame-all grid-all stretch" >
< caption class = "title" > Table 3. Relational operators< / caption >
< colgroup >
< col style = "width: 7.6923%;" >
< col style = "width: 15.3846%;" >
< col style = "width: 46.1538%;" >
< col style = "width: 30.7693%;" >
< / colgroup >
< thead >
< tr >
< th class = "tableblock halign-center valign-top" > Symbol< / th >
< th class = "tableblock halign-center valign-top" > Operation< / th >
< th class = "tableblock halign-left valign-top" > Description< / th >
< th class = "tableblock halign-left valign-top" > Examples< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ==< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Equal< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the left value is equal to the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 == 2< / code > < em > [false]< / em > < br >
< code class = "blue" > "a" == "a"< / code > < em > [true]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > !=< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Not Equal< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the left value is NOT equal to the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 != 2< / code > < em > [true]< / em > < br >
< code class = "blue" > "a" != "a"< / code > < em > [false]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > < < / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Less< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the left value is less than the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 < 2< / code > < em > [false]< / em > < br >
< code class = "blue" > "a" < "b"< / code > < em > [true]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > < =< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Less or Equal< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the left value is less than or equal to the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 < = 2< / code > < em > [false]< / em > < br >
< code class = "blue" > "b" < = "b"< / code > < em > [true]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > > < / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Greater< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the left value is greater than the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 > 2< / code > < em > [true]< / em > < br >
< code class = "blue" > "a" < "b"< / code > < em > [false]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > > =< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Greater or Equal< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the left value is greater than or equal to the right one< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > 5 > = 2< / code > < em > [true]< / em > < br >
< code class = "blue" > "b" < = "b"< / code > < em > [true]< / em > < / p > < / td >
< / tr >
< / tbody >
< / table >
< table class = "tableblock frame-all grid-all stretch" >
< caption class = "title" > Table 4. Boolean operators< / caption >
< colgroup >
< col style = "width: 15.3846%;" >
< col style = "width: 15.3846%;" >
< col style = "width: 38.4615%;" >
< col style = "width: 30.7693%;" >
< / colgroup >
< thead >
< tr >
< th class = "tableblock halign-center valign-top" > Symbol< / th >
< th class = "tableblock halign-center valign-top" > Operation< / th >
< th class = "tableblock halign-left valign-top" > Description< / th >
< th class = "tableblock halign-left valign-top" > Examples< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > NOT< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Not< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if the right value is false< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > NOT true< / code > < em > [false]< / em > < br >
< code class = "blue" > NOT (2 < 1)< / code > < em > [true]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > AND< / code > / < code class = "blue" > & & < / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > And< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if both left and right values are true< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > false & & true< / code > < em > [false]< / em > < br >
< code class = "blue" > "a" < "b" AND NOT (2 < 1)< / code > < em > [true]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > OR< / code > / < code class = "blue" > ||< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Or< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > True if at least one of the left and right values integers true< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > false or true< / code > < em > [true]< / em > < br >
< code class = "blue" > "a" == "b" OR (2 == 1)< / code > < em > [false]< / em > < / p > < / td >
< / tr >
< / tbody >
< / table >
< div class = "admonitionblock caution" >
< table >
< tr >
< td class = "icon" >
< i class = "fa icon-caution" title = "Caution" > < / i >
< / td >
< td class = "content" >
< div class = "paragraph" >
< p > Currently, boolean operations are evaluated using < em > short cut evaluation< / em > . This means that, if the left expression of operators < code class = "blue" > and< / code > and < code class = "blue" > or< / code > is sufficient to establish the result of the whole operation, the right expression would not evaluated at all.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > Example< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "m" > 2< / span > < span class = "o" > > < / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "m" > 1< / span > < span class = "p" > )< / span > < span class = "n" > or< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "m" > 8< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "m" > 0< / span > < span class = "p" > ;< / span > < span class = "n" > a< / span > < i class = "conum" data-value = "1" > < / i > < b > (1)< / b > < / code > < / pre >
< / div >
< / div >
< div class = "colist arabic" >
< table >
< tr >
< td > < i class = "conum" data-value = "1" > < / i > < b > 1< / b > < / td >
< td > This multi-expression returns < em > 1< / em > because in the first expression the left value of < code class = "blue" > or< / code > is < em > true< / em > and as a conseguence its right value is not computed. Therefore the < em > a< / em > variable only receives the integer < em > 1< / em > .< / td >
< / tr >
< / table >
< / div >
< / td >
< / tr >
< / table >
< / div >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_list" > < a class = "anchor" href = "#_list" > < / a > < a class = "link" href = "#_list" > 2.5. List< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > < em > Expr< / em > supports list of mixed-type values, also specified by normal expressions.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > List examples< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "p" > [< / span > < span class = "m" > 1< / span > < span class = "p" > ,< / span > < span class = "m" > 2< / span > < span class = "p" > ,< / span > < span class = "m" > 3< / span > < span class = "p" > ]< / span > < span class = "c" > // List of integers< / span >
< span class = "p" > [< / span > < span class = "s" > "one"< / span > < span class = "p" > ,< / span > < span class = "s" > "two"< / span > < span class = "p" > ,< / span > < span class = "s" > "three"< / span > < span class = "p" > ]< / span > < span class = "c" > // List of strings< / span >
< span class = "p" > [< / span > < span class = "s" > "one"< / span > < span class = "p" > ,< / span > < span class = "m" > 2< / span > < span class = "p" > ,< / span > < span class = "no" > false< / span > < span class = "p" > ,< / span > < span class = "m" > 4.1< / span > < span class = "p" > ]< / span > < span class = "c" > // List of mixed-types< / span >
< span class = "p" > [< / span > < span class = "s" > "one"< / span > < span class = "o" > +< / span > < span class = "m" > 1< / span > < span class = "p" > ,< / span > < span class = "m" > 2.0< / span > < span class = "o" > *< / span > < span class = "p" > (< / span > < span class = "m" > 9< / span > < span class = "o" > -< / span > < span class = "m" > 2< / span > < span class = "p" > )]< / span > < span class = "c" > // List of expressions< / span >
< span class = "p" > [< / span > < span class = "p" > [< / span > < span class = "m" > 1< / span > < span class = "p" > ,< / span > < span class = "s" > "one"< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "m" > 2< / span > < span class = "p" > ,< / span > < span class = "s" > "two"< / span > < span class = "p" > ]]< / span > < span class = "c" > // List of lists< / span > < / code > < / pre >
< / div >
< / div >
< table class = "tableblock frame-all grid-all stretch" >
< caption class = "title" > Table 5. List operators< / caption >
< colgroup >
< col style = "width: 15.3846%;" >
< col style = "width: 15.3846%;" >
< col style = "width: 38.4615%;" >
< col style = "width: 30.7693%;" >
< / colgroup >
< thead >
< tr >
< th class = "tableblock halign-center valign-top" > Symbol< / th >
< th class = "tableblock halign-center valign-top" > Operation< / th >
< th class = "tableblock halign-left valign-top" > Description< / th >
< th class = "tableblock halign-left valign-top" > Examples< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Join< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Joins two lists< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > [1,2] + [3]< / code > < em > [ [1,2,3] ]< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > -< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Difference< / em > < / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > Left list without elements in the right list< / p > < / td >
< td class = "tableblock halign-left valign-top" > < p class = "tableblock" > < code class = "blue" > [1,2,3] - [2]< / code > < em > [ [1,3] ]< / em > < / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< div class = "sect1" >
2024-05-09 07:20:22 +02:00
< h2 id = "_dictionaries" > < a class = "anchor" href = "#_dictionaries" > < / a > < a class = "link" href = "#_dictionaries" > 3. Dictionaries< / a > < / h2 >
< div class = "sectionbody" >
< div class = "paragraph" >
< p > The < em > dictionary< / em > data-type is set of pairs < em > key/value< / em > . It is also known as < em > map< / em > or < em > associative array< / em > . Dictionary literals are sequences of pairs separated by comma < code > ,< / code > ; sequences are enclosed between brace brackets.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > List examples< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "p" > {< / span > < span class = "m" > 1< / span > < span class = "o" > :< / span > < span class = "s" > "one"< / span > < span class = "p" > ,< / span > < span class = "m" > 2< / span > < span class = "o" > :< / span > < span class = "s" > "two"< / span > < span class = "p" > }< / span >
< span class = "p" > {< / span > < span class = "s" > "one"< / span > < span class = "o" > :< / span > < span class = "m" > 1< / span > < span class = "p" > ,< / span > < span class = "s" > "two"< / span > < span class = "o" > :< / span > < span class = "m" > 2< / span > < span class = "p" > }< / span >
< span class = "p" > {< / span > < span class = "s" > "sum"< / span > < span class = "o" > :< / span > < span class = "m" > 1< / span > < span class = "o" > +< / span > < span class = "m" > 2< / span > < span class = "o" > +< / span > < span class = "m" > 3< / span > < span class = "p" > ,< / span > < span class = "s" > "prod"< / span > < span class = "o" > :< / span > < span class = "m" > 1< / span > < span class = "o" > *< / span > < span class = "m" > 2< / span > < span class = "o" > *< / span > < span class = "m" > 3< / span > < span class = "p" > }< / span > < / code > < / pre >
< / div >
< / div >
< div class = "admonitionblock warning" >
< table >
< tr >
< td class = "icon" >
< i class = "fa icon-warning" title = "Warning" > < / i >
< / td >
< td class = "content" >
Support for dictionaries is still ongoing.
< / td >
< / tr >
< / table >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_variables" > < a class = "anchor" href = "#_variables" > < / a > < a class = "link" href = "#_variables" > 4. Variables< / a > < / h2 >
2024-05-07 07:22:32 +02:00
< div class = "sectionbody" >
< div class = "paragraph" >
< p > A variable is an identifier with an assigned value. Variables are stored in the object that implements the < em > ExprContext< / em > interface.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > Examples< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "m" > 1< / span >
< span class = "n" > x< / span > < span class = "o" > =< / span > < span class = "m" > 5.2< / span > < span class = "o" > *< / span > < span class = "p" > (< / span > < span class = "m" > 9< / span > < span class = "o" > -< / span > < span class = "m" > 3< / span > < span class = "p" > )< / span >
< span class = "n" > x< / span > < span class = "o" > =< / span > < span class = "m" > 1< / span > < span class = "p" > ;< / span > < span class = "n" > y< / span > < span class = "o" > =< / span > < span class = "m" > 2< / span > < span class = "o" > *< / span > < span class = "n" > x< / span > < / code > < / pre >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
2024-05-09 07:20:22 +02:00
< h2 id = "_other_operations" > < a class = "anchor" href = "#_other_operations" > < / a > < a class = "link" href = "#_other_operations" > 5. Other operations< / a > < / h2 >
2024-05-07 07:22:32 +02:00
< div class = "sectionbody" >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_operator" > < a class = "anchor" href = "#_operator" > < / a > < a class = "link" href = "#_operator" > 5.1. < code class = "blue" > ;< / code > operator< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > The semicolon operator < code class = "blue" > ;< / code > is an infixed pseudo-operator. It evaluates the left expression first and then the right expression. The latter is the final result.< / p >
< / div >
< div class = "admonitionblock important" >
< table >
< tr >
< td class = "icon" >
< i class = "fa icon-important" title = "Important" > < / i >
< / td >
< td class = "content" >
Technically < code class = "blue" > ;< / code > is not treated as a real operator. It acts as a separator in lists of expressions.
< / td >
< / tr >
< / table >
< / div >
< div class = "admonitionblock tip" >
< table >
< tr >
< td class = "icon" >
< i class = "fa icon-tip" title = "Tip" > < / i >
< / td >
< td class = "content" >
< code class = "blue" > ;< / code > can be used to set some variables before the final calculation.
< / td >
< / tr >
< / table >
< / div >
< div class = "listingblock" >
< div class = "title" > Example< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "m" > 1< / span > < span class = "p" > ;< / span > < span class = "n" > b< / span > < span class = "o" > =< / span > < span class = "m" > 2< / span > < span class = "p" > ;< / span > < span class = "n" > c< / span > < span class = "o" > =< / span > < span class = "m" > 3< / span > < span class = "p" > ;< / span > < span class = "n" > a< / span > < span class = "o" > +< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > c< / span > < span class = "c" > // returns 6< / span > < / code > < / pre >
< / div >
< / div >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_but_operator" > < a class = "anchor" href = "#_but_operator" > < / a > < a class = "link" href = "#_but_operator" > 5.2. < code class = "blue" > but< / code > operator< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > < code class = "blue" > but< / code > is an infixed operator. Its operands can be expressions of any type. It evaluates the left expression first, then the right expression. The value of the right expression is the final result. Examples: < code class = "blue" > 5 but 2< / code > returns 2, < code class = "blue" > x=2*3 but x-1< / code > returns 5.< / p >
< / div >
< div class = "paragraph" >
< p > < code class = "blue" > but< / code > is very similar to < code class = "blue" > ;< / code > . The only difference is that < code class = "blue" > ;< / code > can’ t be used inside parenthesis < code class = "blue" > (< / code > and < code class = "blue" > )< / code > .< / p >
< / div >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_assignment_operator" > < a class = "anchor" href = "#_assignment_operator" > < / a > < a class = "link" href = "#_assignment_operator" > 5.3. Assignment operator < code class = "blue" > =< / code > < / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > The assignment operator < code class = "blue" > =< / code > is used to define variables in the evaluation context or to change their value (see < em > ExprContext< / em > ).
The value on the left side of < code class = "blue" > =< / code > must be an identifier. The value on the right side can be any expression and it becomes the result of the assignment operation.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > Example< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "m" > 15< / span > < span class = "o" > +< / span > < span class = "m" > 1< / span > < span class = "c" > // returns 16< / span > < / code > < / pre >
< / div >
< / div >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_selector_operator" > < a class = "anchor" href = "#_selector_operator" > < / a > < a class = "link" href = "#_selector_operator" > 5.4. Selector operator < code class = "blue" > ? : ::< / code > < / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > The < em > selector operator< / em > is very similar to the < em > switch/case/default< / em > statement available in many programming languages.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > Syntax< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "bnf" > < selector-operator> ::= < select-expression> "?" < selector-case> { ":" < selector-case> } ["::" < default-multi-expression> ]
< selector-case> ::= [< match-list> ] < case-value>
< match-list> ::= "["< item> {","< items> }"]"
< item> ::= < expression
< case-multi-expression> ::= "{" < multi-expression> "}"
< multi-expression> ::= < expression> {";" < expression> }< / code > < / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > In other words, the selector operator evaluates the expression (< code > < select-expression> < / code > ) on the left-hand side of the < code > ?< / code > symbol; it then compares the result obtained with the values listed in the < code > < match-list> ’ s. If the comparision find a match with a value in a match-list, the associated `< case-multi-expression> < / code > is evaluted, and its result will be the final result of the selection operation.< / p >
< / div >
< div class = "paragraph" >
< p > The match lists are optional. In that case, the position, from left to right, of the < code > < selector-case> < / code > is used as match-list. Of course, that only works if the select-expression results in an integer.< / p >
< / div >
< div class = "paragraph" >
< p > The < code > :< / code > symbol (colon) is the separator of the selector-cases. Note that if the value of the select-expression does not match any match-list, an error will be issued. Therefore, it is strongly recommended to provide a default (multi-)expression introduced by the < code > ::< / code > symbol (double-colon). Also note that the default expression has no match-list.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > Examples< / div >
< div class = "content" >
< pre class = "rouge highlight" > < code data-lang = "go" > < span class = "m" > 1< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > {< / span > < span class = "s" > "b"< / span > < span class = "p" > }< / span > < span class = "c" > // returns "b"< / span >
< span class = "m" > 10< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > {< / span > < span class = "s" > "b"< / span > < span class = "p" > }< / span > < span class = "o" > ::< / span > < span class = "p" > {< / span > < span class = "s" > "c"< / span > < span class = "p" > }< / span > < span class = "c" > // returns "c"< / span >
< span class = "m" > 10< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > [< / span > < span class = "no" > true< / span > < span class = "p" > ,< / span > < span class = "m" > 2< / span > < span class = "o" > +< / span > < span class = "m" > 8< / span > < span class = "p" > ]< / span > < span class = "p" > {< / span > < span class = "s" > "b"< / span > < span class = "p" > }< / span > < span class = "o" > ::< / span > < span class = "p" > {< / span > < span class = "s" > "c"< / span > < span class = "p" > }< / span > < span class = "c" > // returns "b"< / span >
< span class = "m" > 10< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > [< / span > < span class = "no" > true< / span > < span class = "p" > ,< / span > < span class = "m" > 2< / span > < span class = "o" > +< / span > < span class = "m" > 8< / span > < span class = "p" > ]< / span > < span class = "p" > {< / span > < span class = "s" > "b"< / span > < span class = "p" > }< / span > < span class = "o" > ::< / span > < span class = "p" > [< / span > < span class = "m" > 10< / span > < span class = "p" > ]< / span > < span class = "p" > {< / span > < span class = "s" > "c"< / span > < span class = "p" > }< / span > < span class = "c" > // error: "... case list in default clause"< / span >
< span class = "m" > 10< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > [< / span > < span class = "m" > 10< / span > < span class = "p" > ]< / span > < span class = "p" > {< / span > < span class = "n" > x< / span > < span class = "o" > =< / span > < span class = "s" > "b"< / span > < span class = "n" > but< / span > < span class = "n" > x< / span > < span class = "p" > }< / span > < span class = "o" > ::< / span > < span class = "p" > {< / span > < span class = "s" > "c"< / span > < span class = "p" > }< / span > < span class = "c" > // returns "b"< / span >
< span class = "m" > 10< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > [< / span > < span class = "m" > 10< / span > < span class = "p" > ]< / span > < span class = "p" > {< / span > < span class = "n" > x< / span > < span class = "o" > =< / span > < span class = "s" > "b"< / span > < span class = "p" > ;< / span > < span class = "n" > x< / span > < span class = "p" > }< / span > < span class = "o" > ::< / span > < span class = "p" > {< / span > < span class = "s" > "c"< / span > < span class = "p" > }< / span > < span class = "c" > // returns "b"< / span >
< span class = "m" > 10< / span > < span class = "err" > ?< / span > < span class = "p" > {< / span > < span class = "s" > "a"< / span > < span class = "p" > }< / span > < span class = "o" > :< / span > < span class = "p" > {< / span > < span class = "s" > "b"< / span > < span class = "p" > }< / span > < span class = "c" > // error: "... no case catches the value (10) of the selection expression< / span > < / code > < / pre >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
2024-05-09 07:20:22 +02:00
< h2 id = "_priorities_of_operators" > < a class = "anchor" href = "#_priorities_of_operators" > < / a > < a class = "link" href = "#_priorities_of_operators" > 6. Priorities of operators< / a > < / h2 >
2024-05-07 07:22:32 +02:00
< div class = "sectionbody" >
< div class = "paragraph" >
< p > The table below shows all supported operators by decreasing priorities.< / p >
< / div >
< table class = "tableblock frame-all grid-all stretch" >
< caption class = "title" > Table 6. Operators priorities< / caption >
< colgroup >
< col style = "width: 12.5%;" >
< col style = "width: 12.5%;" >
< col style = "width: 12.5%;" >
< col style = "width: 31.25%;" >
< col style = "width: 31.25%;" >
< / colgroup >
< thead >
< tr >
< th class = "tableblock halign-center valign-top" > Priority< / th >
< th class = "tableblock halign-center valign-top" > Operators< / th >
< th class = "tableblock halign-center valign-top" > Position< / th >
< th class = "tableblock halign-center valign-top" > Operation< / th >
< th class = "tableblock halign-center valign-top" > Operands and results< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < strong > ITEM< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > .< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Item< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > collection< / em > < code > "."< / code > < em > key< / em > → < em > any< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "2" > < p class = "tableblock" > < strong > INC< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ++< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Postfix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Post increment< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > integer-variable< / em > < code > "++"< / code > → < em > integer< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ++< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Postfix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Next item< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > iterator< / em > < code > "++"< / code > → < em > any< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < strong > FACT< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > !< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Postfix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Factorial< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > integer< / em > < code > "!"< / code > → < em > integer< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "3" > < p class = "tableblock" > < strong > SIGN< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > , < code class = "blue" > -< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Prefix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Change-sign< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > (< code > "+“ |” -"< / code > ) < em > number< / em > → < em > number< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > #< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Prefix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Lenght-of< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code > "#"< / code > < em > collection< / em > → < em > integer< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > #< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Prefix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Size-of< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code > "#"< / code > < em > iterator< / em > → < em > integer< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "5" > < p class = "tableblock" > < strong > PROD< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > *< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Product< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > number< / em > < code > "*"< / code > < em > number< / em > → < em > number< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > *< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > String-repeat< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > string< / em > < code > "*"< / code > < em > integer< / em > → < em > string< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > /< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Division< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > number< / em > < code > "/"< / code > < em > number< / em > → < em > number< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ./< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Float-division< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > number< / em > < code > "./"< / code > < em > number< / em > → < em > float< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > %< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Integer-remainder< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > integer< / em > < code > "%"< / code > < em > integer< / em > → < em > integer< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "5" > < p class = "tableblock" > < strong > SUM< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Sum< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > number< / em > < code > "+"< / code > < em > number< / em > → < em > number< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > String-concat< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > (< em > string< / em > |< em > number< / em > ) < code > "+"< / code > (< em > string< / em > |< em > number< / em > ) → < em > string< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > +< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > List-join< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > list< / em > < code > "+"< / code > < em > list< / em > → < em > list< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > -< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Subtraction< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > number< / em > < code > "-"< / code > < em > number< / em > → < em > number< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > -< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > List-difference< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > list< / em > < code > "-"< / code > < em > list< / em > → < em > list< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "6" > < p class = "tableblock" > < strong > RELATION< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > < < / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > less< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > comparable< / em > < code > "< "< / code > < em > comparable< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > < =< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > less-equal< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > comparable< / em > < code > "< ="< / code > < em > comparable< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > > < / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > greater< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > comparable< / em > < code > "> "< / code > < em > comparable< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > > =< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > greater-equal< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > comparable< / em > < code > "> ="< / code > < em > comparable< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ==< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > equal< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > comparable< / em > < code > "=="< / code > < em > comparable< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > !=< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > not-equal< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > comparable< / em > < code > "!="< / code > < em > comparable< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < strong > NOT< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > not< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Prefix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > not< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code > "not"< / code > < em > boolean< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "2" > < p class = "tableblock" > < strong > AND< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > and< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > and< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > boolean< / em > < code > "and"< / code > < em > boolean< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > & & < / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > and< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > boolean< / em > < code > "& & "< / code > < em > boolean< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" rowspan = "2" > < p class = "tableblock" > < strong > OR< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > or< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > or< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > boolean< / em > < code > "or"< / code > < em > boolean< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > ||< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > or< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > boolean< / em > < code > "||"< / code > < em > boolean< / em > → < em > boolean< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < strong > ASSIGN< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > =< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > assignment< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > identifier< / em > "=" < em > any< / em > → < em > any< / em > < / p > < / td >
< / tr >
< tr >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < strong > BUT< / strong > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < code class = "blue" > but< / code > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > Infix< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > but< / em > < / p > < / td >
< td class = "tableblock halign-center valign-top" > < p class = "tableblock" > < em > any< / em > "but" < em > any< / em > → < em > any< / em > < / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "sect1" >
2024-05-09 07:20:22 +02:00
< h2 id = "_functions" > < a class = "anchor" href = "#_functions" > < / a > < a class = "link" href = "#_functions" > 7. Functions< / a > < / h2 >
2024-05-07 07:22:32 +02:00
< div class = "sectionbody" >
< div class = "paragraph" >
< p > Functions in < em > Expr< / em > are very similar to functions in many programming languages.< / p >
< / div >
< div class = "paragraph" >
< p > In < em > Expr< / em > functions compute values in a local context (scope) that do not make effects on the calling context. This is the normal behavior. Using the reference operator < code class = "blue" > @< / code > it is possibile to export local definition to the calling context.< / p >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_function_calls" > < a class = "anchor" href = "#_function_calls" > < / a > < a class = "link" href = "#_function_calls" > 7.1. Function calls< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > < mark > TODO: function calls operations< / mark > < / p >
< / div >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_function_definitions" > < a class = "anchor" href = "#_function_definitions" > < / a > < a class = "link" href = "#_function_definitions" > 7.2. Function definitions< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > < mark > TODO: function definitions operations< / mark > < / p >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
2024-05-09 07:20:22 +02:00
< h2 id = "_builtins" > < a class = "anchor" href = "#_builtins" > < / a > < a class = "link" href = "#_builtins" > 8. Builtins< / a > < / h2 >
2024-05-07 07:22:32 +02:00
< div class = "sectionbody" >
< div class = "paragraph" >
< p > < mark > TODO: builtins< / mark > < / p >
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_builtin_functions" > < a class = "anchor" href = "#_builtin_functions" > < / a > < a class = "link" href = "#_builtin_functions" > 8.1. Builtin functions< / a > < / h3 >
2024-05-07 07:22:32 +02:00
< / div >
< div class = "sect2" >
2024-05-09 07:20:22 +02:00
< h3 id = "_import" > < a class = "anchor" href = "#_import" > < / a > < a class = "link" href = "#_import" > 8.2. < em class = "blue" > import()< / em > < / a > < / h3 >
2024-05-07 07:22:32 +02:00
< div class = "paragraph" >
< p > < em class = "blue" > import(< span class = "grey" > < source-file> < / span > )< / em > loads the multi-expression contained in the specified source and returns its value.< / p >
< / div >
< / div >
< / div >
< / div >
< / div >
< div id = "footer" >
< div id = "footer-text" >
2024-05-09 07:20:22 +02:00
Last updated 2024-05-09 07:18:01 +0200
2024-05-07 07:22:32 +02:00
< / div >
< / div >
< / body >
< / html >