Both sides previous revisionPrevious revision | Next revisionBoth sides next revision |
docs:tutorial [2016/11/30 12:34] – sbs | docs:tutorial [2016/11/30 18:25] – sbs |
---|
<!DOCTYPE html><html> | <html> |
<head> | <head> |
<title>Untitled Document</title> | <title>Untitled Document</title> |
<!--Generated on Wed Nov 30 11:29:29 2016 by LaTeXML (version 0.8.2) http://dlmf.nist.gov/LaTeXML/.--> | <!-- Generated on Wed Nov 30 17:23:47 2016 by LaTeXML (version 0.8.2) http://dlmf.nist.gov/LaTeXML/. --> |
| |
| <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> |
| <!-- autoinlined `/Volumes/Users/sbs/tex/sacdoc/tutorial/html/LaTeXML.css' --> |
| <style type='text/css'> |
| /*====================================================================== |
| Core CSS for LaTeXML documents converted to (X)HTML */ |
| /* Generic Page layout */ |
| .ltx_page_header, |
| .ltx_page_footer { font-size:0.8em; } |
| .ltx_page_header *[rel~="prev"], |
| .ltx_page_footer *[rel~="prev"] { float:left; } |
| .ltx_page_header *[rel~="up"], |
| .ltx_page_footer *[rel~="up"] { display:block; text-align:center; } |
| .ltx_page_header *[rel~="next"], |
| .ltx_page_footer *[rel~="next"] { float:right; } |
| /* What was I trying for here; need more selective rule! |
| .ltx_page_header .ltx_ref, |
| .ltx_page_footer .ltx_ref { |
| margin:0 1em; } |
| */ |
| .ltx_page_header li { |
| padding:0.1em 0.2em 0.1em 1em;} |
| |
| /* Main content */ |
| .ltx_page_content { clear:both; } |
| .ltx_page_header { border-bottom:1px solid; margin-bottom:5px; } |
| .ltx_page_footer { clear:both; border-top:1px solid; margin-top:5px; } |
| |
| .ltx_page_header:after, |
| .ltx_page_footer:after, |
| .ltx_page_content:after { |
| content:"."; display:block; height:0; clear:both; visibility:hidden; } |
| .ltx_page_footer:before { |
| content:"."; display:block; height:0; clear:both; visibility:hidden; } |
| |
| .ltx_page_logo { font-size:80%; margin-top: 5px; clear:both; float:right; } |
| .ltx_page_logo a { font-variant: small-caps; } |
| .ltx_page_logo img { vertical-align:-3px; } |
| |
| /* if shown */ |
| .ltx_page_navbar li { white-space:nowrap; display:block; overflow:hidden; } |
| /* If ref got turned into span, it's "this section"*/ |
| .ltx_page_navbar li span.ltx_ref { white-space:normal; overflow:visible; } |
| |
| /* Ought to be easily removable/overridable? */ |
| .ltx_pagination.ltx_role_newpage { height:2em; } |
| /*====================================================================== |
| Document Structure; Titles & Frontmatter */ |
| |
| /* undo bold here to remove the browser's native h# styling, |
| at let all other styles override it (with more specific rules)*/ |
| .ltx_title { font-size:100%; font-weight:normal; } |
| |
| /* Hack to simulate run-in! put class="ltx_runin" on a title or tag |
| for it to run-into the following text. */ |
| .ltx_runin { display:inline; } |
| .ltx_runin:after { content:" "; } |
| .ltx_runin + .ltx_para, |
| .ltx_runin + .ltx_para p, |
| .ltx_runin + p { display:inline; } |
| |
| .ltx_outdent { margin-left: -2em; } |
| |
| /* .ltx_chapter_title, etc should be in ltx-article.css etc. |
| */ |
| .ltx_page_main { margin:0px; padding:1em 3em 1em 2em; } |
| .ltx_tocentry { list-style-type:none; } |
| |
| /* support for common author block layouts.*/ |
| /* add class ltx_authors_1line to get authors in single line |
| with pop-up affiliation, etc. */ |
| .ltx_authors_1line .ltx_creator, |
| .ltx_authors_1line .ltx_author_before, |
| .ltx_authors_1line .ltx_author_after { display:inline;} |
| .ltx_authors_1line .ltx_author_notes { display:inline-block; } |
| .ltx_authors_1line .ltx_author_notes:before { content:"*"; color:blue;} |
| .ltx_authors_1line .ltx_author_notes span { display:none; } |
| .ltx_authors_1line .ltx_author_notes:hover span { |
| display:block; position:absolute; z-index:10; |
| background:white; text-align:left; |
| border: 1px solid black; border-radius: 0 5px 5px 5px; box-shadow: 5px 5px 10px gray; } |
| |
| /* add class=ltx_authors_multiline to get authors & affliations on separate lines*/ |
| .ltx_authors_multiline .ltx_creator, |
| .ltx_authors_multiline .ltx_author_before, |
| .ltx_authors_multiline .ltx_author_after, |
| .ltx_authors_multiline .ltx_author_notes, |
| .ltx_authors_multiline .ltx_author_notes .ltx_contact { |
| display:block; } |
| |
| /*====================================================================== |
| Para level */ |
| .ltx_float { |
| margin: 1ex 3em 1ex 3em; } |
| td.ltx_subfigure, |
| td.ltx_subtable, |
| td.ltx_subfloat { width:50%; } |
| /* theorems, figure, tables, floats captions.. */ |
| /*====================================================================== |
| Blocks, Lists, Floats */ |
| .ltx_p, |
| .ltx_quote, |
| .ltx_block, |
| .ltx_para { |
| display: block; } |
| |
| /* alignment within blocks */ |
| .ltx_align_left { text-align:left; } |
| .ltx_align_right { text-align:right; } |
| .ltx_align_center { text-align:center; } |
| .ltx_align_justify { text-align:justify; } |
| .ltx_align_top { vertical-align:top; } |
| .ltx_align_bottom { vertical-align:bottom; } |
| .ltx_align_middle { vertical-align:middle; } |
| .ltx_align_baseline { vertical-align:baseline; } |
| |
| .ltx_align_floatleft { float:left; } |
| .ltx_align_floatright { float:right; } |
| |
| .ltx_td.ltx_align_left, .ltx_th.ltx_align_left, |
| .ltx_td.ltx_align_right, .ltx_th.ltx_align_right, |
| .ltx_td.ltx_align_center, .ltx_th.ltx_align_center { white-space:nowrap; } |
| .ltx_td.ltx_align_left.ltx_wrap, .ltx_th.ltx_align_left.ltx_wrap, |
| .ltx_td.ltx_align_right.ltx_wrap, .ltx_th.ltx_align_right.ltx_wrap, |
| .ltx_td.ltx_align_center.ltx_wrap, .ltx_th.ltx_align_center.ltx_wrap { white-space:normal; } |
| |
| .ltx_inline-block { display:inline-block; } |
| |
| /* equations in non-aligned mode (not normally used) */ |
| .ltx_eqn_div { display:block; width:95%; text-align:center; } |
| |
| /* equations in aligned mode (aligning tags, etc as well as equations) */ |
| .ltx_eqn_table { display:table; width:100%; border-collapse:collapse; } |
| .ltx_eqn_row { display:table-row; } |
| .ltx_eqn_cell { display:table-cell; width:auto; } |
| |
| .ltx_tag_equationgroup.ltx_align_left, |
| .ltx_tag_equation.ltx_align_left{ position:absolute; left:3em; } |
| .ltx_tag_equationgroup.ltx_align_right, |
| .ltx_tag_equation.ltx_align_right{ position:absolute; right:3em; } |
| |
| |
| table.ltx_eqn_align tr.ltx_equation td.ltx_align_left + td.ltx_align_right { padding-left:3em; } |
| table.ltx_eqn_eqnarray tr.ltx_eqn_lefteqn + tr td.ltx_align_right { min-width:2em; } |
| |
| .ltx_eqn_eqno { max-width:0em; overflow:visible; } |
| .ltx_eqn_eqno.ltx_align_right .ltx_tag { float:right; } |
| |
| .ltx_eqn_center_padleft, |
| .ltx_eqn_center_padright { width:50%; min-width:2em;} |
| .ltx_eqn_left_padleft, |
| .ltx_eqn_right_padright { min-width:2em; } |
| .ltx_eqn_left_padright, |
| .ltx_eqn_right_padleft { width:100%; } |
| |
| /* Various lists */ |
| .ltx_itemize, |
| .ltx_enumerate, |
| .ltx_description { |
| display:block; } |
| .ltx_itemize .ltx_item, |
| .ltx_enumerate .ltx_item { |
| display: list-item; } |
| |
| /* Position the tag to look like a normal item bullet. */ |
| li.ltx_item > .ltx_tag { |
| display:inline-block; margin-left:-1.5em; min-width:1.5em; |
| text-align:right; } |
| .ltx_item .ltx_tag + .ltx_para, |
| .ltx_item .ltx_tag + .ltx_para .ltx_p { display:inline; } |
| |
| /* NOTE: Need to try harder to get runin appearance? */ |
| dl.ltx_description dt { margin-right:0.5em; float:left; |
| font-weight:bold; font-size:95%; } |
| dl.ltx_description dd { margin-left:5em; } |
| dl.ltx_description dl.ltx_description dd { margin-left:3em; } |
| |
| /* Theorems */ |
| .ltx_theorem {margin:1em 0em 1em 0em; } |
| .ltx_title_theorem { font-size:100%; } |
| |
| /* Bibliographies */ |
| .ltx_bibliography dt { margin-right:0.5em; float:left; } |
| .ltx_bibliography dd { margin-left:3em; } |
| /*.ltx_biblist { list-style-type:none; }*/ |
| .ltx_bibitem { list-style-type:none; } |
| .ltx_bibtag { font-weight:bold; margin-left:-2em; width:3em; } |
| /*.bibitem-tag + div { display:inline; }*/ |
| .ltx_bib_title { font-style:italic; } |
| .ltx_bib_article .bib-title { font-style:normal !important; } |
| .ltx_bib_journal { font-style:italic; } |
| .ltx_bib_volume { font-weight:bold; } |
| |
| /* Indices */ |
| .ltx_indexlist li { list-style-type:none; } |
| .ltx_indexlist { margin-left:1em; padding-left:1em;} |
| |
| /* Listings */ |
| .ltx_listing { |
| display:block; |
| margin: 1ex 3em 1ex 3em; |
| overflow-x:auto; } |
| .ltx_float .ltx_listing { |
| margin: 0; } |
| .ltx_listingline { white-space:nowrap; min-height:1em; } |
| .ltx_lst_numbers_left .ltx_listingline .ltx_tag { |
| background-color:transparent; |
| margin-left:-3em; width:2.5em; |
| position:absolute; |
| text-align:right; } |
| .ltx_lst_numbers_right .ltx_listingline .ltx_tag { |
| background-color:transparent; |
| width:2.5em; |
| position:absolute; right:3em; |
| text-align:right; } |
| /* |
| position:absolute; left:0em; |
| max-width:0em; text-align:right; } |
| */ |
| .ltx_parbox {text-indent:0em; } |
| |
| /* NOTE that it is CRITICAL to put position:relative outside & absolute inside!! |
| I wish I understood why! |
| Outer box establishes resulting size, neutralizes any outer positioning, etc; |
| inner establishes position of stuff to be rotated */ |
| .ltx_transformed_outer { |
| position:relative; bottom:0pt;left:0pt; |
| overflow:visible; } |
| .ltx_transformed_inner { |
| display:block; |
| position:absolute;bottom:0pt;left:0pt; } |
| .ltx_transformed_inner > .ltx_p {text-indent:0em; margin:0; padding:0; } |
| /* If simulating a table (html5), try to get rowspan to work...sorta? */ |
| span.ltx_rowspan { position:absolute; top:0; bottom:0; } |
| |
| /* by default, p doesn't indent */ |
| .ltx_p { text-indent:0em; white-space:normal; } |
| /* explicit control of indentation (on ltx_para) */ |
| .ltx_indent > .ltx_p:first-child { text-indent:2em!important; } |
| .ltx_noindent > .ltx_p:first-child { text-indent:0em!important; } |
| |
| /*====================================================================== |
| Columns */ |
| .ltx_page_column1 { |
| width:44%; float:left; } /* IE uses % of wrong container*/ |
| .ltx_page_column2 { |
| width:44%; float:right; } |
| .ltx_page_columns > .ltx_page_column1 { |
| width:48%; float:left; } |
| .ltx_page_columns > .ltx_page_column2 { |
| width:48%; float:right; } |
| .ltx_page_columns:after { |
| content:"."; display:block; height:0; clear:both; visibility:hidden; } |
| |
| /*====================================================================== |
| Borders and such */ |
| .ltx_tabular { display:inline-table; border-collapse:collapse; } |
| .ltx_tabular.ltx_centering { display:table; } |
| .ltx_thead, |
| .ltx_tfoot, |
| .ltx_tbody { display:table-row-group; } |
| .ltx_tr { display:table-row; } |
| .ltx_td, |
| .ltx_th { display:table-cell; } |
| |
| .ltx_framed { border:1px solid black;} |
| .ltx_tabular .ltx_td, |
| .ltx_tabular .ltx_th { padding:0.1em 0.5em; } |
| /* regular lines */ |
| .ltx_border_t { border-top:1px solid black; } |
| .ltx_border_r { border-right:1px solid black; } |
| .ltx_border_b { border-bottom:1px solid black; } |
| .ltx_border_l { border-left:1px solid black; } |
| /* double lines */ |
| .ltx_border_tt { border-top:3px double black; } |
| .ltx_border_rr { border-right:3px double black; } |
| .ltx_border_bb { border-bottom:3px double black; } |
| .ltx_border_ll { border-left:3px double black; } |
| /* Light lines */ |
| .ltx_border_T { border-top:1px solid gray; } |
| .ltx_border_R { border-right:1px solid gray; } |
| .ltx_border_B { border-bottom:1px solid gray; } |
| .ltx_border_L { border-left:1px solid gray; } |
| /* Framing */ |
| .ltx_framed_rectangle { border-style:solid; border-width:1px; } |
| .ltx_framed_top { border-top-style:solid; border-top-width:1px; } |
| .ltx_framed_left { border-left-style:solid; border-left-width:1px; } |
| .ltx_framed_right { border-right-style:solid; border-right-width:1px; } |
| .ltx_framed_bottom, |
| .ltx_framed_underline { border-bottom-style:solid; border-bottom-width:1px; } |
| .ltx_framed_topbottom { border-top-style:solid; border-top-width:1px; |
| border-bottom-style:solid; border-bottom-width:1px; } |
| .ltx_framed_leftright { border-left-style:solid; border-left-width:1px; |
| border-right-style:solid; border-right-width:1px; } |
| |
| /*====================================================================== |
| Misc */ |
| /* .ltx_verbatim*/ |
| .ltx_verbatim { text-align:left; } |
| /*====================================================================== |
| Meta stuff, footnotes */ |
| .ltx_note_content { display:none; } |
| /*right:5%; */ |
| .ltx_note_content { |
| max-width: 70%; font-size:90%; left:15%; |
| text-align:left; |
| background-color: white; |
| padding: 0.5em 1em 0.5em 1.5em; |
| border: 1px solid black; border-radius: 0 5px 5px 5px; box-shadow: 5px 5px 10px gray; } |
| .ltx_note_mark { color:blue; } |
| .ltx_note_type { font-weight: bold; } |
| .ltx_note { display:inline-block; text-indent:0; } /* So we establish containing block */ |
| .ltx_note_content .ltx_note_mark { position:absolute; left:0.2em; top:-0.1em; } |
| .ltx_note:hover .ltx_note_content, |
| .ltx_note .ltx_note_content:hover { |
| display:block; position:absolute; z-index:10; } |
| |
| .ltx_ERROR { color:red; } |
| .ltx_rdf { display:none; } |
| .ltx_missing { color:red;} |
| .ltx_nounicode { color:red; } |
| /*====================================================================== |
| SVG (pgf/tikz ?) basics */ |
| |
| /* Stuff appearing in svg:foreignObject */ |
| .ltx_svg_fog foreignObject { margin:0; padding:0; overflow:visible; } |
| .ltx_svg_fog foreignObject > p { margin:0; padding:0; display:block; } |
| /*.ltx_svg_fog foreignObject > p { margin:0; padding:0; display:block; white-space:nowrap; }*/ |
| |
| /*====================================================================== |
| Low-level Basics */ |
| /* Note that LaTeX(ML)'s font model doesn't map quite exactly to CSS's */ |
| /* Font Families => font-family */ |
| .ltx_font_serif { font-family: serif; } |
| .ltx_font_sansserif { font-family: sans-serif; } |
| .ltx_font_typewriter { font-family: monospace; } |
| /* dingbats should be converted to unicode? */ |
| /* Math font families handled within math: script, symbol, fraktur, blackboard ? */ |
| /* Font Series => font-weight */ |
| .ltx_font_bold { font-weight: bold; } |
| .ltx_font_medium { font-weight: normal; } |
| /* Font Shapes => font-style or font-variant */ |
| .ltx_font_italic { font-style: italic; font-variant:normal; } |
| .ltx_font_upright { font-style: normal; font-variant:normal; } |
| .ltx_font_slanted { font-style: oblique; font-variant:normal; } |
| .ltx_font_smallcaps { font-variant: small-caps; font-style:normal; } |
| .ltx_font_oldstyle { font-variant: oldstyle-nums; /* experimental css3 ? Doesn't seem to work!*/ |
| font-style:normal; |
| -moz-font-feature-settings: "onum"; |
| -ms-font-feature-settings: "onum"; |
| -webkit-font-feature-settings: "onum"; |
| font-variant-numeric: oldstyle-nums; } |
| .ltx_font_mathcaligraphic { font-family: "Lucida Calligraphy", "Zapf Chancery","URW Chancery L"; } |
| /* |
| |
| .ltx_font_mathscript { ? } |
| */ |
| cite { font-style: normal; } |
| |
| .ltx_red { color:red; } |
| /*.ltx_centering { text-align:center; margin:auto; }*/ |
| /*.ltx_inline-block.ltx_centering,*/ |
| /* Hmm.... is this right in general? */ |
| .ltx_centering { display:block; margin:auto; text-align:center; } |
| |
| /* Dubious stuff */ |
| .ltx_hflipped { |
| display:inline-block; |
| -moz-transform: scaleX(-1); |
| -o-transform: scaleX(-1); |
| -webkit-transform: scaleX(-1); |
| transform: scaleX(-1); |
| filter: FlipH; |
| -ms-fliter: "FlipH"; } |
| .ltx_vflipped { |
| display:inline-block; |
| -moz-transform: scaleY(-1); |
| -o-transform: scaleY(-1); |
| -webkit-transform: scaleY(-1); |
| transform: scaleY(-1); |
| filter: FlipV; |
| -ms-fliter: "FlipV"; } |
| |
| /* .ltx_phantom handled in xslt */ |
| |
| |
| </style> |
| |
| <!-- autoinlined `/Volumes/Users/sbs/tex/sacdoc/tutorial/html/ltx-report.css' --> |
| <style type='text/css'> |
| |
| .ltx_title_document { font-size:170%; text-align:center; margin:1em 0 1em 0; } |
| .ltx_authors, |
| .ltx_role_author { text-align:center; margin:1em 0 1em 0; } |
| .ltx_role_author .ltx_personname { font-size: 120%; } |
| .ltx_date { text-align:center; font-size: 120%; margin:1em 0 1em 0; } |
| .ltx_subtitle { text-align:center; font-size: 120%; padding-left:0.2em; margin-left:-0.5em; } |
| |
| .ltx_title_abstract { text-align:center; font-size: 100%; font-weight:bold; } |
| .ltx_abstract { margin-left:4em; margin-right:4em; } |
| |
| .ltx_appendix, |
| .ltx_part, |
| .ltx_chapter, |
| .ltx_section, |
| .ltx_subsection, |
| .ltx_subsubsection { margin-top:1.5em; } |
| .ltx_paragraph, |
| .ltx_subparagraph { margin-top:1.0em; } |
| |
| .ltx_title_part { font-size:200%; font-weight:bold; margin-bottom:1em; } |
| .ltx_title_appendix, |
| .ltx_title_chapter { font-size:200%; font-weight:bold; margin-bottom:1em; } |
| .ltx_title_chapter .ltx_tag { display:block; font-size:90%; margin-bottom:0.5em; } |
| .ltx_title_section { font-size:140%; font-weight:bold; margin-bottom:1em; } |
| .ltx_title_subsection { font-size:120%; font-weight:bold; margin-bottom:1em; } |
| .ltx_title_subsubsection { font-size:100%; font-weight:bold; margin-bottom:1em; } |
| |
| /* Paragraph & Subparagraph titles should be runin! */ |
| .ltx_title_paragraph { font-size:100%; font-weight:bold; display:inline; |
| margin-right:1em; } |
| .ltx_paragraph .ltx_title, |
| .ltx_paragraph .ltx_title + .ltx_para, |
| .ltx_paragraph .ltx_title + .ltx_para > .ltx_p { display:inline; } |
| |
| .ltx_title_subparagraph { font-size:100%; font-weight:bold; display:inline; |
| margin-left:2em; margin-right:1em; } |
| .ltx_subparagraph .ltx_title, |
| .ltx_subparagraph .ltx_title + .ltx_para, |
| .ltx_subparagraph .ltx_title + .ltx_para > .ltx_p { display:inline; } |
| |
| .ltx_figure { text-align:center; margin:auto; margin:0.5em; } |
| .ltx_table { text-align:center; margin:auto; margin:0.5em; } |
| |
| /* experimental: flex model, to center short captions, justify long ones */ |
| .ltx_table, |
| .ltx_figure { display:flex; flex-direction:column; align-items:center; } |
| .ltx_table .ltx_caption, |
| .ltx_figure .ltx_caption { text-align:justify; } |
| |
| /* first p in para gets indented */ |
| .ltx_para > .ltx_p:first-child { text-indent:2em; } |
| /* except the initial in a section */ |
| section > .ltx_title +.ltx_para > .ltx_p, |
| section > .ltx_title +.ltx_date +.ltx_para > .ltx_p {text-indent:0em; } |
| |
| .ltx_itemize { margin-left:1em; } |
| |
| .ltx_theorem { margin-top:0.5em; margin-bottom:0.5em; } |
| .ltx_theorem .ltx_title { margin-bottom:0.1em; font-weight:normal; } |
| .ltx_theorem .ltx_title + .ltx_para, |
| .ltx_theorem .ltx_title + .ltx_para .ltx_p, |
| .ltx_theorem .ltx_title + .ltx_p { margin-top:0em; } |
| |
| </style> |
| |
| <!-- autoinlined `/Volumes/Users/sbs/tex/sacdoc/tutorial/html/ltx-listings.css' --> |
| <style type='text/css'> |
| |
| .ltx_listing_data { |
| float:right; } |
| .ltx_listing_data a { |
| text-decoration:none; } |
| </style> |
| |
| <link rel='stylesheet' href='http://www.sac-home.org/dokuwiki/lib/tpl/bootstrap3/assets/bootstrap/journal/bootstrap.min.css' type='text/css'> |
| <!-- autoinlined `/Volumes/Users/sbs/tex/sacdoc/tutorial/html/tutorial.css' --> |
| <style type='text/css'> |
| /*body { |
| padding-top: 1em; |
| max-width: 50em; |
| margin: auto; |
| }*/ |
| |
| /* This section converts inline menu div into a floating menu. */ |
| .ltx_role_contents { |
| width: 300px; |
| margin-left: 0px; |
| overflow-y: auto; |
| max-height: 90%; |
| /*padding-top: 15px;*/ |
| /*border-right: 1px solid black;*/ |
| float: left; |
| clear: left; |
| top: 0; |
| position: fixed; |
| margin-top: 85px; |
| padding-right: 5px; |
| } |
| |
| .ltx_page_main { |
| margin-top: -30px; |
| padding: 0; |
| } |
| |
| .ltx_titlepage { |
| padding-left: 320px; |
| } |
| |
| .ltx_part { |
| padding-left: 320px; |
| } |
| |
| .ltx_role_contents h6 { |
| display: none; |
| } |
| |
| .ltx_role_contents > ul { |
| padding: 0; |
| } |
| |
| .ltx_page_footer { |
| display: none; |
| } |
| /* end of floating-menu-related definitions. */ |
| |
| /* This places captions of the code snippets behind the snippet. |
| XXX This is a hack as currently LateXML gets confused when |
| position of a caption (as specified by lstset in tex) is |
| bottom. Therefore, we keep tex definition on top and |
| fix it via CSS. |
| |
| XXX I am not sure that changing display to 'table' is a good |
| idea, but I don't know any other way on how to move the |
| caption down. */ |
| figure { |
| display: table; |
| width: 95%; |
| } |
| figcaption { |
| display: table-caption; |
| caption-side: bottom; |
| } |
| |
| /* We don't need paragraph indentation in html. */ |
| .ltx_para > .ltx_p:first-child { text-indent:0em; } |
| |
| |
| /* This minheight needs to be adjusted to the bootstrap |
| minimum height so that the line numbers in listings |
| behave correctly. */ |
| .ltx_listingline { |
| white-space:nowrap; |
| min-height:1.42857143em; |
| } |
| |
| /* Get rid of italic inside the theorem environment. |
| This has an effect on the way excersises look. */ |
| .ltx_theorem_theorem .ltx_font_italic { |
| font-style: normal; |
| } |
| |
| .ltx_theorem_theorem { |
| border-left: 7px solid #ccc; |
| /*padding: 2px 4px;*/ |
| padding-left: 10px; |
| margin-left: 3em; |
| } |
| |
| .ltx_theorem_theorem h6 { |
| /*color: #333;*/ |
| font-weight: normal; |
| } |
| |
| .ltx_listing { |
| /* A combination of pre and code. */ |
| font-family: Menlo, Monaco, Consolas, "Courier New", monospace; |
| padding: 2px 4px; |
| font-size: 90%; |
| border-radius: 4px; |
| display: block; |
| line-height: 1.42857143; |
| word-break: break-all; |
| word-wrap: break-word; |
| color: #333333; |
| background-color: #f5f5f5; |
| border: 1px solid #cccccc; |
| } |
| |
| .ltx_caption { |
| padding-top: 8px; |
| padding-bottom: 8px; |
| color: #999999; |
| text-align: center; |
| } |
| |
| .ltx_framed_rectangle { |
| text-align: left; |
| border: 1px solid #cccccc; |
| font-size: 90%; |
| border-radius: 4px; |
| padding: 2px 4px; |
| } |
| |
| .ltx_theorem_theorem { |
| font-style: normal important!; |
| } |
| /*.ltx_framed_rectangle { |
| float: left; |
| width: 20em; |
| margin-right: 10px; |
| margin-left: -10em; |
| }*/ |
| |
| </style> |
| |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<link rel="stylesheet" href="LaTeXML.css" type="text/css"> | |
<link rel="stylesheet" href="ltx-report.css" type="text/css"> | |
<link rel="stylesheet" href="ltx-listings.css" type="text/css"> | |
<link rel="stylesheet" href="http://www.sac-home.org/dokuwiki/lib/tpl/bootstrap3/assets/bootstrap/journal/bootstrap.min.css" type="text/css"> | |
<link rel="stylesheet" href="tutorial.css" type="text/css"> | |
</head> | </head> |
<body> | <body> |
<div class="ltx_page_main"> | <div class='ltx_page_main'> |
<div class="ltx_page_content"> | <div class='ltx_page_content'> |
<article class="ltx_document"> | <article class='ltx_document'> |
<div class="ltx_titlepage"> | <div class='ltx_titlepage'> |
<p class="ltx_p"><span class="ltx_text" style="font-size:298%;">SINGLE ASSIGNMENT C | <p class='ltx_p'><span class='ltx_text' style='font-size:298%;'>SINGLE ASSIGNMENT C |
<br class="ltx_break"></span> | <br class='ltx_break'></span> |
<span class="ltx_text" style="font-size:298%;">TUTORIAL | <span class='ltx_text' style='font-size:298%;'>TUTORIAL |
<br class="ltx_break"></span> | <br class='ltx_break'></span> |
<span class="ltx_text" style="font-size:144%;">VERSION 1.2</span></p> | <span class='ltx_text' style='font-size:144%;'>VERSION 1.2</span></p> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps" style="font-size:144%;">Sven-Bodo Scholz<span class="ltx_text ltx_font_upright"> </span>Stephan Herhut | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps' style='font-size:144%;'>Sven-Bodo Scholz<span class='ltx_text ltx_font_upright'> </span>Stephan Herhut |
<br class="ltx_break">Frank Penczek<span class="ltx_text ltx_font_upright"> </span>Clemens Grelck | <br class='ltx_break'>Frank Penczek<span class='ltx_text ltx_font_upright'> </span>Clemens Grelck |
<br class="ltx_break">Artem Shinkarov | <br class='ltx_break'>Artem Shinkarov |
<br class="ltx_break"></span></p> | <br class='ltx_break'></span></p> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps" style="font-size:120%;">November 30, 2016</span></p> | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps' style='font-size:120%;'>November 30, 2016</span></p> |
</div> | </div> |
<div class="ltx_TOC ltx_role_contents"> | <div class='ltx_TOC ltx_role_contents'> |
<h6>Contents:</h6> | <h6>Contents:</h6> |
<ul class="ltx_toclist"> | <ul class='ltx_toclist'> |
<li class="ltx_tocentry ltx_tocentry_part"> | <li class='ltx_tocentry ltx_tocentry_part'> |
<a href="#Pt1" title="Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">I </span>Trails Covering the Basics of SaC</span></a> | <a href='#Pt1' title='Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>I </span>Trails Covering the Basics of SaC</span></a> |
<ul class="ltx_toclist ltx_toclist_part"> | <ul class='ltx_toclist ltx_toclist_part'> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch1" title="Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">1 </span>Running the first program</span></a> | <a href='#Ch1' title='Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>1 </span>Running the first program</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch1.S1" title="1.1 A Checklist ‣ Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">1.1 </span>A Checklist</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch1.S1' title='1.1 A Checklist ‣ Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>1.1 </span>A Checklist</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch1.S2" title="1.2 Create your first SaC Source File ‣ Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">1.2 </span>Create your first <span class="ltx_text ltx_font_smallcaps">SaC</span> Source File</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch1.S2' title='1.2 Create your first SaC Source File ‣ Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>1.2 </span>Create your first <span class='ltx_text ltx_font_smallcaps'>SaC</span> Source File</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch1.S3" title="1.3 Compile the Source File and Run the Program ‣ Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">1.3 </span>Compile the Source File and Run the Program</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch1.S3' title='1.3 Compile the Source File and Run the Program ‣ Chapter 1 Running the first program ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>1.3 </span>Compile the Source File and Run the Program</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch2" title="Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2 </span>Array Programming Basics</span></a> | <a href='#Ch2' title='Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2 </span>Array Programming Basics</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch2.S1" title="2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.1 </span>Lesson 1: Arrays as Data</span></a> | <a href='#Ch2.S1' title='2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.1 </span>Lesson 1: Arrays as Data</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch2.S1.SS1" title="2.1.1 Defining Arrays ‣ 2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.1.1 </span>Defining Arrays</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch2.S1.SS1' title='2.1.1 Defining Arrays ‣ 2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.1.1 </span>Defining Arrays</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch2.S1.SS2" title="2.1.2 Arrays and Variables ‣ 2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.1.2 </span>Arrays and Variables</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch2.S1.SS2' title='2.1.2 Arrays and Variables ‣ 2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.1.2 </span>Arrays and Variables</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch2.S2" title="2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.2 </span>Lesson 2: Shape-Invariant Programming</span></a> | <a href='#Ch2.S2' title='2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.2 </span>Lesson 2: Shape-Invariant Programming</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch2.S2.SS1" title="2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.2.1 </span>Standard Array Operations</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch2.S2.SS1' title='2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.2.1 </span>Standard Array Operations</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch2.S2.SS2" title="2.2.2 Axis Control Notation ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.2.2 </span>Axis Control Notation</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch2.S2.SS2' title='2.2.2 Axis Control Notation ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.2.2 </span>Axis Control Notation</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch2.S2.SS3" title="2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">2.2.3 </span>Putting it all Together</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch2.S2.SS3' title='2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>2.2.3 </span>Putting it all Together</span></a></li> |
</ul> | </ul> |
</li> | </li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch3" title="Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3 </span>Basic Program Structure</span></a> | <a href='#Ch3' title='Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3 </span>Basic Program Structure</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch3.S1" title="3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.1 </span>Lesson 3: Functions and their Types</span></a> | <a href='#Ch3.S1' title='3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.1 </span>Lesson 3: Functions and their Types</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S1.SS1" title="3.1.1 Function Definitions ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.1.1 </span>Function Definitions</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S1.SS1' title='3.1.1 Function Definitions ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.1.1 </span>Function Definitions</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S1.SS2" title="3.1.2 Built-in Types ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.1.2 </span>Built-in Types</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S1.SS2' title='3.1.2 Built-in Types ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.1.2 </span>Built-in Types</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S1.SS3" title="3.1.3 Subtyping ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.1.3 </span>Subtyping</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S1.SS3' title='3.1.3 Subtyping ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.1.3 </span>Subtyping</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S1.SS4" title="3.1.4 Function Overloading ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.1.4 </span>Function Overloading</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S1.SS4' title='3.1.4 Function Overloading ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.1.4 </span>Function Overloading</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch3.S2" title="3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.2 </span>Lesson 4: Function Bodies</span></a> | <a href='#Ch3.S2' title='3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.2 </span>Lesson 4: Function Bodies</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S2.SS1" title="3.2.1 Variable Declarations ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.2.1 </span>Variable Declarations</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S2.SS1' title='3.2.1 Variable Declarations ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.2.1 </span>Variable Declarations</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S2.SS2" title="3.2.2 Assignments ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.2.2 </span>Assignments</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S2.SS2' title='3.2.2 Assignments ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.2.2 </span>Assignments</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S2.SS3" title="3.2.3 Conditionals ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.2.3 </span>Conditionals</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S2.SS3' title='3.2.3 Conditionals ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.2.3 </span>Conditionals</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S2.SS4" title="3.2.4 Loops ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.2.4 </span>Loops</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S2.SS4' title='3.2.4 Loops ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.2.4 </span>Loops</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S2.SS5" title="3.2.5 Explicit Control Flow Manipulation ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.2.5 </span>Explicit Control Flow Manipulation</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S2.SS5' title='3.2.5 Explicit Control Flow Manipulation ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.2.5 </span>Explicit Control Flow Manipulation</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch3.S3" title="3.3 Lesson 5: Advanced Topics ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.3 </span>Lesson 5: Advanced Topics</span></a> | <a href='#Ch3.S3' title='3.3 Lesson 5: Advanced Topics ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.3 </span>Lesson 5: Advanced Topics</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S3.SS1" title="3.3.1 User-defined Types ‣ 3.3 Lesson 5: Advanced Topics ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.3.1 </span>User-defined Types</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S3.SS1' title='3.3.1 User-defined Types ‣ 3.3 Lesson 5: Advanced Topics ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.3.1 </span>User-defined Types</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch3.S3.SS2" title="3.3.2 Type Conversions ‣ 3.3 Lesson 5: Advanced Topics ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">3.3.2 </span>Type Conversions</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch3.S3.SS2' title='3.3.2 Type Conversions ‣ 3.3 Lesson 5: Advanced Topics ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>3.3.2 </span>Type Conversions</span></a></li> |
</ul> | </ul> |
</li> | </li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch4" title="Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">4 </span>With-Loops</span></a> | <a href='#Ch4' title='Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>4 </span>With-Loops</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch4.S1" title="4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">4.1 </span>Lesson 6: with-loop Basics</span></a> | <a href='#Ch4.S1' title='4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>4.1 </span>Lesson 6: with-loop Basics</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch4.S1.SS1" title="4.1.1 Basic Components ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">4.1.1 </span>Basic Components</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch4.S1.SS1' title='4.1.1 Basic Components ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>4.1.1 </span>Basic Components</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch4.S1.SS2" title="4.1.2 Generator Ranges ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">4.1.2 </span>Generator Ranges</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch4.S1.SS2' title='4.1.2 Generator Ranges ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>4.1.2 </span>Generator Ranges</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch4.S1.SS3" title="4.1.3 Generator Expressions ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">4.1.3 </span>Generator Expressions</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch4.S1.SS3' title='4.1.3 Generator Expressions ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>4.1.3 </span>Generator Expressions</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch4.S1.SS4" title="4.1.4 Reductions and further with-loop Operations ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">4.1.4 </span>Reductions and further with-loop Operations</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch4.S1.SS4' title='4.1.4 Reductions and further with-loop Operations ‣ 4.1 Lesson 6: with-loop Basics ‣ Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>4.1.4 </span>Reductions and further with-loop Operations</span></a></li> |
</ul> | </ul> |
</li> | </li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch5" title="Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">5 </span>Working with Modules</span></a> | <a href='#Ch5' title='Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>5 </span>Working with Modules</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch5.S1" title="5.1 Name Spaces ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">5.1 </span>Name Spaces</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch5.S1' title='5.1 Name Spaces ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>5.1 </span>Name Spaces</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch5.S2" title="5.2 Use Statements ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">5.2 </span>Use Statements</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch5.S2' title='5.2 Use Statements ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>5.2 </span>Use Statements</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch5.S3" title="5.3 Import statement ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">5.3 </span>Import statement</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch5.S3' title='5.3 Import statement ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>5.3 </span>Import statement</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch5.S4" title="5.4 Putting It Together ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">5.4 </span>Putting It Together</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch5.S4' title='5.4 Putting It Together ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>5.4 </span>Putting It Together</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch5.S5" title="5.5 Implementing Modules ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">5.5 </span>Implementing Modules</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch5.S5' title='5.5 Implementing Modules ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>5.5 </span>Implementing Modules</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch6" title="Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">6 </span>Case Studies</span></a> | <a href='#Ch6' title='Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>6 </span>Case Studies</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch6.S1" title="6.1 Lesson 7: Image Processing ‣ Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">6.1 </span>Lesson 7: Image Processing</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch6.S1' title='6.1 Lesson 7: Image Processing ‣ Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>6.1 </span>Lesson 7: Image Processing</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch6.S2" title="6.2 Lesson 8: Computing Mandelbrot Images ‣ Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">6.2 </span>Lesson 8: Computing Mandelbrot Images</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch6.S2' title='6.2 Lesson 8: Computing Mandelbrot Images ‣ Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>6.2 </span>Lesson 8: Computing Mandelbrot Images</span></a></li> |
</ul> | </ul> |
</li> | </li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_part"> | <li class='ltx_tocentry ltx_tocentry_part'> |
<a href="#Pt2" title="Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">II </span>Trails Covering More Advanced Features of SaC</span></a> | <a href='#Pt2' title='Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>II </span>Trails Covering More Advanced Features of SaC</span></a> |
<ul class="ltx_toclist ltx_toclist_part"> | <ul class='ltx_toclist ltx_toclist_part'> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch7" title="Chapter 7 Treasures in the Standard Library ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">7 </span>Treasures in the Standard Library</span></a> | <a href='#Ch7' title='Chapter 7 Treasures in the Standard Library ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>7 </span>Treasures in the Standard Library</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch7.S1" title="7.1 Lesson: Benchmarking SaC Programs ‣ Chapter 7 Treasures in the Standard Library ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">7.1 </span>Lesson: Benchmarking <span class="ltx_text ltx_font_smallcaps">SaC</span> Programs</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch7.S1' title='7.1 Lesson: Benchmarking SaC Programs ‣ Chapter 7 Treasures in the Standard Library ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>7.1 </span>Lesson: Benchmarking <span class='ltx_text ltx_font_smallcaps'>SaC</span> Programs</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"><a href="#Ch8" title="Chapter 8 User Defined Types ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">8 </span>User Defined Types</span></a></li> | <li class='ltx_tocentry ltx_tocentry_chapter'><a href='#Ch8' title='Chapter 8 User Defined Types ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>8 </span>User Defined Types</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch9" title="Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">9 </span>Dealing with I/O and State in General</span></a> | <a href='#Ch9' title='Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>9 </span>Dealing with I/O and State in General</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch9.S1" title="9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">9.1 </span>Lesson: States and Objects — the basics</span></a> | <a href='#Ch9.S1' title='9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>9.1 </span>Lesson: States and Objects — the basics</span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch9.S1.SS1" title="9.1.1 Extending Classes ‣ 9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">9.1.1 </span>Extending Classes</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch9.S1.SS1' title='9.1.1 Extending Classes ‣ 9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>9.1.1 </span>Extending Classes</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch9.S1.SS2" title="9.1.2 States using Classes ‣ 9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">9.1.2 </span>States using Classes</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch9.S1.SS2' title='9.1.2 States using Classes ‣ 9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>9.1.2 </span>States using Classes</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch9.S1.SS3" title="9.1.3 Global Objects ‣ 9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">9.1.3 </span>Global Objects</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch9.S1.SS3' title='9.1.3 Global Objects ‣ 9.1 Lesson: States and Objects — the basics ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>9.1.3 </span>Global Objects</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch9.S2" title="9.2 Lesson: Nondeterminism through Shared State in Wihth-Loops ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">9.2 </span>Lesson: Nondeterminism through Shared State in Wihth-Loops</span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch9.S2' title='9.2 Lesson: Nondeterminism through Shared State in Wihth-Loops ‣ Chapter 9 Dealing with I/O and State in General ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>9.2 </span>Lesson: Nondeterminism through Shared State in Wihth-Loops</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_chapter"> | <li class='ltx_tocentry ltx_tocentry_chapter'> |
<a href="#Ch10" title="Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10 </span>Interfacing with Other Languages</span></a> | <a href='#Ch10' title='Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10 </span>Interfacing with Other Languages</span></a> |
<ul class="ltx_toclist ltx_toclist_chapter"> | <ul class='ltx_toclist ltx_toclist_chapter'> |
<li class="ltx_tocentry ltx_tocentry_section"> | <li class='ltx_tocentry ltx_tocentry_section'> |
<a href="#Ch10.S1" title="10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.1 </span>Lesson: Calling <span class="ltx_text ltx_font_smallcaps">C</span> from <span class="ltx_text ltx_font_smallcaps">SaC</span></span></a> | <a href='#Ch10.S1' title='10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.1 </span>Lesson: Calling <span class='ltx_text ltx_font_smallcaps'>C</span> from <span class='ltx_text ltx_font_smallcaps'>SaC</span></span></a> |
<ul class="ltx_toclist ltx_toclist_section"> | <ul class='ltx_toclist ltx_toclist_section'> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch10.S1.SS1" title="10.1.1 Using C in the Small ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.1.1 </span>Using C in Small</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch10.S1.SS1' title='10.1.1 Using C in the Small ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.1.1 </span>Using C in Small</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch10.S1.SS2" title="10.1.2 Stateful C functions ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.1.2 </span>Stateful <span class="ltx_text ltx_font_smallcaps">C</span> functions</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch10.S1.SS2' title='10.1.2 Stateful C functions ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.1.2 </span>Stateful <span class='ltx_text ltx_font_smallcaps'>C</span> functions</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch10.S1.SS3" title="10.1.3 Using pragma directives ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.1.3 </span>Using pragma directives</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch10.S1.SS3' title='10.1.3 Using pragma directives ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.1.3 </span>Using pragma directives</span></a></li> |
<li class="ltx_tocentry ltx_tocentry_subsection"><a href="#Ch10.S1.SS4" title="10.1.4 Example TermFile ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.1.4 </span>Example TermFile</span></a></li> | <li class='ltx_tocentry ltx_tocentry_subsection'><a href='#Ch10.S1.SS4' title='10.1.4 Example TermFile ‣ 10.1 Lesson: Calling C from SaC ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.1.4 </span>Example TermFile</span></a></li> |
</ul> | </ul> |
</li> | </li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch10.S2" title="10.2 Lesson: Using SaC libraries from C ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.2 </span>Lesson: Using <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from <span class="ltx_text ltx_font_smallcaps">C</span></span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch10.S2' title='10.2 Lesson: Using SaC libraries from C ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.2 </span>Lesson: Using <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from <span class='ltx_text ltx_font_smallcaps'>C</span></span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch10.S3" title="10.3 Lesson: Using SaC libraries from C++ ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.3 </span>Lesson: Using <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from <span class="ltx_text ltx_font_smallcaps">C++</span></span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch10.S3' title='10.3 Lesson: Using SaC libraries from C++ ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.3 </span>Lesson: Using <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from <span class='ltx_text ltx_font_smallcaps'>C++</span></span></a></li> |
<li class="ltx_tocentry ltx_tocentry_section"><a href="#Ch10.S4" title="10.4 Lesson: Using SaC libraries from Fortran ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_title"><span class="ltx_tag ltx_tag_ref">10.4 </span>Lesson: Using <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from <span class="ltx_text ltx_font_smallcaps">Fortran</span></span></a></li> | <li class='ltx_tocentry ltx_tocentry_section'><a href='#Ch10.S4' title='10.4 Lesson: Using SaC libraries from Fortran ‣ Chapter 10 Interfacing with Other Languages ‣ Part II Trails Covering More Advanced Features of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_title'><span class='ltx_tag ltx_tag_ref'>10.4 </span>Lesson: Using <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from <span class='ltx_text ltx_font_smallcaps'>Fortran</span></span></a></li> |
</ul> | </ul> |
</li> | </li> |
</ul> | </ul> |
</div> | </div> |
<section id="Pt1" class="ltx_part"> | <section id='Pt1' class='ltx_part'> |
<h2 class="ltx_title ltx_title_part"> | <h2 class='ltx_title ltx_title_part'> |
<span class="ltx_tag ltx_tag_part">Part I </span>Trails Covering the Basics of <span class="ltx_text ltx_font_smallcaps">SaC</span> | <span class='ltx_tag ltx_tag_part'>Part I </span>Trails Covering the Basics of <span class='ltx_text ltx_font_smallcaps'>SaC</span> |
</h2> | </h2> |
| |
<section id="Ch1" class="ltx_chapter"> | <section id='Ch1' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 1 </span>Running the first program</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 1 </span>Running the first program</h3> |
| |
<div id="Ch1.p1" class="ltx_para"> | <div id='Ch1.p1' class='ltx_para'> |
<p class="ltx_p">The following instructions will help you write your first <span class="ltx_text ltx_font_smallcaps">SaC</span> program.</p> | <p class='ltx_p'>The following instructions will help you write your first <span class='ltx_text ltx_font_smallcaps'>SaC</span> program.</p> |
</div> | </div> |
<section id="Ch1.S1" class="ltx_section"> | <section id='Ch1.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">1.1 </span>A Checklist</h4> | <span class='ltx_tag ltx_tag_section'>1.1 </span>A Checklist</h4> |
| |
<div id="Ch1.S1.p1" class="ltx_para"> | <div id='Ch1.S1.p1' class='ltx_para'> |
<p class="ltx_p">To successfully write and run your first <span class="ltx_text ltx_font_smallcaps">SaC</span> program, you will need:</p> | <p class='ltx_p'>To successfully write and run your first <span class='ltx_text ltx_font_smallcaps'>SaC</span> program, you will need:</p> |
<ul id="Ch1.I1" class="ltx_itemize"> | <ul id='Ch1.I1' class='ltx_itemize'> |
<li id="Ch1.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch1.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch1.I1.i1.p1" class="ltx_para"> | <div id='Ch1.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p">An <span class="ltx_text ltx_font_bold">ANSI C compiler</span>, such as <span class="ltx_text ltx_font_typewriter">gcc</span>. Though not needed directly, | <p class='ltx_p'>An <span class='ltx_text ltx_font_bold'>ANSI C compiler</span>, such as <span class='ltx_text ltx_font_typewriter'>gcc</span>. Though not needed directly, |
the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler relies on it.</p> | the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler relies on it.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch1.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch1.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch1.I1.i2.p1" class="ltx_para"> | <div id='Ch1.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p">The <span class="ltx_text ltx_font_bold">SaC compiler</span> <span class="ltx_text ltx_font_typewriter">sac2c</span>. It can be downloaded at | <p class='ltx_p'>The <span class='ltx_text ltx_font_bold'>SaC compiler</span> <span class='ltx_text ltx_font_typewriter'>sac2c</span>. It can be downloaded at |
<a href="http://www.sac-home.org" title="" class="ltx_ref ltx_url ltx_font_typewriter">http://www.sac-home.org</a>; see instructions in the Download | <a href='http://www.sac-home.org' title='' class='ltx_ref ltx_url ltx_font_typewriter'>http://www.sac-home.org</a>; see instructions in the Download |
section.</p> | section.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch1.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch1.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch1.I1.i3.p1" class="ltx_para"> | <div id='Ch1.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p">The <span class="ltx_text ltx_font_bold">SaC standard library</span> can be downloaded from GitHub | <p class='ltx_p'>The <span class='ltx_text ltx_font_bold'>SaC standard library</span> can be downloaded from GitHub |
<a href="http://www.github.com/SacBase/stdlib-core" title="" class="ltx_ref ltx_url ltx_font_typewriter">http://www.github.com/SacBase/stdlib-core</a>. The process | <a href='http://www.github.com/SacBase/stdlib-core' title='' class='ltx_ref ltx_url ltx_font_typewriter'>http://www.github.com/SacBase/stdlib-core</a>. The process |
of installation is described in README.md file of the stdlib | of installation is described in README.md file of the stdlib |
repository.</p> | repository.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch1.I1.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch1.I1.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch1.I1.i4.p1" class="ltx_para"> | <div id='Ch1.I1.i4.p1' class='ltx_para'> |
<p class="ltx_p">Your favorite <span class="ltx_text ltx_font_bold">text editor</span>, such as <span class="ltx_text ltx_font_typewriter">vi</span> or <span class="ltx_text ltx_font_typewriter">emacs</span>.</p> | <p class='ltx_p'>Your favorite <span class='ltx_text ltx_font_bold'>text editor</span>, such as <span class='ltx_text ltx_font_typewriter'>vi</span> or <span class='ltx_text ltx_font_typewriter'>emacs</span>.</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</section> | </section> |
<section id="Ch1.S2" class="ltx_section"> | <section id='Ch1.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">1.2 </span>Create your first <span class="ltx_text ltx_font_smallcaps">SaC</span> Source File</h4> | <span class='ltx_tag ltx_tag_section'>1.2 </span>Create your first <span class='ltx_text ltx_font_smallcaps'>SaC</span> Source File</h4> |
| |
<div id="Ch1.S2.p1" class="ltx_para"> | <div id='Ch1.S2.p1' class='ltx_para'> |
<p class="ltx_p">Start your editor and type the following program:</p> | <p class='ltx_p'>Start your editor and type the following program:</p> |
</div> | </div> |
<figure id="LST1" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST1' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 1: </span>Hello World</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 1: </span>Hello World</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnRmKCJI%0AZWxsbyBXb3JsZCFcbiIpOwogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnRmKCJI%0AZWxsbyBXb3JsZCFcbiIpOwogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hello<span class="ltx_text ltx_lst_space"> </span>World!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hello<span class='ltx_text ltx_lst_space'> </span>World!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch1.S2.p2" class="ltx_para"> | <div id='Ch1.S2.p2' class='ltx_para'> |
<p class="ltx_p">As you can see, it has a strong resemblance to C. The major difference | <p class='ltx_p'>As you can see, it has a strong resemblance to C. The major difference |
are the module use declarations at the beginning of the program. | are the module use declarations at the beginning of the program. |
For now, it suffices to keep in mind, that these two use declarations for most | For now, it suffices to keep in mind, that these two use declarations for most |
experiments will do the job.</p> | experiments will do the job.</p> |
</div> | </div> |
<div id="Ch1.S2.p3" class="ltx_para"> | <div id='Ch1.S2.p3' class='ltx_para'> |
<p class="ltx_p">In order to proceed, save this program into a file named <span class="ltx_text ltx_font_typewriter">world.sac</span>.</p> | <p class='ltx_p'>In order to proceed, save this program into a file named <span class='ltx_text ltx_font_typewriter'>world.sac</span>.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch1.S3" class="ltx_section"> | <section id='Ch1.S3' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">1.3 </span>Compile the Source File and Run the Program</h4> | <span class='ltx_tag ltx_tag_section'>1.3 </span>Compile the Source File and Run the Program</h4> |
| |
<div id="Ch1.S3.p1" class="ltx_para"> | <div id='Ch1.S3.p1' class='ltx_para'> |
<p class="ltx_p">The <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler invocation is similar to the standard invocation of | <p class='ltx_p'>The <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler invocation is similar to the standard invocation of |
<span class="ltx_text ltx_font_smallcaps">C</span> compilers. | <span class='ltx_text ltx_font_smallcaps'>C</span> compilers. |
A typical shell session for compiling <span class="ltx_text ltx_font_typewriter">world.sac</span> could be:</p> | A typical shell session for compiling <span class='ltx_text ltx_font_typewriter'>world.sac</span> could be:</p> |
</div> | </div> |
<figure id="LST2" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST2' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 2: </span>Typical shell session</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 2: </span>Typical shell session</figcaption> |
<div class="ltx_listing ltx_lst_language_bash ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_bash ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,JCBjZCAvaG9tZS9zYnMvc2FjLwokIGxzCndvcmxkLnNhYwokIHNhYzJjICB3b3JsZC5zYWMKJCBs%0AcwphLm91dCAgICAgIGEub3V0LmMgICAgd29ybGQuc2FjCiQgYS5vdXQKSGVsbG8gV29ybGQh%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,JCBjZCAvaG9tZS9zYnMvc2FjLwokIGxzCndvcmxkLnNhYwokIHNhYzJjICB3b3JsZC5zYWMKJCBs%0AcwphLm91dCAgICAgIGEub3V0LmMgICAgd29ybGQuc2FjCiQgYS5vdXQKSGVsbG8gV29ybGQh%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">$</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">cd</span><span class="ltx_text ltx_lst_space"> </span>/<span class="ltx_text ltx_lst_identifier">home</span>/<span class="ltx_text ltx_lst_identifier">sbs</span>/<span class="ltx_text ltx_lst_identifier">sac</span>/ | <span class='ltx_text ltx_lst_identifier'>$</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>cd</span><span class='ltx_text ltx_lst_space'> </span>/<span class='ltx_text ltx_lst_identifier'>home</span>/<span class='ltx_text ltx_lst_identifier'>sbs</span>/<span class='ltx_text ltx_lst_identifier'>sac</span>/ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">$</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ls</span> | <span class='ltx_text ltx_lst_identifier'>$</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ls</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">world</span>.<span class="ltx_text ltx_lst_identifier">sac</span> | <span class='ltx_text ltx_lst_identifier'>world</span>.<span class='ltx_text ltx_lst_identifier'>sac</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">$</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sac2c</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">world</span>.<span class="ltx_text ltx_lst_identifier">sac</span> | <span class='ltx_text ltx_lst_identifier'>$</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sac2c</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>world</span>.<span class='ltx_text ltx_lst_identifier'>sac</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">$</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ls</span> | <span class='ltx_text ltx_lst_identifier'>$</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ls</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">a</span>.<span class="ltx_text ltx_lst_identifier">out</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>.<span class="ltx_text ltx_lst_identifier">out</span>.<span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">world</span>.<span class="ltx_text ltx_lst_identifier">sac</span> | <span class='ltx_text ltx_lst_identifier'>a</span>.<span class='ltx_text ltx_lst_identifier'>out</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>.<span class='ltx_text ltx_lst_identifier'>out</span>.<span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>world</span>.<span class='ltx_text ltx_lst_identifier'>sac</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">$</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>.<span class="ltx_text ltx_lst_identifier">out</span> | <span class='ltx_text ltx_lst_identifier'>$</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>.<span class='ltx_text ltx_lst_identifier'>out</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_text ltx_lst_identifier">Hello</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">World</span>! | <span class='ltx_text ltx_lst_identifier'>Hello</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>World</span>! |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch1.S3.p2" class="ltx_para"> | <div id='Ch1.S3.p2' class='ltx_para'> |
<p class="ltx_p">The compilation process consists of two steps. | <p class='ltx_p'>The compilation process consists of two steps. |
First, the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler generates a <span class="ltx_text ltx_font_smallcaps">C</span> file, which then is compiled | First, the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler generates a <span class='ltx_text ltx_font_smallcaps'>C</span> file, which then is compiled |
into target code by utilizing the system’s <span class="ltx_text ltx_font_smallcaps">C</span> compiler. | into target code by utilizing the system’s <span class='ltx_text ltx_font_smallcaps'>C</span> compiler. |
If no target file name is specified, the intermediate <span class="ltx_text ltx_font_smallcaps">C</span> file is named | If no target file name is specified, the intermediate <span class='ltx_text ltx_font_smallcaps'>C</span> file is named |
<span class="ltx_text ltx_font_typewriter">a.out.c</span> so that the subsequent invocation of the <span class="ltx_text ltx_font_smallcaps">C</span> compiler | <span class='ltx_text ltx_font_typewriter'>a.out.c</span> so that the subsequent invocation of the <span class='ltx_text ltx_font_smallcaps'>C</span> compiler |
creates an executable named <span class="ltx_text ltx_font_typewriter">a.out</span>.</p> | creates an executable named <span class='ltx_text ltx_font_typewriter'>a.out</span>.</p> |
</div> | </div> |
<div id="Ch1.S3.p3" class="ltx_para"> | <div id='Ch1.S3.p3' class='ltx_para'> |
<p class="ltx_p">In the same way the default target name <span class="ltx_text ltx_font_typewriter">a.out</span> is borrowed from | <p class='ltx_p'>In the same way the default target name <span class='ltx_text ltx_font_typewriter'>a.out</span> is borrowed from |
standard <span class="ltx_text ltx_font_smallcaps">C</span> compilers, the <span class="ltx_text ltx_font_typewriter">-o</span> option for specifying target names | standard <span class='ltx_text ltx_font_smallcaps'>C</span> compilers, the <span class='ltx_text ltx_font_typewriter'>-o</span> option for specifying target names |
is adopted as well. | is adopted as well. |
For example, <span class="ltx_text ltx_font_typewriter">sac2c -o world world.sac</span> results | For example, <span class='ltx_text ltx_font_typewriter'>sac2c -o world world.sac</span> results |
in files <span class="ltx_text ltx_font_typewriter">world.c</span> and <span class="ltx_text ltx_font_typewriter">world</span>.</p> | in files <span class='ltx_text ltx_font_typewriter'>world.c</span> and <span class='ltx_text ltx_font_typewriter'>world</span>.</p> |
</div> | </div> |
<div id="Ch1.S3.p4" class="ltx_para"> | <div id='Ch1.S3.p4' class='ltx_para'> |
<p class="ltx_p">Note here, that the compiled program, depending on the operating system, | <p class='ltx_p'>Note here, that the compiled program, depending on the operating system, |
is linked either statically or dynamically. | is linked either statically or dynamically. |
However, it does not require any further linking or interpretation.</p> | However, it does not require any further linking or interpretation.</p> |
</section> | </section> |
</section> | </section> |
<section id="Ch2" class="ltx_chapter"> | <section id='Ch2' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 2 </span>Array Programming Basics</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 2 </span>Array Programming Basics</h3> |
| |
<div id="Ch2.p1" class="ltx_para"> | <div id='Ch2.p1' class='ltx_para'> |
<p class="ltx_p">This trail gives an introduction to the basic concepts of array programming | <p class='ltx_p'>This trail gives an introduction to the basic concepts of array programming |
in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
It consists of two lessons: <span class="ltx_text ltx_font_italic">Arrays as Data</span> and <span class="ltx_text ltx_font_italic">Shape-Invariant Programming</span>. | It consists of two lessons: <span class='ltx_text ltx_font_italic'>Arrays as Data</span> and <span class='ltx_text ltx_font_italic'>Shape-Invariant Programming</span>. |
In the former lesson, the major differences between arrays in <span class="ltx_text ltx_font_smallcaps">SaC</span> and arrays | In the former lesson, the major differences between arrays in <span class='ltx_text ltx_font_smallcaps'>SaC</span> and arrays |
in more mainstream languages are explained. | in more mainstream languages are explained. |
The lesson <span class="ltx_text ltx_font_italic">Shape-Invariant Programming</span> gives an introduction into the most | The lesson <span class='ltx_text ltx_font_italic'>Shape-Invariant Programming</span> gives an introduction into the most |
important array operations available in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | important array operations available in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
Based on these operations, several small examples demonstrate how more complex | Based on these operations, several small examples demonstrate how more complex |
array operations can be constructed by simply combining the basic ones.</p> | array operations can be constructed by simply combining the basic ones.</p> |
</div> | </div> |
<section id="Ch2.S1" class="ltx_section"> | <section id='Ch2.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">2.1 </span>Lesson 1: Arrays as Data</h4> | <span class='ltx_tag ltx_tag_section'>2.1 </span>Lesson 1: Arrays as Data</h4> |
| |
<div id="Ch2.S1.p1" class="ltx_para"> | <div id='Ch2.S1.p1' class='ltx_para'> |
<p class="ltx_p">In <span class="ltx_text ltx_font_smallcaps">SaC</span>, arrays are the only data structures available. Even scalar values | <p class='ltx_p'>In <span class='ltx_text ltx_font_smallcaps'>SaC</span>, arrays are the only data structures available. Even scalar values |
are considered arrays. | are considered arrays. |
Each array is represented by two vectors, a so-called <em class="ltx_emph">shape vector</em> | Each array is represented by two vectors, a so-called <em class='ltx_emph'>shape vector</em> |
and a <em class="ltx_emph">data vector</em>. | and a <em class='ltx_emph'>data vector</em>. |
An array’s shape vector defines its <em class="ltx_emph">shape</em>, i.e. its extent within each axis, | An array’s shape vector defines its <em class='ltx_emph'>shape</em>, i.e. its extent within each axis, |
and its <em class="ltx_emph">dimensionality</em> (or <em class="ltx_emph">rank</em>), which is given implicitly by the shape vector’s | and its <em class='ltx_emph'>dimensionality</em> (or <em class='ltx_emph'>rank</em>), which is given implicitly by the shape vector’s |
length.</p> | length.</p> |
</div> | </div> |
<div id="Ch2.S1.p2" class="ltx_para"> | <div id='Ch2.S1.p2' class='ltx_para'> |
<p class="ltx_p">The section on <em class="ltx_emph">Defining Arrays</em> explains how arrays of various dimensionality | <p class='ltx_p'>The section on <em class='ltx_emph'>Defining Arrays</em> explains how arrays of various dimensionality |
can be defined in <span class="ltx_text ltx_font_smallcaps">SaC</span>, and how they can be generated via nesting. | can be defined in <span class='ltx_text ltx_font_smallcaps'>SaC</span>, and how they can be generated via nesting. |
Furthermore, some elementary notation such as <em class="ltx_emph">scalars</em>, <em class="ltx_emph">vectors</em>, and | Furthermore, some elementary notation such as <em class='ltx_emph'>scalars</em>, <em class='ltx_emph'>vectors</em>, and |
<em class="ltx_emph">matrices</em> is defined.</p> | <em class='ltx_emph'>matrices</em> is defined.</p> |
</div> | </div> |
<div id="Ch2.S1.p3" class="ltx_para"> | <div id='Ch2.S1.p3' class='ltx_para'> |
<p class="ltx_p">The section on <em class="ltx_emph">Arrays and Variables</em> discusses the purely functional | <p class='ltx_p'>The section on <em class='ltx_emph'>Arrays and Variables</em> discusses the purely functional |
array model used in <span class="ltx_text ltx_font_smallcaps">SaC</span>.</p> | array model used in <span class='ltx_text ltx_font_smallcaps'>SaC</span>.</p> |
</div> | </div> |
<section id="Ch2.S1.SS1" class="ltx_subsection"> | <section id='Ch2.S1.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">2.1.1 </span>Defining Arrays</h5> | <span class='ltx_tag ltx_tag_subsection'>2.1.1 </span>Defining Arrays</h5> |
| |
<div id="Ch2.S1.SS1.p1" class="ltx_para"> | <div id='Ch2.S1.SS1.p1' class='ltx_para'> |
<p class="ltx_p">In this section, several means for specifying arrays are explained.</p> | <p class='ltx_p'>In this section, several means for specifying arrays are explained.</p> |
</div> | </div> |
<div id="Ch2.S1.SS1.p2" class="ltx_para"> | <div id='Ch2.S1.SS1.p2' class='ltx_para'> |
<p class="ltx_p">In principle, all arrays in <span class="ltx_text ltx_font_smallcaps">SaC</span> can be defined by using the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reshape</span> operation. | <p class='ltx_p'>In principle, all arrays in <span class='ltx_text ltx_font_smallcaps'>SaC</span> can be defined by using the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reshape</span> operation. |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reshape</span> expects two operands, a shape vector and a data vector, both of which | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reshape</span> expects two operands, a shape vector and a data vector, both of which |
are specified as comma separated lists of numbers enclosed in square brackets.</p> | are specified as comma separated lists of numbers enclosed in square brackets.</p> |
</div> | </div> |
<div id="Ch2.S1.SS1.p3" class="ltx_para"> | <div id='Ch2.S1.SS1.p3' class='ltx_para'> |
<p class="ltx_p">To get started, try the following program:</p> | <p class='ltx_p'>To get started, try the following program:</p> |
</div> | </div> |
<figure id="LST3" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST3' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 3: </span>Defining Arrays I</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 3: </span>Defining Arrays I</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnQocmVz%0AaGFwZShbNV0sIFsxLDIsMyw0LDVdKSk7CiAgcHJpbnQocmVzaGFwZShbMywyXSwgWzEsMiwzLDQs%0ANSw2XSkpOwogIHByaW50KHJlc2hhcGUoWzMsMiwxXSwgWzEsMiwzLDQsNSw2XSkpOwogIHJldHVy%0AbiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnQocmVz%0AaGFwZShbNV0sIFsxLDIsMyw0LDVdKSk7CiAgcHJpbnQocmVzaGFwZShbMywyXSwgWzEsMiwzLDQs%0ANSw2XSkpOwogIHByaW50KHJlc2hhcGUoWzMsMiwxXSwgWzEsMiwzLDQsNSw2XSkpOwogIHJldHVy%0AbiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">reshape</span>([5],<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5])); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>reshape</span>([5],<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5])); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">reshape</span>([3,2],<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6])); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>reshape</span>([3,2],<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6])); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">reshape</span>([3,2,1],<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6])); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>reshape</span>([3,2,1],<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6])); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S1.SS1.p4" class="ltx_para"> | <div id='Ch2.S1.SS1.p4' class='ltx_para'> |
<p class="ltx_p">It prints three arrays:</p> | <p class='ltx_p'>It prints three arrays:</p> |
<ul id="Ch2.I1" class="ltx_itemize"> | <ul id='Ch2.I1' class='ltx_itemize'> |
<li id="Ch2.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I1.i1.p1" class="ltx_para"> | <div id='Ch2.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p">an array of dimensionality 1 with 5 elements <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[1,2,3,4,5]</span></p> | <p class='ltx_p'>an array of dimensionality 1 with 5 elements <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[1,2,3,4,5]</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I1.i2.p1" class="ltx_para"> | <div id='Ch2.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p">an array of dimensionality 2 with 3 rows and 2 columns, and</p> | <p class='ltx_p'>an array of dimensionality 2 with 3 rows and 2 columns, and</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I1.i3.p1" class="ltx_para"> | <div id='Ch2.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p">a 3-dimensional array with 3 elements in the leftmost axis, | <p class='ltx_p'>a 3-dimensional array with 3 elements in the leftmost axis, |
2 elements in the middle axis, and one element in the rightmost axis.</p> | 2 elements in the middle axis, and one element in the rightmost axis.</p> |
</div> | </div> |
</ul> | </ul> |
</div> | </div> |
<div id="Ch2.S1.SS1.p5" class="ltx_para"> | <div id='Ch2.S1.SS1.p5' class='ltx_para'> |
<p class="ltx_p">Note here, that the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">print</span> can be applied to arbitrary arrays. | <p class='ltx_p'>Note here, that the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>print</span> can be applied to arbitrary arrays. |
Besides printing its argument’s dimensionality and shape, i.e. its shape vector, | Besides printing its argument’s dimensionality and shape, i.e. its shape vector, |
a more intuitive representation of the array’s data vector is shown. | a more intuitive representation of the array’s data vector is shown. |
Therefore, the 3-dimensional array is printed as a 2-dimensional array of vectors.</p> | Therefore, the 3-dimensional array is printed as a 2-dimensional array of vectors.</p> |
</div> | </div> |
<div id="Thmtheorem1" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem1' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 1. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 1. </h6> |
<div id="Thmtheorem1.p1" class="ltx_para"> | <div id='Thmtheorem1.p1' class='ltx_para'> |
<p class="ltx_p">In all these examples, the product of the shape vector matches the length of | <p class='ltx_p'>In all these examples, the product of the shape vector matches the length of |
the data vector. | the data vector. |
What do you expect to happen, if this condition does not hold?</p> | What do you expect to happen, if this condition does not hold?</p> |
</div> | </div> |
</div> | </div> |
<div id="Ch2.S1.SS1.p6" class="ltx_para ltx_noindent"> | <div id='Ch2.S1.SS1.p6' class='ltx_para ltx_noindent'> |
<p class="ltx_p">For reasons of convenience, we use the following terminology:</p> | <p class='ltx_p'>For reasons of convenience, we use the following terminology:</p> |
<dl id="Ch2.I2" class="ltx_description"> | <dl id='Ch2.I2' class='ltx_description'> |
<dt id="Ch2.I2.ix1" class="ltx_item"><span class="ltx_tag ltx_tag_description">scalar</span></dt> | <dt id='Ch2.I2.ix1' class='ltx_item'><span class='ltx_tag ltx_tag_description'>scalar</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I2.ix1.p1" class="ltx_para"> | <div id='Ch2.I2.ix1.p1' class='ltx_para'> |
<p class="ltx_p">always denotes an array of dimensionality 0,</p> | <p class='ltx_p'>always denotes an array of dimensionality 0,</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I2.ix2" class="ltx_item"><span class="ltx_tag ltx_tag_description">vector</span></dt> | <dt id='Ch2.I2.ix2' class='ltx_item'><span class='ltx_tag ltx_tag_description'>vector</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I2.ix2.p1" class="ltx_para"> | <div id='Ch2.I2.ix2.p1' class='ltx_para'> |
<p class="ltx_p">always denotes an array of dimensionality 1, and</p> | <p class='ltx_p'>always denotes an array of dimensionality 1, and</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I2.ix3" class="ltx_item"><span class="ltx_tag ltx_tag_description">matrix</span></dt> | <dt id='Ch2.I2.ix3' class='ltx_item'><span class='ltx_tag ltx_tag_description'>matrix</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I2.ix3.p1" class="ltx_para"> | <div id='Ch2.I2.ix3.p1' class='ltx_para'> |
<p class="ltx_p">always denotes an array of dimensionality 2.</p> | <p class='ltx_p'>always denotes an array of dimensionality 2.</p> |
</div> | </div> |
</dd> | </dd> |
</dl> | </dl> |
</div> | </div> |
<div id="Ch2.S1.SS1.p7" class="ltx_para"> | <div id='Ch2.S1.SS1.p7' class='ltx_para'> |
<p class="ltx_p">As <em class="ltx_emph">all</em> arrays can be defined in terms of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reshape</span>, the following | <p class='ltx_p'>As <em class='ltx_emph'>all</em> arrays can be defined in terms of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reshape</span>, the following |
program as well is perfectly legal: | program as well is perfectly legal: |
</p> | </p> |
</div> | </div> |
<figure id="LST4" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST4' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 4: </span>Defining Arrays II</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 4: </span>Defining Arrays II</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnQocmVz%0AaGFwZShbMV0sIFsxXSkpOwogIHByaW50KHJlc2hhcGUoW10sIFsxXSkpOwogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnQocmVz%0AaGFwZShbMV0sIFsxXSkpOwogIHByaW50KHJlc2hhcGUoW10sIFsxXSkpOwogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">reshape</span>([1],<span class="ltx_text ltx_lst_space"> </span>[1])); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>reshape</span>([1],<span class='ltx_text ltx_lst_space'> </span>[1])); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">reshape</span>([],<span class="ltx_text ltx_lst_space"> </span>[1])); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>reshape</span>([],<span class='ltx_text ltx_lst_space'> </span>[1])); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S1.SS1.p8" class="ltx_para"> | <div id='Ch2.S1.SS1.p8' class='ltx_para'> |
<p class="ltx_p">The most interesting aspect of this program is the array defined in | <p class='ltx_p'>The most interesting aspect of this program is the array defined in |
line 7. | line 7. |
The empty shape vector makes it a 0-dimensional array, i.e. a scalar. | The empty shape vector makes it a 0-dimensional array, i.e. a scalar. |
The data vector carries the scalar’s value, which, in this example, is 1.</p> | The data vector carries the scalar’s value, which, in this example, is 1.</p> |
</div> | </div> |
<div id="Thmtheorem2" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem2' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 2. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 2. </h6> |
<div id="Thmtheorem2.p1" class="ltx_para"> | <div id='Thmtheorem2.p1' class='ltx_para'> |
<p class="ltx_p">The arguments of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reshape</span> are vectors, i.e. arrays of dimensionality 1. | <p class='ltx_p'>The arguments of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reshape</span> are vectors, i.e. arrays of dimensionality 1. |
Can they be specified by <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">e</span> expressions themselves?</p> | Can they be specified by <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>e</span> expressions themselves?</p> |
</div> | </div> |
</div> | </div> |
<div id="Ch2.S1.SS1.p9" class="ltx_para"> | <div id='Ch2.S1.SS1.p9' class='ltx_para'> |
<p class="ltx_p">The <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reshape</span> notation is relatively clumsy, in particular, when | <p class='ltx_p'>The <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reshape</span> notation is relatively clumsy, in particular, when |
being used for scalars. | being used for scalars. |
Therefore, scalars and vectors can alternatively be specified by | Therefore, scalars and vectors can alternatively be specified by |
shortcut notations as well.</p> | shortcut notations as well.</p> |
</div> | </div> |
<div id="Ch2.S1.SS1.p10" class="ltx_para"> | <div id='Ch2.S1.SS1.p10' class='ltx_para'> |
<p class="ltx_p">For experimenting with these, try the following:</p> | <p class='ltx_p'>For experimenting with these, try the following:</p> |
</div> | </div> |
<figure id="LST5" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST5' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 5: </span>Shortcut Notation for Arrays</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 5: </span>Shortcut Notation for Arrays</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnQoMSk7%0ACiAgcHJpbnQoWzEsMiwzLDQsNV0pOwogIHByaW50KFtbMSwyXSwgWzMsNF0sIFs1LDZdXSk7CiAg%0AcHJpbnQoZ2VuYXJyYXkoWzQsMywyXSwgMSkpOwogIHByaW50KGdlbmFycmF5KFs0LDNdLCBbMSwy%0AXSkpOwogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgcHJpbnQoMSk7%0ACiAgcHJpbnQoWzEsMiwzLDQsNV0pOwogIHByaW50KFtbMSwyXSwgWzMsNF0sIFs1LDZdXSk7CiAg%0AcHJpbnQoZ2VuYXJyYXkoWzQsMywyXSwgMSkpOwogIHByaW50KGdlbmFycmF5KFs0LDNdLCBbMSwy%0AXSkpOwogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(1); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(1); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>([1,2,3,4,5]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>([1,2,3,4,5]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>([[1,2],<span class="ltx_text ltx_lst_space"> </span>[3,4],<span class="ltx_text ltx_lst_space"> </span>[5,6]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>([[1,2],<span class='ltx_text ltx_lst_space'> </span>[3,4],<span class='ltx_text ltx_lst_space'> </span>[5,6]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">genarray</span>([4,3,2],<span class="ltx_text ltx_lst_space"> </span>1)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>genarray</span>([4,3,2],<span class='ltx_text ltx_lst_space'> </span>1)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">genarray</span>([4,3],<span class="ltx_text ltx_lst_space"> </span>[1,2])); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>genarray</span>([4,3],<span class='ltx_text ltx_lst_space'> </span>[1,2])); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S1.SS1.p11" class="ltx_para"> | <div id='Ch2.S1.SS1.p11' class='ltx_para'> |
<p class="ltx_p">From these examples, we can see that scalars can be used in the same way as in most | <p class='ltx_p'>From these examples, we can see that scalars can be used in the same way as in most |
programming languages, and that the notation used for the parameters of | programming languages, and that the notation used for the parameters of |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reshape</span> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reshape</span> |
in the examples above in fact is a standard abbreviation of <span class="ltx_text ltx_font_smallcaps">SaC</span>. | in the examples above in fact is a standard abbreviation of <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
The example in line 8 shows that nestings of arrays are implicitly eliminated, i.e. | The example in line 8 shows that nestings of arrays are implicitly eliminated, i.e. |
the resulting array is identical to:</p> | the resulting array is identical to:</p> |
</div> | </div> |
<div id="Ch2.S1.SS1.p12" class="ltx_para"> | <div id='Ch2.S1.SS1.p12' class='ltx_para'> |
<p class="ltx_p ltx_align_center"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">reshape</span>([3,2],<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6])</span>.</p> | <p class='ltx_p ltx_align_center'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>reshape</span>([3,2],<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6])</span>.</p> |
</div> | </div> |
<div id="Ch2.S1.SS1.p13" class="ltx_para ltx_noindent"> | <div id='Ch2.S1.SS1.p13' class='ltx_para ltx_noindent'> |
<p class="ltx_p">For this reason, array nestings in <span class="ltx_text ltx_font_smallcaps">SaC</span> always have to be <em class="ltx_emph">homogeneous</em>, | <p class='ltx_p'>For this reason, array nestings in <span class='ltx_text ltx_font_smallcaps'>SaC</span> always have to be <em class='ltx_emph'>homogeneous</em>, |
i.e. the inner array components have to have identical shapes.</p> | i.e. the inner array components have to have identical shapes.</p> |
</div> | </div> |
<div id="Ch2.S1.SS1.p14" class="ltx_para"> | <div id='Ch2.S1.SS1.p14' class='ltx_para'> |
<p class="ltx_p">Furthermore, a new function is introduced: <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">genarray</span>. | <p class='ltx_p'>Furthermore, a new function is introduced: <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>genarray</span>. |
It expects two arguments, a shape vector that defines the shape of the result | It expects two arguments, a shape vector that defines the shape of the result |
and a default element to be inserted at each position of the result. | and a default element to be inserted at each position of the result. |
arrays as well, which implicitly extends the dimensionality of the result array.</p> | arrays as well, which implicitly extends the dimensionality of the result array.</p> |
</div> | </div> |
<div id="Thmtheorem3" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem3' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 3. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 3. </h6> |
<div id="Thmtheorem3.p1" class="ltx_para"> | <div id='Thmtheorem3.p1' class='ltx_para'> |
<p class="ltx_p">Given the language constructs introduced so far, can you define an array that would print as</p> | <p class='ltx_p'>Given the language constructs introduced so far, can you define an array that would print as</p> |
<pre class="ltx_verbatim ltx_font_typewriter"> | <pre class='ltx_verbatim ltx_font_typewriter'> |
Dimension: 3 | Dimension: 3 |
Shape : < 5, 2, 2> | Shape : < 5, 2, 2> |
< 0 0 > < 0 1 > | < 0 0 > < 0 1 > |
</pre> | </pre> |
<p class="ltx_p">but whose definition does not contain the symbol ‘1’ more than once?</p> | <p class='ltx_p'>but whose definition does not contain the symbol ‘1’ more than once?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S1.SS2" class="ltx_subsection"> | <section id='Ch2.S1.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">2.1.2 </span>Arrays and Variables</h5> | <span class='ltx_tag ltx_tag_subsection'>2.1.2 </span>Arrays and Variables</h5> |
| |
<div id="Ch2.S1.SS2.p1" class="ltx_para"> | <div id='Ch2.S1.SS2.p1' class='ltx_para'> |
<p class="ltx_p">This section explains why in <span class="ltx_text ltx_font_smallcaps">SaC</span> arrays are data and not containers for values | <p class='ltx_p'>This section explains why in <span class='ltx_text ltx_font_smallcaps'>SaC</span> arrays are data and not containers for values |
as found in most other languages.</p> | as found in most other languages.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p2" class="ltx_para"> | <div id='Ch2.S1.SS2.p2' class='ltx_para'> |
<p class="ltx_p">So far, all examples were expression based, i.e. we did not use any variables. | <p class='ltx_p'>So far, all examples were expression based, i.e. we did not use any variables. |
Traditionally, there are two different ways of introducing variables. | Traditionally, there are two different ways of introducing variables. |
In conventional (imperative) languages such as <span class="ltx_text ltx_font_smallcaps">C</span>, variables denote memory | In conventional (imperative) languages such as <span class='ltx_text ltx_font_smallcaps'>C</span>, variables denote memory |
locations which hold values that may change during computation. | locations which hold values that may change during computation. |
In functional languages, similar to mathematics, variables are considered place holders for values. | In functional languages, similar to mathematics, variables are considered place holders for values. |
are involved.</p> | are involved.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p3" class="ltx_para"> | <div id='Ch2.S1.SS2.p3' class='ltx_para'> |
<p class="ltx_p">Let’s have a look at an example:</p> | <p class='ltx_p'>Let’s have a look at an example:</p> |
</div> | </div> |
<figure id="LST6" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST6' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 6: </span>Variables as Placeholders</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 6: </span>Variables as Placeholders</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IFsxLDIs%0AMyw0XTsKICBwcmludChhKTsKCiAgYiA9IG1vZGFycmF5KGEsIFswXSwgOSk7CiAgcHJpbnQoYik7%0ACgogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IFsxLDIs%0AMyw0XTsKICBwcmludChhKTsKCiAgYiA9IG1vZGFycmF5KGEsIFswXSwgOSk7CiAgcHJpbnQoYik7%0ACgogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span>[0],<span class="ltx_text ltx_lst_space"> </span>9); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span>[0],<span class='ltx_text ltx_lst_space'> </span>9); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S1.SS2.p4" class="ltx_para"> | <div id='Ch2.S1.SS2.p4' class='ltx_para'> |
<p class="ltx_p">The function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">modarray</span> expects three arguments: an array to be “modified”, | <p class='ltx_p'>The function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>modarray</span> expects three arguments: an array to be “modified”, |
an index that indicates the exact position within the array to be “modified”, | an index that indicates the exact position within the array to be “modified”, |
and the value that is to be inserted at the specified position. | and the value that is to be inserted at the specified position. |
As we would expect, the resulting array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">b</span> is almost identical to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>, | As we would expect, the resulting array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>b</span> is almost identical to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>, |
only the very first element has changed into <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">9</span>.</p> | only the very first element has changed into <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>9</span>.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p5" class="ltx_para"> | <div id='Ch2.S1.SS2.p5' class='ltx_para'> |
<p class="ltx_p ltx_align_center"><span class="ltx_text ltx_font_bold">Note here, that indexing in </span><span class="ltx_text ltx_font_smallcaps">SaC</span><span class="ltx_text ltx_font_bold"> always starts with index <span class="ltx_text ltx_lstlisting"></span>!</span></p> | <p class='ltx_p ltx_align_center'><span class='ltx_text ltx_font_bold'>Note here, that indexing in </span><span class='ltx_text ltx_font_smallcaps'>SaC</span><span class='ltx_text ltx_font_bold'> always starts with index <span class='ltx_text ltx_lstlisting'></span>!</span></p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p6" class="ltx_para"> | <div id='Ch2.S1.SS2.p6' class='ltx_para'> |
<p class="ltx_p">Referring to the container / place holder discussion, the crucial question is: | <p class='ltx_p'>Referring to the container / place holder discussion, the crucial question is: |
does the variable <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> denote a container, whose value is changed by | does the variable <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> denote a container, whose value is changed by |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">modarray</span>? If this would be the case, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">b</span> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>modarray</span>? If this would be the case, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>b</span> |
would share the same container, and every access to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> after | would share the same container, and every access to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> after |
line 9 would | line 9 would |
yield <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[9,2,3,4]</span>. If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> in fact is a place holder, it will | yield <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[9,2,3,4]</span>. If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> in fact is a place holder, it will |
always denote the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[1,2,3,4]</span>, no matter what functions have | always denote the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[1,2,3,4]</span>, no matter what functions have |
obtained <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> as an argument.</p> | obtained <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> as an argument.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p7" class="ltx_para"> | <div id='Ch2.S1.SS2.p7' class='ltx_para'> |
<p class="ltx_p">To answer this question, you may simply shift the first call of | <p class='ltx_p'>To answer this question, you may simply shift the first call of |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">print</span> two lines down. As you can see, in <span class="ltx_text ltx_font_smallcaps">SaC</span>, variables are indeed | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>print</span> two lines down. As you can see, in <span class='ltx_text ltx_font_smallcaps'>SaC</span>, variables are indeed |
place holders.</p> | place holders.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p8" class="ltx_para"> | <div id='Ch2.S1.SS2.p8' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for efficiency freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for efficiency freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">You may wonder whether this implies that <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">modarray</span> always copies the entire array. | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>You may wonder whether this implies that <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>modarray</span> always copies the entire array. |
In fact, it only copies <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> if the place-holder property would be violated otherwise.</span></span> | In fact, it only copies <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> if the place-holder property would be violated otherwise.</span></span> |
</span> | </span> |
</p> | </p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p9" class="ltx_para"> | <div id='Ch2.S1.SS2.p9' class='ltx_para'> |
<p class="ltx_p">As a result of this place-holder property, it is guaranteed that no function call can affect | <p class='ltx_p'>As a result of this place-holder property, it is guaranteed that no function call can affect |
the value of its arguments. | the value of its arguments. |
In other words, the underlying concept <em class="ltx_emph">guarantees</em>, that all functions are | In other words, the underlying concept <em class='ltx_emph'>guarantees</em>, that all functions are |
“pure”. | “pure”. |
Although this helps in avoiding nasty errors due to non-intended side-effects, | Although this helps in avoiding nasty errors due to non-intended side-effects, |
in particular, if arrays are to be modified successively.</p> | in particular, if arrays are to be modified successively.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p10" class="ltx_para"> | <div id='Ch2.S1.SS2.p10' class='ltx_para'> |
<p class="ltx_p">To cope with this problem, in <span class="ltx_text ltx_font_smallcaps">SaC</span>, variables do have a so-called <em class="ltx_emph">scope</em>, i.e. each variable definition is associated with a well-defined portion of program code | <p class='ltx_p'>To cope with this problem, in <span class='ltx_text ltx_font_smallcaps'>SaC</span>, variables do have a so-called <em class='ltx_emph'>scope</em>, i.e. each variable definition is associated with a well-defined portion of program code |
where its definition is valid. | where its definition is valid. |
In a sequence of variable definitions, the scope of a variable starts with the left-hand | In a sequence of variable definitions, the scope of a variable starts with the left-hand |
This measure allows us to reuse variable names. | This measure allows us to reuse variable names. |
A slight modification of our example demonstrates the effect of variable scopes | A slight modification of our example demonstrates the effect of variable scopes |
in <span class="ltx_text ltx_font_smallcaps">SaC</span>:</p> | in <span class='ltx_text ltx_font_smallcaps'>SaC</span>:</p> |
</div> | </div> |
<figure id="LST7" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST7' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 7: </span>Variable Scopes</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 7: </span>Variable Scopes</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IFsxLDIs%0AMyw0XTsKCiAgYiA9IG1vZGFycmF5KGEsIFswXSwgOSk7CiAgcHJpbnQoYSk7CiAgYSA9IGI7CiAg%0AcHJpbnQoYSk7CgogIGEgPSBtb2RhcnJheShhLCBbMV0sIDgpOwogIHByaW50KGEpOwoKICByZXR1%0Acm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IFsxLDIs%0AMyw0XTsKCiAgYiA9IG1vZGFycmF5KGEsIFswXSwgOSk7CiAgcHJpbnQoYSk7CiAgYSA9IGI7CiAg%0AcHJpbnQoYSk7CgogIGEgPSBtb2RhcnJheShhLCBbMV0sIDgpOwogIHByaW50KGEpOwoKICByZXR1%0Acm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span>[0],<span class="ltx_text ltx_lst_space"> </span>9); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span>[0],<span class='ltx_text ltx_lst_space'> </span>9); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span>[1],<span class="ltx_text ltx_lst_space"> </span>8); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span>[1],<span class='ltx_text ltx_lst_space'> </span>8); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S1.SS2.p11" class="ltx_para"> | <div id='Ch2.S1.SS2.p11' class='ltx_para'> |
<p class="ltx_p">Here, the use of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> on the right-hand side of line 9 still refers | <p class='ltx_p'>Here, the use of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> on the right-hand side of line 9 still refers |
to the definition of line 6, whereas the use in line 11 refers to the definition | to the definition of line 6, whereas the use in line 11 refers to the definition |
in line 10.</p> | in line 10.</p> |
</div> | </div> |
<div id="Ch2.S1.SS2.p12" class="ltx_para"> | <div id='Ch2.S1.SS2.p12' class='ltx_para'> |
<p class="ltx_p">The definition in line 13 shows, how variable scopes can be used to specify | <p class='ltx_p'>The definition in line 13 shows, how variable scopes can be used to specify |
code that looks very much “imperative”. | code that looks very much “imperative”. |
However, you should always keep in mind, that in <span class="ltx_text ltx_font_smallcaps">SaC</span>, the place-holder property | However, you should always keep in mind, that in <span class='ltx_text ltx_font_smallcaps'>SaC</span>, the place-holder property |
<em class="ltx_emph">always</em> holds!</p> | <em class='ltx_emph'>always</em> holds!</p> |
</div> | </div> |
<div id="Thmtheorem4" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem4' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 4. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 4. </h6> |
<div id="Thmtheorem4.p1" class="ltx_para"> | <div id='Thmtheorem4.p1' class='ltx_para'> |
<p class="ltx_p">What result do you expect from the following <span class="ltx_text ltx_font_smallcaps">SaC</span> program?</p> | <p class='ltx_p'>What result do you expect from the following <span class='ltx_text ltx_font_smallcaps'>SaC</span> program?</p> |
</div> | </div> |
</div> | </div> |
<figure id="LST8" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST8' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 8: </span>Scope Exercise</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 8: </span>Scope Exercise</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IFsxLDIs%0AMyw0XTsKICBiID0gW2EsYV07CgogIGEgPSBtb2RhcnJheShtb2RhcnJheShhLCBbMF0sIDApLCBb%0AMV0sIDApOwogIGIgPSBtb2RhcnJheShiLCBbMF0sIGEpOwogIHByaW50KGIpOwoKICByZXR1cm4g%0AMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IFsxLDIs%0AMyw0XTsKICBiID0gW2EsYV07CgogIGEgPSBtb2RhcnJheShtb2RhcnJheShhLCBbMF0sIDApLCBb%0AMV0sIDApOwogIGIgPSBtb2RhcnJheShiLCBbMF0sIGEpOwogIHByaW50KGIpOwoKICByZXR1cm4g%0AMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_identifier">a</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_identifier'>a</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span>[0],<span class="ltx_text ltx_lst_space"> </span>0),<span class="ltx_text ltx_lst_space"> </span>[1],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span>[0],<span class='ltx_text ltx_lst_space'> </span>0),<span class='ltx_text ltx_lst_space'> </span>[1],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">b</span>,<span class="ltx_text ltx_lst_space"> </span>[0],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>b</span>,<span class='ltx_text ltx_lst_space'> </span>[0],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span>} |
</div> | </div> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch2.S2" class="ltx_section"> | <section id='Ch2.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">2.2 </span>Lesson 2: Shape-Invariant Programming</h4> | <span class='ltx_tag ltx_tag_section'>2.2 </span>Lesson 2: Shape-Invariant Programming</h4> |
| |
<div id="Ch2.S2.p1" class="ltx_para"> | <div id='Ch2.S2.p1' class='ltx_para'> |
<p class="ltx_p">The term <em class="ltx_emph">shape-invariant programming</em> refers to a programming style | <p class='ltx_p'>The term <em class='ltx_emph'>shape-invariant programming</em> refers to a programming style |
where all array operations are defined in terms of operations that | where all array operations are defined in terms of operations that |
are applied to entire arrays rather than to individual array elements. | are applied to entire arrays rather than to individual array elements. |
In order to realize such a programming style, it is an essential | In order to realize such a programming style, it is an essential |
prerequisite to be able to apply functions to arbitrarily shaped arguments. | prerequisite to be able to apply functions to arbitrarily shaped arguments. |
In <span class="ltx_text ltx_font_smallcaps">SaC</span>, this is the case.</p> | In <span class='ltx_text ltx_font_smallcaps'>SaC</span>, this is the case.</p> |
</div> | </div> |
<div id="Ch2.S2.p2" class="ltx_para"> | <div id='Ch2.S2.p2' class='ltx_para'> |
<p class="ltx_p">All built-in array operations as well as all array operations supplied by the | <p class='ltx_p'>All built-in array operations as well as all array operations supplied by the |
standard library can be applied to arguments of arbitrary shapes. | standard library can be applied to arguments of arbitrary shapes. |
However, most of the operations that require more than one argument do have | However, most of the operations that require more than one argument do have |
such a kind of domain error and produce a runtime error instead.</p> | such a kind of domain error and produce a runtime error instead.</p> |
</div> | </div> |
<div id="Ch2.S2.p3" class="ltx_para"> | <div id='Ch2.S2.p3' class='ltx_para'> |
<p class="ltx_p">This lesson consists of three parts: | <p class='ltx_p'>This lesson consists of three parts: |
The section on <span class="ltx_text ltx_font_italic">Standard Array Operations</span> introduces the most important | The section on <span class='ltx_text ltx_font_italic'>Standard Array Operations</span> introduces the most important |
standard array operations provided by the current <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler | standard array operations provided by the current <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler |
release<span class="ltx_note ltx_role_footnote"><sup class="ltx_note_mark">1</sup><span class="ltx_note_outer"><span class="ltx_note_content"><sup class="ltx_note_mark">1</sup>As of this writing, the latest <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler release | release<span class='ltx_note ltx_role_footnote'><sup class='ltx_note_mark'>1</sup><span class='ltx_note_outer'><span class='ltx_note_content'><sup class='ltx_note_mark'>1</sup>As of this writing, the latest <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler release |
is version 1.2.</span></span></span>. | is version 1.2.</span></span></span>. |
The next section explains <span class="ltx_text ltx_font_italic">Axis Control Notation</span>, a powerful but simple | The next section explains <span class='ltx_text ltx_font_italic'>Axis Control Notation</span>, a powerful but simple |
way of manipulating the focus of array operations with respect to individual axes of argument arrays. | way of manipulating the focus of array operations with respect to individual axes of argument arrays. |
With the axis-control notation, the basic operations often can easily be combined into rather | With the axis-control notation, the basic operations often can easily be combined into rather |
complex operations as demonstrated in the section on <span class="ltx_text ltx_font_italic">Putting it all Together</span>.</p> | complex operations as demonstrated in the section on <span class='ltx_text ltx_font_italic'>Putting it all Together</span>.</p> |
</div> | </div> |
<section id="Ch2.S2.SS1" class="ltx_subsection"> | <section id='Ch2.S2.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">2.2.1 </span>Standard Array Operations</h5> | <span class='ltx_tag ltx_tag_subsection'>2.2.1 </span>Standard Array Operations</h5> |
| |
<div id="Ch2.S2.SS1.p1" class="ltx_para"> | <div id='Ch2.S2.SS1.p1' class='ltx_para'> |
<p class="ltx_p">In the sequel, several toy examples demonstrate the functionality of the most basic | <p class='ltx_p'>In the sequel, several toy examples demonstrate the functionality of the most basic |
array operations that come as part of the current <span class="ltx_text ltx_font_smallcaps">SaC</span> release. | array operations that come as part of the current <span class='ltx_text ltx_font_smallcaps'>SaC</span> release. |
Their design is inspired by those available in <span class="ltx_text ltx_font_smallcaps">APL</span>. | Their design is inspired by those available in <span class='ltx_text ltx_font_smallcaps'>APL</span>. |
However, several aspects — in particular regarding the treatment of special | However, several aspects — in particular regarding the treatment of special |
cases in <span class="ltx_text ltx_font_smallcaps">APL</span> — have | cases in <span class='ltx_text ltx_font_smallcaps'>APL</span> — have |
been adjusted to allow for a more favourable compilation in <span class="ltx_text ltx_font_smallcaps">SaC</span> that yields better runtime performance.</p> | been adjusted to allow for a more favourable compilation in <span class='ltx_text ltx_font_smallcaps'>SaC</span> that yields better runtime performance.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.p2" class="ltx_para"> | <div id='Ch2.S2.SS1.p2' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for language design freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for language design freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">You may have your own ideas on what primitive array operations should be available | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>You may have your own ideas on what primitive array operations should be available |
and how the precise semantics of these should look like. | and how the precise semantics of these should look like. |
Therefore, it should be mentioned here, that </span><span class="ltx_text ltx_font_bold">all</span><span class="ltx_text ltx_font_italic"> array operations introduced in the | Therefore, it should be mentioned here, that </span><span class='ltx_text ltx_font_bold'>all</span><span class='ltx_text ltx_font_italic'> array operations introduced in the |
remainder of this section are not | remainder of this section are not |
hard-wired into the language, but they are defined in the module <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Array</span> | hard-wired into the language, but they are defined in the module <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Array</span> |
from the standard library. | from the standard library. |
This is to say that the advanced <span class="ltx_text ltx_font_smallcaps">SaC</span> programmer may write his own set of | This is to say that the advanced <span class='ltx_text ltx_font_smallcaps'>SaC</span> programmer may write his own set of |
standard array operations. | standard array operations. |
</span></span> | </span></span> |
</p> | </p> |
</div> | </div> |
<div id="Ch2.S2.SS1.p3" class="ltx_para"> | <div id='Ch2.S2.SS1.p3' class='ltx_para'> |
<p class="ltx_p">The individual parts of this section are all organized according | <p class='ltx_p'>The individual parts of this section are all organized according |
to the following scheme: | to the following scheme: |
first, a semi-formal introduction to the functionality of individual operations | first, a semi-formal introduction to the functionality of individual operations |
with respect to domain restrictions if these do exist‘.</p> | with respect to domain restrictions if these do exist‘.</p> |
</div> | </div> |
<section id="Ch2.S2.SS1.SSSx1" class="ltx_subsubsection"> | <section id='Ch2.S2.SS1.SSSx1' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Basic Operations</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Basic Operations</h6> |
| |
<div id="Ch2.S2.SS1.SSSx1.p1" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx1.p1' class='ltx_para'> |
<p class="ltx_p">The most basic operations are very close to the model of arrays in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | <p class='ltx_p'>The most basic operations are very close to the model of arrays in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
They comprise functions for inspecting, creating, and modifying an array’s | They comprise functions for inspecting, creating, and modifying an array’s |
shape and content. | shape and content. |
already.</p> | already.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx1.p2" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx1.p2' class='ltx_para'> |
<dl id="Ch2.I3" class="ltx_description"> | <dl id='Ch2.I3' class='ltx_description'> |
<dt id="Ch2.I3.ix1" class="ltx_item"><span class="ltx_tag ltx_tag_description">dim(a)</span></dt> | <dt id='Ch2.I3.ix1' class='ltx_item'><span class='ltx_tag ltx_tag_description'>dim(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I3.ix1.p1" class="ltx_para"> | <div id='Ch2.I3.ix1.p1' class='ltx_para'> |
<p class="ltx_p">returns the (scalar) dimensionality of the argument array | <p class='ltx_p'>returns the (scalar) dimensionality of the argument array |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: none.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: none.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I3.ix2" class="ltx_item"><span class="ltx_tag ltx_tag_description">shape(a)</span></dt> | <dt id='Ch2.I3.ix2' class='ltx_item'><span class='ltx_tag ltx_tag_description'>shape(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I3.ix2.p1" class="ltx_para"> | <div id='Ch2.I3.ix2.p1' class='ltx_para'> |
<p class="ltx_p">returns the shape vector of the argument array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. | <p class='ltx_p'>returns the shape vector of the argument array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: none.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: none.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I3.ix3" class="ltx_item"><span class="ltx_tag ltx_tag_description">a[iv]</span></dt> | <dt id='Ch2.I3.ix3' class='ltx_item'><span class='ltx_tag ltx_tag_description'>a[iv]</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I3.ix3.p1" class="ltx_para"> | <div id='Ch2.I3.ix3.p1' class='ltx_para'> |
<p class="ltx_p">constitutes a short-cut notation for <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">sel</span>(<span class="ltx_text ltx_lst_identifier">iv</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>. | <p class='ltx_p'>constitutes a short-cut notation for <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>sel</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>. |
It selects the array element of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> at index position <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span>. | It selects the array element of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> at index position <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span>. |
As <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> may be of any shape, the index position is given as an | As <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> may be of any shape, the index position is given as an |
<em class="ltx_emph">index vector</em>. The dimensionality of the result is identical to the dimensionality of | <em class='ltx_emph'>index vector</em>. The dimensionality of the result is identical to the dimensionality of |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> minus the length of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> minus the length of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span>. |
Accordingly, its shape is derived from the last components of | Accordingly, its shape is derived from the last components of |
the shape of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. | the shape of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I3.I1" class="ltx_itemize"> | <ul id='Ch2.I3.I1' class='ltx_itemize'> |
<li id="Ch2.I3.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I1.i1.p1" class="ltx_para"> | <div id='Ch2.I3.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">iv</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I3.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I1.i2.p1" class="ltx_para"> | <div id='Ch2.I3.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">iv</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I3.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I1.i3.p1" class="ltx_para"> | <div id='Ch2.I3.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I3.I1.i3.p1.m1" class="ltx_Math" alttext="{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% | <p class='ltx_p'><math id='Ch2.I3.I1.i3.p1.m1' class='ltx_Math' alttext='{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% |
\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mn>0</mn><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>iv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>iv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math>.</p> | \lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mn>0</mn><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>iv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>iv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math>.</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I3.ix4" class="ltx_item"><span class="ltx_tag ltx_tag_description">a[iv]=expr</span></dt> | <dt id='Ch2.I3.ix4' class='ltx_item'><span class='ltx_tag ltx_tag_description'>a[iv]=expr</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I3.ix4.p1" class="ltx_para"> | <div id='Ch2.I3.ix4.p1' class='ltx_para'> |
<p class="ltx_p">is a short-cut notation for an assignment of the form | <p class='ltx_p'>is a short-cut notation for an assignment of the form |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">expr</span>)</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>expr</span>)</span>. |
The result of this application is a new array which is almost identical to | The result of this application is a new array which is almost identical to |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. Only the element (subarray) at index position <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. Only the element (subarray) at index position <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span> |
is different; it is replaced by <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">expr</span>. | is different; it is replaced by <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>expr</span>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I3.I2" class="ltx_itemize"> | <ul id='Ch2.I3.I2' class='ltx_itemize'> |
<li id="Ch2.I3.I2.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I2.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I2.i1.p1" class="ltx_para"> | <div id='Ch2.I3.I2.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">iv</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I3.I2.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I2.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I2.i2.p1" class="ltx_para"> | <div id='Ch2.I3.I2.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">iv</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I3.I2.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I2.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I2.i3.p1" class="ltx_para"> | <div id='Ch2.I3.I2.i3.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I3.I2.i3.p1.m1" class="ltx_Math" alttext="{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% | <p class='ltx_p'><math id='Ch2.I3.I2.i3.p1.m1' class='ltx_Math' alttext='{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% |
\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mn>0</mn><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>iv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>iv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> | \lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mn>0</mn><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>iv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>iv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I3.I2.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I2.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I2.i4.p1" class="ltx_para"> | <div id='Ch2.I3.I2.i4.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">expr</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">a</span>[<span class="ltx_text ltx_lst_identifier">iv</span>])</span>.</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>expr</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>a</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>])</span>.</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I3.ix5" class="ltx_item"><span class="ltx_tag ltx_tag_description">reshape(shp, expr)</span></dt> | <dt id='Ch2.I3.ix5' class='ltx_item'><span class='ltx_tag ltx_tag_description'>reshape(shp, expr)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I3.ix5.p1" class="ltx_para"> | <div id='Ch2.I3.ix5.p1' class='ltx_para'> |
<p class="ltx_p">computes an array with shape vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">shp</span> | <p class='ltx_p'>computes an array with shape vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>shp</span> |
and data vector identical to that of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">expr</span>. | and data vector identical to that of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>expr</span>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I3.I3" class="ltx_itemize"> | <ul id='Ch2.I3.I3' class='ltx_itemize'> |
<li id="Ch2.I3.I3.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I3.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I3.i1.p1" class="ltx_para"> | <div id='Ch2.I3.I3.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">shp</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>shp</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I3.I3.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I3.I3.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I3.I3.i2.p1" class="ltx_para"> | <div id='Ch2.I3.I3.i2.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I3.I3.i2.p1.m1" class="ltx_Math" alttext="{{{{{{{{\prod\limits_{i=0}^{{\textrm{\lstinline 1}}}}}\textrm{\lstinline 1}}}=\prod% | <p class='ltx_p'><math id='Ch2.I3.I3.i2.p1.m1' class='ltx_Math' alttext='{{{{{{{{\prod\limits_{i=0}^{{\textrm{\lstinline 1}}}}}\textrm{\lstinline 1}}}=\prod% |
\limits_{i=0}^{{\textrm{\lstinline 1}}}}}\textrm{\lstinline 1}}}" display="inline"><mrow><mrow><munderover><mo largeop="true" movablelimits="false" symmetric="true">∏</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>shp</mtext><mtext>)[[0]]-1</mtext></mrow></munderover><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shp</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow><mo>=</mo><mrow><munderover><mo largeop="true" movablelimits="false" symmetric="true">∏</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>dim</mtext><mtext>(</mtext><mtext>expr</mtext><mtext>)-1</mtext></mrow></munderover><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>expr</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></mrow></math>.</p> | \limits_{i=0}^{{\textrm{\lstinline 1}}}}}\textrm{\lstinline 1}}}' display='inline'><mrow><mrow><munderover><mo largeop='true' movablelimits='false' symmetric='true'>∏</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>shp</mtext><mtext>)[[0]]-1</mtext></mrow></munderover><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shp</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow><mo>=</mo><mrow><munderover><mo largeop='true' movablelimits='false' symmetric='true'>∏</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>dim</mtext><mtext>(</mtext><mtext>expr</mtext><mtext>)-1</mtext></mrow></munderover><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>expr</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></mrow></math>.</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I3.ix6" class="ltx_item"><span class="ltx_tag ltx_tag_description">genarray(shp, expr)</span></dt> | <dt id='Ch2.I3.ix6' class='ltx_item'><span class='ltx_tag ltx_tag_description'>genarray(shp, expr)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I3.ix6.p1" class="ltx_para"> | <div id='Ch2.I3.ix6.p1' class='ltx_para'> |
<p class="ltx_p">generates an array of shape <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">shp</span>, | <p class='ltx_p'>generates an array of shape <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>shp</span>, |
whose elements are all identical to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">expr</span>. | whose elements are all identical to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>expr</span>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">shp</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span>.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>shp</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span>.</p> |
</div> | </div> |
</dd> | </dd> |
</dl> | </dl> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx1.p3" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx1.p3' class='ltx_para'> |
<p class="ltx_p">Although these operations are fairly self-explaining or known from | <p class='ltx_p'>Although these operations are fairly self-explaining or known from |
Lesson <a href="#Ch2.S1" title="2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.1</span></a> on <span class="ltx_text ltx_font_bold">Arrays as Data</span>, let us have a look | Lesson <a href='#Ch2.S1' title='2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.1</span></a> on <span class='ltx_text ltx_font_bold'>Arrays as Data</span>, let us have a look |
at a few example applications:</p> | at a few example applications:</p> |
</div> | </div> |
<figure id="LST9" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST9' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 9: </span>Basic Operations</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 9: </span>Basic Operations</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMl07CgogIG1hdCA9IHJlc2hhcGUoWzMsNF0sIHZlY3Qp%0AOwogIHByaW50KG1hdCk7CgogIHByaW50KG1hdFtbMSwxXV0pOwogIHByaW50KG1hdFtbMl1dKTsK%0AICBwcmludChtYXRbW11dKTsKCiAgbWF0W1sxLDFdXSA9IDA7CiAgcHJpbnQobWF0KTsKICBtYXRb%0AWzJdXSA9IFswLDAsMCwwXTsKICBwcmludChtYXQpOwogIG1hdFtbXV0gPSBnZW5hcnJheShbMyw0%0AXSwgMCk7CiAgcHJpbnQobWF0KTsKCiAgZW1wdHlfdmVjdCA9IFtdOwogIHByaW50KGVtcHR5X3Zl%0AY3QpOwogIGVtcHR5X21hdCA9IHJlc2hhcGUoWzIyLDBdLCBlbXB0eV92ZWN0KTsKICBwcmludChl%0AbXB0eV9tYXQpOwogIHByaW50KGRpbShlbXB0eV9tYXQpKTsKICBwcmludChzaGFwZShlbXB0eV9t%0AYXQpKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMl07CgogIG1hdCA9IHJlc2hhcGUoWzMsNF0sIHZlY3Qp%0AOwogIHByaW50KG1hdCk7CgogIHByaW50KG1hdFtbMSwxXV0pOwogIHByaW50KG1hdFtbMl1dKTsK%0AICBwcmludChtYXRbW11dKTsKCiAgbWF0W1sxLDFdXSA9IDA7CiAgcHJpbnQobWF0KTsKICBtYXRb%0AWzJdXSA9IFswLDAsMCwwXTsKICBwcmludChtYXQpOwogIG1hdFtbXV0gPSBnZW5hcnJheShbMyw0%0AXSwgMCk7CiAgcHJpbnQobWF0KTsKCiAgZW1wdHlfdmVjdCA9IFtdOwogIHByaW50KGVtcHR5X3Zl%0AY3QpOwogIGVtcHR5X21hdCA9IHJlc2hhcGUoWzIyLDBdLCBlbXB0eV92ZWN0KTsKICBwcmludChl%0AbXB0eV9tYXQpOwogIHByaW50KGRpbShlbXB0eV9tYXQpKTsKICBwcmludChzaGFwZShlbXB0eV9t%0AYXQpKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6,7,8,9,10,11,12]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6,7,8,9,10,11,12]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reshape</span>([3,4],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reshape</span>([3,4],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[1,1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[1,1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[2]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[2]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[1,1]]<span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[1,1]]<span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[2]]<span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[0,0,0,0]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[2]]<span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[0,0,0,0]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[]]<span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([3,4],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[]]<span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([3,4],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">empty_vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>empty_vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">empty_vect</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>empty_vect</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">empty_mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reshape</span>([22,0],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">empty_vect</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>empty_mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reshape</span>([22,0],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>empty_vect</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">empty_mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>empty_mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">empty_mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>empty_mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">empty_mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>empty_mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">30</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>30</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS1.SSSx1.p4" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx1.p4' class='ltx_para'> |
<p class="ltx_p">The different selections in lines 11-13 show how | <p class='ltx_p'>The different selections in lines 11-13 show how |
the dimensionality of the selected element increases as the length of the index | the dimensionality of the selected element increases as the length of the index |
vector decreases. If the index vector degenerates into an empty vector, the | vector decreases. If the index vector degenerates into an empty vector, the |
of individual elements, rows, or the entire array.</p> | of individual elements, rows, or the entire array.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx1.p5" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx1.p5' class='ltx_para'> |
<p class="ltx_p">Lines 22-27 are meant to draw the reader’s | <p class='ltx_p'>Lines 22-27 are meant to draw the reader’s |
attention to the fact that there exists an unlimited number of distinct empty | attention to the fact that there exists an unlimited number of distinct empty |
arrays in <span class="ltx_text ltx_font_smallcaps">SaC</span>!</p> | arrays in <span class='ltx_text ltx_font_smallcaps'>SaC</span>!</p> |
</div> | </div> |
<div id="Thmtheorem5" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem5' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 5. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 5. </h6> |
<div id="Thmtheorem5.p1" class="ltx_para"> | <div id='Thmtheorem5.p1' class='ltx_para'> |
<p class="ltx_p">Assuming <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> to be defined as in the previous example, what results do you | <p class='ltx_p'>Assuming <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> to be defined as in the previous example, what results do you |
expect from the following expressions:</p> | expect from the following expressions:</p> |
<ul id="Ch2.I4" class="ltx_itemize"> | <ul id='Ch2.I4' class='ltx_itemize'> |
<li id="Ch2.I4.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I4.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I4.i1.p1" class="ltx_para"> | <div id='Ch2.I4.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[])[[]]</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[])[[]]</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I4.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I4.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I4.i2.p1" class="ltx_para"> | <div id='Ch2.I4.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[])[[1]]</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[])[[1]]</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I4.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I4.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I4.i3.p1" class="ltx_para"> | <div id='Ch2.I4.i3.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[])[[1,0]]</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[])[[1,0]]</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I4.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I4.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I4.i4.p1" class="ltx_para"> | <div id='Ch2.I4.i4.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">mat</span>[<span class="ltx_text ltx_lst_identifier">reshape</span>([2,0],<span class="ltx_text ltx_lst_space"> </span>[])]</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>mat</span>[<span class='ltx_text ltx_lst_identifier'>reshape</span>([2,0],<span class='ltx_text ltx_lst_space'> </span>[])]</span>?</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S2.SS1.SSSx2" class="ltx_subsubsection"> | <section id='Ch2.S2.SS1.SSSx2' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Element-wise Extensions</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Element-wise Extensions</h6> |
| |
<div id="Ch2.S2.SS1.SSSx2.p1" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx2.p1' class='ltx_para'> |
<p class="ltx_p">Most of the operations that can be found as standard operations on scalars | <p class='ltx_p'>Most of the operations that can be found as standard operations on scalars |
in other languages are applicable to entire arrays in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | in other languages are applicable to entire arrays in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
Their semantics are simply element-wise extensions of the well-known scalar | Their semantics are simply element-wise extensions of the well-known scalar |
operations. | operations. |
argument arrays.</p> | argument arrays.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx2.p2" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx2.p2' class='ltx_para'> |
<p class="ltx_p">In detail, the following operations are available:</p> | <p class='ltx_p'>In detail, the following operations are available:</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx2.p3" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx2.p3' class='ltx_para'> |
<dl id="Ch2.I5" class="ltx_description"> | <dl id='Ch2.I5' class='ltx_description'> |
<dt id="Ch2.I5.ix1" class="ltx_item"><span class="ltx_tag ltx_tag_description">arithmetic operations</span></dt> | <dt id='Ch2.I5.ix1' class='ltx_item'><span class='ltx_tag ltx_tag_description'>arithmetic operations</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I5.ix1.p1" class="ltx_para"> | <div id='Ch2.I5.ix1.p1' class='ltx_para'> |
<p class="ltx_p">including addition (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix1.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix1.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), | <p class='ltx_p'>including addition (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix1.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix1.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), |
subtraction (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix1.p1.m3" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>-<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix1.p1.m4" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), negation (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">-<math id="Ch2.I5.ix1.p1.m5" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math></span>), multiplication | subtraction (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix1.p1.m3' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>-<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix1.p1.m4' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), negation (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>-<math id='Ch2.I5.ix1.p1.m5' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math></span>), multiplication |
(<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix1.p1.m6" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>*<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix1.p1.m7" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), and division (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix1.p1.m8" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>/<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix1.p1.m9" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>). | (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix1.p1.m6' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>*<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix1.p1.m7' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), and division (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix1.p1.m8' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>/<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix1.p1.m9' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>). |
Furthermore, a modulo operation (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix1.p1.m10" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>%<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix1.p1.m11" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>) is supported on integer | Furthermore, a modulo operation (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix1.p1.m10' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>%<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix1.p1.m11' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>) is supported on integer |
numbers. | numbers. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: the element types of <math id="Ch2.I5.ix1.p1.m12" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> and | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: the element types of <math id='Ch2.I5.ix1.p1.m12' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> and |
<math id="Ch2.I5.ix1.p1.m13" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> have to be of the same numerical type.</p> | <math id='Ch2.I5.ix1.p1.m13' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> have to be of the same numerical type.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I5.ix2" class="ltx_item"><span class="ltx_tag ltx_tag_description">logical operations</span></dt> | <dt id='Ch2.I5.ix2' class='ltx_item'><span class='ltx_tag ltx_tag_description'>logical operations</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I5.ix2.p1" class="ltx_para"> | <div id='Ch2.I5.ix2.p1' class='ltx_para'> |
<p class="ltx_p">including conjunction (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix2.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>&&<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix2.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), disjunction | <p class='ltx_p'>including conjunction (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix2.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>&&<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix2.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), disjunction |
(<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix2.p1.m3" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>||<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix2.p1.m4" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), and negation (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">!<math id="Ch2.I5.ix2.p1.m5" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math></span>). | (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix2.p1.m3' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>||<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix2.p1.m4' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), and negation (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>!<math id='Ch2.I5.ix2.p1.m5' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math></span>). |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: the element types have to be Boolean.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: the element types have to be Boolean.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I5.ix3" class="ltx_item"><span class="ltx_tag ltx_tag_description">relational operations</span></dt> | <dt id='Ch2.I5.ix3' class='ltx_item'><span class='ltx_tag ltx_tag_description'>relational operations</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I5.ix3.p1" class="ltx_para"> | <div id='Ch2.I5.ix3.p1' class='ltx_para'> |
<p class="ltx_p">including less-than (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix3.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix3.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), | <p class='ltx_p'>including less-than (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix3.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix3.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), |
less-or-equal (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix3.p1.m3" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix3.p1.m4" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), equal (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix3.p1.m5" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix3.p1.m6" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), | less-or-equal (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix3.p1.m3' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix3.p1.m4' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), equal (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix3.p1.m5' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix3.p1.m6' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), |
not-equal (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix3.p1.m7" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>!=<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix3.p1.m8" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), | not-equal (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix3.p1.m7' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>!=<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix3.p1.m8' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), |
greater-or-equal (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix3.p1.m9" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>>=<span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix3.p1.m10" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span>), and greater-than | greater-or-equal (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix3.p1.m9' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>>=<span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix3.p1.m10' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span>), and greater-than |
(<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><math id="Ch2.I5.ix3.p1.m11" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math><span class="ltx_text ltx_lst_space"> </span>><span class="ltx_text ltx_lst_space"> </span><math id="Ch2.I5.ix3.p1.m12" class="ltx_Math" alttext="e2" display="inline"><mrow><mi>e</mi><mo></mo><mn>2</mn></mrow></math></span>). | (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><math id='Ch2.I5.ix3.p1.m11' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math><span class='ltx_text ltx_lst_space'> </span>><span class='ltx_text ltx_lst_space'> </span><math id='Ch2.I5.ix3.p1.m12' class='ltx_Math' alttext='e2' display='inline'><mrow><mi>e</mi><mo></mo><mn>2</mn></mrow></math></span>). |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: the element types of <math id="Ch2.I5.ix3.p1.m13" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> and <math id="Ch2.I5.ix3.p1.m14" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> have to be of the same type.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: the element types of <math id='Ch2.I5.ix3.p1.m13' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> and <math id='Ch2.I5.ix3.p1.m14' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> have to be of the same type.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I5.ix4" class="ltx_item"><span class="ltx_tag ltx_tag_description">max (<math id="Ch2.I5.ix4.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math>, <math id="Ch2.I5.ix4.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math>), min (<math id="Ch2.I5.ix4.m3" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math>, <math id="Ch2.I5.ix4.m4" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math>)</span></dt> | <dt id='Ch2.I5.ix4' class='ltx_item'><span class='ltx_tag ltx_tag_description'>max (<math id='Ch2.I5.ix4.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math>, <math id='Ch2.I5.ix4.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math>), min (<math id='Ch2.I5.ix4.m3' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math>, <math id='Ch2.I5.ix4.m4' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math>)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I5.ix4.p1" class="ltx_para"> | <div id='Ch2.I5.ix4.p1' class='ltx_para'> |
<p class="ltx_p">compute the element-wise maximum and | <p class='ltx_p'>compute the element-wise maximum and |
minimum, respectively. | minimum, respectively. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>: the element types of <math id="Ch2.I5.ix4.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> and <math id="Ch2.I5.ix4.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> have to be of the same type.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>: the element types of <math id='Ch2.I5.ix4.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> and <math id='Ch2.I5.ix4.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> have to be of the same type.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I5.ix5" class="ltx_item"><span class="ltx_tag ltx_tag_description">where (p, <math id="Ch2.I5.ix5.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math>, <math id="Ch2.I5.ix5.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math>)</span></dt> | <dt id='Ch2.I5.ix5' class='ltx_item'><span class='ltx_tag ltx_tag_description'>where (p, <math id='Ch2.I5.ix5.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math>, <math id='Ch2.I5.ix5.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math>)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I5.ix5.p1" class="ltx_para"> | <div id='Ch2.I5.ix5.p1' class='ltx_para'> |
<p class="ltx_p">is an element-wise extension of a conditional. | <p class='ltx_p'>is an element-wise extension of a conditional. |
It expects <math id="Ch2.I5.ix5.p1.m1" class="ltx_Math" alttext="p" display="inline"><mi>p</mi></math>, <math id="Ch2.I5.ix5.p1.m2" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math>, and <math id="Ch2.I5.ix5.p1.m3" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> either to have identical shapes | It expects <math id='Ch2.I5.ix5.p1.m1' class='ltx_Math' alttext='p' display='inline'><mi>p</mi></math>, <math id='Ch2.I5.ix5.p1.m2' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math>, and <math id='Ch2.I5.ix5.p1.m3' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> either to have identical shapes |
or to be scalar. If at least one of the three arrays is non-scalar, that | or to be scalar. If at least one of the three arrays is non-scalar, that |
shape serves as shape of the result, whose values are taken from | shape serves as shape of the result, whose values are taken from |
<math id="Ch2.I5.ix5.p1.m4" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> or <math id="Ch2.I5.ix5.p1.m5" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> depending on the value (s) of <math id="Ch2.I5.ix5.p1.m6" class="ltx_Math" alttext="p" display="inline"><mi>p</mi></math>. | <math id='Ch2.I5.ix5.p1.m4' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> or <math id='Ch2.I5.ix5.p1.m5' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> depending on the value (s) of <math id='Ch2.I5.ix5.p1.m6' class='ltx_Math' alttext='p' display='inline'><mi>p</mi></math>. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I5.I1" class="ltx_itemize"> | <ul id='Ch2.I5.I1' class='ltx_itemize'> |
<li id="Ch2.I5.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I5.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I5.I1.i1.p1" class="ltx_para"> | <div id='Ch2.I5.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p">the element type of <math id="Ch2.I5.I1.i1.p1.m1" class="ltx_Math" alttext="p" display="inline"><mi>p</mi></math> has to be boolean | <p class='ltx_p'>the element type of <math id='Ch2.I5.I1.i1.p1.m1' class='ltx_Math' alttext='p' display='inline'><mi>p</mi></math> has to be boolean |
</p> | </p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I5.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I5.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I5.I1.i2.p1" class="ltx_para"> | <div id='Ch2.I5.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p">the element types of <math id="Ch2.I5.I1.i2.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> and <math id="Ch2.I5.I1.i2.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> have to be identical</p> | <p class='ltx_p'>the element types of <math id='Ch2.I5.I1.i2.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> and <math id='Ch2.I5.I1.i2.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> have to be identical</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I5.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I5.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I5.I1.i3.p1" class="ltx_para"> | <div id='Ch2.I5.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I5.I1.i3.p1.m1" class="ltx_Math" alttext="{{{{{{{{{{{{{{\exists\textrm{\lstinline 1}}}:((\textrm{\lstinline 1}}}\vee\textrm{\lstinline | <p class='ltx_p'><math id='Ch2.I5.I1.i3.p1.m1' class='ltx_Math' alttext='{{{{{{{{{{{{{{\exists\textrm{\lstinline 1}}}:((\textrm{\lstinline 1}}}\vee\textrm{\lstinline |
1% | 1% |
}}})\wedge(\textrm{\lstinline 1}}}\vee\textrm{\lstinline 1}}})\wedge(\textrm{% | }}})\wedge(\textrm{\lstinline 1}}}\vee\textrm{\lstinline 1}}})\wedge(\textrm{% |
\lstinline 1}}}\vee\textrm{\lstinline 1}}}))" display="inline"><mrow><mrow><mo>∃</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">shp</mtext></mrow><mo>:</mo><mrow><mo stretchy="false">(</mo><mrow><mrow><mo stretchy="false">(</mo><mrow><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>p</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>shp</mtext></mrow><mo>∨</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>p</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>[]</mtext></mrow></mrow><mo stretchy="false">)</mo></mrow><mo>∧</mo><mrow><mo stretchy="false">(</mo><mrow><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>e_1</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>shp</mtext></mrow><mo>∨</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>e_1</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>[]</mtext></mrow></mrow><mo stretchy="false">)</mo></mrow><mo>∧</mo><mrow><mo stretchy="false">(</mo><mrow><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>e_2</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>shp</mtext></mrow><mo>∨</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>e_2</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>[]</mtext></mrow></mrow><mo stretchy="false">)</mo></mrow></mrow><mo stretchy="false">)</mo></mrow></mrow></math>.</p> | \lstinline 1}}}\vee\textrm{\lstinline 1}}}))' display='inline'><mrow><mrow><mo>∃</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>shp</mtext></mrow><mo>:</mo><mrow><mo stretchy='false'>(</mo><mrow><mrow><mo stretchy='false'>(</mo><mrow><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>p</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>shp</mtext></mrow><mo>∨</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>p</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>[]</mtext></mrow></mrow><mo stretchy='false'>)</mo></mrow><mo>∧</mo><mrow><mo stretchy='false'>(</mo><mrow><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>e_1</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>shp</mtext></mrow><mo>∨</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>e_1</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>[]</mtext></mrow></mrow><mo stretchy='false'>)</mo></mrow><mo>∧</mo><mrow><mo stretchy='false'>(</mo><mrow><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>e_2</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>shp</mtext></mrow><mo>∨</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>e_2</mtext><mtext>)</mtext><mtext> </mtext><mtext>==</mtext><mtext> </mtext><mtext>[]</mtext></mrow></mrow><mo stretchy='false'>)</mo></mrow></mrow><mo stretchy='false'>)</mo></mrow></mrow></math>.</p> |
</div> | </div> |
</li> | </li> |
</dl> | </dl> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx2.p4" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx2.p4' class='ltx_para'> |
<p class="ltx_p">Again, these operations are fairly self-explanatory. | <p class='ltx_p'>Again, these operations are fairly self-explanatory. |
Nevertheless, we present a few examples:</p> | Nevertheless, we present a few examples:</p> |
</div> | </div> |
<figure id="LST10" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST10' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 10: </span>Elementwise Extensions</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 10: </span>Elementwise Extensions</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKICBw%0AcmludChtYXQpOwoKICBtYXQyID0gd2hlcmUobWF0ICUgMiA9PSAwLCBtYXQsIC1tYXQpOwogIHBy%0AaW50KG1hdDIpOwoKICBwcmludChtYXgobWF0MiwgMCkpOwoKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKICBw%0AcmludChtYXQpOwoKICBtYXQyID0gd2hlcmUobWF0ICUgMiA9PSAwLCBtYXQsIC1tYXQpOwogIHBy%0AaW50KG1hdDIpOwoKICBwcmludChtYXgobWF0MiwgMCkpOwoKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6,7,8,9]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6,7,8,9]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">vect</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+10,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+20]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>vect</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+10,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+20]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat2</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">where</span>(<span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>%<span class="ltx_text ltx_lst_space"> </span>2<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>,<span class="ltx_text ltx_lst_space"> </span>-<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat2</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>where</span>(<span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>%<span class='ltx_text ltx_lst_space'> </span>2<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>,<span class='ltx_text ltx_lst_space'> </span>-<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat2</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat2</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">max</span>(<span class="ltx_text ltx_lst_identifier">mat2</span>,<span class="ltx_text ltx_lst_space"> </span>0)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>max</span>(<span class='ltx_text ltx_lst_identifier'>mat2</span>,<span class='ltx_text ltx_lst_space'> </span>0)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS1.SSSx2.p5" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx2.p5' class='ltx_para'> |
<p class="ltx_p">The most interesting part of this example is the definition | <p class='ltx_p'>The most interesting part of this example is the definition |
of the matrix <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat2</span> in line 11. | of the matrix <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat2</span> in line 11. |
The even numbers from the matrix <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> are taken as they are, whereas | The even numbers from the matrix <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> are taken as they are, whereas |
the odd numbers are negated. | the odd numbers are negated. |
Note here, that all sub expressions in predicate position are in fact non-scalar | Note here, that all sub expressions in predicate position are in fact non-scalar |
arrays: <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">(<span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>\%<span class="ltx_text ltx_lst_space"> </span>2)</span> denotes a matrix of zeros and ones and | arrays: <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>(<span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>\%<span class='ltx_text ltx_lst_space'> </span>2)</span> denotes a matrix of zeros and ones and |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">(<span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>\%<span class="ltx_text ltx_lst_space"> </span>2)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span></span> denotes a matrix of boolean values.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>(<span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>\%<span class='ltx_text ltx_lst_space'> </span>2)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span></span> denotes a matrix of boolean values.</p> |
</div> | </div> |
<div id="Thmtheorem6" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem6' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 6. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 6. </h6> |
<div id="Thmtheorem6.p1" class="ltx_para"> | <div id='Thmtheorem6.p1' class='ltx_para'> |
<p class="ltx_p">What results do you expect from the following expressions:</p> | <p class='ltx_p'>What results do you expect from the following expressions:</p> |
<ul id="Ch2.I6" class="ltx_itemize"> | <ul id='Ch2.I6' class='ltx_itemize'> |
<li id="Ch2.I6.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I6.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I6.i1.p1" class="ltx_para"> | <div id='Ch2.I6.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">min</span>(<span class="ltx_text ltx_lst_identifier">reshape</span>([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[]),<span class="ltx_text ltx_lst_space"> </span>42)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>min</span>(<span class='ltx_text ltx_lst_identifier'>reshape</span>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[]),<span class='ltx_text ltx_lst_space'> </span>42)</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I6.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I6.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I6.i2.p1" class="ltx_para"> | <div id='Ch2.I6.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">reshape</span>([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[])<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reshape</span>([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[])</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>reshape</span>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[])<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reshape</span>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[])</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I6.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I6.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I6.i3.p1" class="ltx_para"> | <div id='Ch2.I6.i3.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">reshape</span>([1,1],<span class="ltx_text ltx_lst_space"> </span>[1])<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reshape</span>([1],<span class="ltx_text ltx_lst_space"> </span>[1])</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>reshape</span>([1,1],<span class='ltx_text ltx_lst_space'> </span>[1])<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reshape</span>([1],<span class='ltx_text ltx_lst_space'> </span>[1])</span>?</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S2.SS1.SSSx3" class="ltx_subsubsection"> | <section id='Ch2.S2.SS1.SSSx3' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Restructuring Operations</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Restructuring Operations</h6> |
| |
<div id="Ch2.S2.SS1.SSSx3.p1" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx3.p1' class='ltx_para'> |
<p class="ltx_p">The operations to be introduced here do not compute new values at all. | <p class='ltx_p'>The operations to be introduced here do not compute new values at all. |
Instead, they are meant to create slightly differently structured arrays | Instead, they are meant to create slightly differently structured arrays |
from existing ones. | from existing ones. |
Therefore, they are applicable to arrays of all built-in element types.</p> | Therefore, they are applicable to arrays of all built-in element types.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx3.p2" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx3.p2' class='ltx_para'> |
<dl id="Ch2.I7" class="ltx_description"> | <dl id='Ch2.I7' class='ltx_description'> |
<dt id="Ch2.I7.ix1" class="ltx_item"><span class="ltx_tag ltx_tag_description">take(sv, a)</span></dt> | <dt id='Ch2.I7.ix1' class='ltx_item'><span class='ltx_tag ltx_tag_description'>take(sv, a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I7.ix1.p1" class="ltx_para"> | <div id='Ch2.I7.ix1.p1' class='ltx_para'> |
<p class="ltx_p">takes as many elements from the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> as indicated | <p class='ltx_p'>takes as many elements from the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> as indicated |
by the shape vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span>. Each element of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span> corresponds to | by the shape vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span>. Each element of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span> corresponds to |
one axis of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> starting from the leftmost one. | one axis of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> starting from the leftmost one. |
For positive components of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span>, the elements are taken from the | For positive components of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span>, the elements are taken from the |
“beginning”, i.e. starting with index 0, otherwise they are taken | “beginning”, i.e. starting with index 0, otherwise they are taken |
from the “end” including the maximum legal index of the corresponding | from the “end” including the maximum legal index of the corresponding |
axis. | axis. |
All axes of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> where there exists no corresponding element in | All axes of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> where there exists no corresponding element in |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span> are taken entirely. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span> are taken entirely. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I7.I1" class="ltx_itemize"> | <ul id='Ch2.I7.I1' class='ltx_itemize'> |
<li id="Ch2.I7.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I1.i1.p1" class="ltx_para"> | <div id='Ch2.I7.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">sv</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>sv</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I1.i2.p1" class="ltx_para"> | <div id='Ch2.I7.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">sv</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>sv</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I1.i3.p1" class="ltx_para"> | <div id='Ch2.I7.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I7.I1.i3.p1.m1" class="ltx_Math" alttext="{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% | <p class='ltx_p'><math id='Ch2.I7.I1.i3.p1.m1' class='ltx_Math' alttext='{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% |
\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mn>0</mn><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> | \lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mn>0</mn><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I7.ix2" class="ltx_item"><span class="ltx_tag ltx_tag_description">drop(sv, a)</span></dt> | <dt id='Ch2.I7.ix2' class='ltx_item'><span class='ltx_tag ltx_tag_description'>drop(sv, a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I7.ix2.p1" class="ltx_para"> | <div id='Ch2.I7.ix2.p1' class='ltx_para'> |
<p class="ltx_p">drops as many elements from the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> as indicated | <p class='ltx_p'>drops as many elements from the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> as indicated |
by the shape vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span>. Each element of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span> corresponds to | by the shape vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span>. Each element of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span> corresponds to |
one axis of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> starting from the leftmost one. | one axis of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> starting from the leftmost one. |
For positive components of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span>, the elements are dropped from the | For positive components of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span>, the elements are dropped from the |
“beginning”, i.e. starting with index 0, otherwise they are dropped | “beginning”, i.e. starting with index 0, otherwise they are dropped |
from the “end” starting from the maximum legal index of the corresponding | from the “end” starting from the maximum legal index of the corresponding |
axis. | axis. |
All axes of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> where there exists no corresponding element in | All axes of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> where there exists no corresponding element in |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span> are left untouched. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span> are left untouched. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I7.I2" class="ltx_itemize"> | <ul id='Ch2.I7.I2' class='ltx_itemize'> |
<li id="Ch2.I7.I2.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I2.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I2.i1.p1" class="ltx_para"> | <div id='Ch2.I7.I2.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">sv</span>)=<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>sv</span>)=<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I2.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I2.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I2.i2.p1" class="ltx_para"> | <div id='Ch2.I7.I2.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">sv</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>sv</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I2.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I2.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I2.i3.p1" class="ltx_para"> | <div id='Ch2.I7.I2.i3.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I7.I2.i3.p1.m1" class="ltx_Math" alttext="{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% | <p class='ltx_p'><math id='Ch2.I7.I2.i3.p1.m1' class='ltx_Math' alttext='{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% |
\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mn>0</mn><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> | \lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mn>0</mn><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I7.ix3" class="ltx_item"><span class="ltx_tag ltx_tag_description">tile(sv, ov, a)</span></dt> | <dt id='Ch2.I7.ix3' class='ltx_item'><span class='ltx_tag ltx_tag_description'>tile(sv, ov, a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I7.ix3.p1" class="ltx_para"> | <div id='Ch2.I7.ix3.p1' class='ltx_para'> |
<p class="ltx_p">takes a tile of shape <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span> from <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> | <p class='ltx_p'>takes a tile of shape <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span> from <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> |
starting at the index specified by the offset vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">ov</span>. | starting at the index specified by the offset vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>ov</span>. |
For axes where no values of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sv</span> or <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">ov</span> are specified | For axes where no values of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sv</span> or <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>ov</span> are specified |
these are assumed to be identical to the extent of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> along that axis or 0, | these are assumed to be identical to the extent of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> along that axis or 0, |
respectively. | respectively. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I7.I3" class="ltx_itemize"> | <ul id='Ch2.I7.I3' class='ltx_itemize'> |
<li id="Ch2.I7.I3.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I3.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I3.i1.p1" class="ltx_para"> | <div id='Ch2.I7.I3.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">sv</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">ov</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>sv</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>ov</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span> |
</p> | </p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I3.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I3.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I3.i2.p1" class="ltx_para"> | <div id='Ch2.I7.I3.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">sv</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>sv</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I3.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I3.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I3.i3.p1" class="ltx_para"> | <div id='Ch2.I7.I3.i3.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">ov</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>ov</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I3.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I3.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I3.i4.p1" class="ltx_para"> | <div id='Ch2.I7.I3.i4.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I7.I3.i4.p1.m1" class="ltx_Math" alttext="{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% | <p class='ltx_p'><math id='Ch2.I7.I3.i4.p1.m1' class='ltx_Math' alttext='{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% |
\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mn>0</mn><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>ov</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>ov</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> | \lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mn>0</mn><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>ov</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>ov</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I3.i5" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I3.i5' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I3.i5.p1" class="ltx_para"> | <div id='Ch2.I7.I3.i5.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I7.I3.i5.p1.m1" class="ltx_Math" alttext="{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% | <p class='ltx_p'><math id='Ch2.I7.I3.i5.p1.m1' class='ltx_Math' alttext='{{{{{{\forall\textrm{\lstinline 1}}}\in\{0,\dots,\textrm{\lstinline 1}}}\}:\textrm{% |
\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mn>0</mn><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>min</mtext><mtext>(</mtext><mtext>shape</mtext><mtext>(</mtext><mtext>ov</mtext><mtext>)[[0]],</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]])</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>ov</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext>+</mtext><mtext> </mtext><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> | \lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mn>0</mn><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>min</mtext><mtext>(</mtext><mtext>shape</mtext><mtext>(</mtext><mtext>ov</mtext><mtext>)[[0]],</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]])</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>ov</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext>+</mtext><mtext> </mtext><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I3.i6" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I3.i6' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I3.i6.p1" class="ltx_para"> | <div id='Ch2.I7.I3.i6.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I7.I3.i6.p1.m1" class="ltx_Math" alttext="{{{{{{{{\forall\textrm{\lstinline 1}}}\in\{\textrm{\lstinline 1}}},\dots,\textrm{% | <p class='ltx_p'><math id='Ch2.I7.I3.i6.p1.m1' class='ltx_Math' alttext='{{{{{{{{\forall\textrm{\lstinline 1}}}\in\{\textrm{\lstinline 1}}},\dots,\textrm{% |
\lstinline 1}}}\}:\textrm{\lstinline 1}}}" display="inline"><mrow><mrow><mrow><mo>∀</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</mtext></mrow><mo>∈</mo><mrow><mo stretchy="false">{</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>min</mtext><mtext>(</mtext><mtext>shape</mtext><mtext>(</mtext><mtext>ov</mtext><mtext>)[[0]],</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]])</mtext></mrow><mo>,</mo><mi mathvariant="normal">…</mi><mo>,</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow><mo>:</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> | \lstinline 1}}}\}:\textrm{\lstinline 1}}}' display='inline'><mrow><mrow><mrow><mo>∀</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</mtext></mrow><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>min</mtext><mtext>(</mtext><mtext>shape</mtext><mtext>(</mtext><mtext>ov</mtext><mtext>)[[0]],</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]])</mtext></mrow><mo>,</mo><mi mathvariant='normal'>…</mi><mo>,</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>shape</mtext><mtext>(</mtext><mtext>sv</mtext><mtext>)[[0]]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow><mo>:</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>sv</mtext><mtext>[[</mtext><mtext>i</mtext><mtext>]]</mtext><mtext> </mtext><mtext><=</mtext><mtext> </mtext><mtext>shape</mtext><mtext>(</mtext><mtext>a</mtext><mtext>)[[</mtext><mtext>i</mtext><mtext>]]</mtext></mrow></mrow></math></p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I7.ix4" class="ltx_item"><span class="ltx_tag ltx_tag_description"><math id="Ch2.I7.ix4.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> ++ <math id="Ch2.I7.ix4.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math></span></dt> | <dt id='Ch2.I7.ix4' class='ltx_item'><span class='ltx_tag ltx_tag_description'><math id='Ch2.I7.ix4.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> ++ <math id='Ch2.I7.ix4.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math></span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I7.ix4.p1" class="ltx_para"> | <div id='Ch2.I7.ix4.p1' class='ltx_para'> |
<p class="ltx_p">concatenates arrays <math id="Ch2.I7.ix4.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> and <math id="Ch2.I7.ix4.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> with respect to the leftmost axis. | <p class='ltx_p'>concatenates arrays <math id='Ch2.I7.ix4.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> and <math id='Ch2.I7.ix4.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> with respect to the leftmost axis. |
As in <span class="ltx_text ltx_font_smallcaps">SaC</span> all arrays are homogeneous, this requires all but the leftmost | As in <span class='ltx_text ltx_font_smallcaps'>SaC</span> all arrays are homogeneous, this requires all but the leftmost |
axis to be of identical extent. | axis to be of identical extent. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I7.I4" class="ltx_itemize"> | <ul id='Ch2.I7.I4' class='ltx_itemize'> |
<li id="Ch2.I7.I4.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I4.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I4.i1.p1" class="ltx_para"> | <div id='Ch2.I7.I4.i1.p1' class='ltx_para'> |
<p class="ltx_p"><math id="Ch2.I7.I4.i1.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math> and <math id="Ch2.I7.I4.i1.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math> have to be of identical element type</p> | <p class='ltx_p'><math id='Ch2.I7.I4.i1.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math> and <math id='Ch2.I7.I4.i1.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math> have to be of identical element type</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I4.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I4.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I4.i2.p1" class="ltx_para"> | <div id='Ch2.I7.I4.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">drop</span>(1,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">shape</span>(<math id="Ch2.I7.I4.i2.p1.m1" class="ltx_Math" alttext="e_{1}" display="inline"><msub><mi>e</mi><mn>1</mn></msub></math>))<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">drop</span>(1,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">shape</span>(<math id="Ch2.I7.I4.i2.p1.m2" class="ltx_Math" alttext="e_{2}" display="inline"><msub><mi>e</mi><mn>2</mn></msub></math>))</span>.</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>drop</span>(1,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>shape</span>(<math id='Ch2.I7.I4.i2.p1.m1' class='ltx_Math' alttext='e_{1}' display='inline'><msub><mi>e</mi><mn>1</mn></msub></math>))<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>drop</span>(1,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>shape</span>(<math id='Ch2.I7.I4.i2.p1.m2' class='ltx_Math' alttext='e_{2}' display='inline'><msub><mi>e</mi><mn>2</mn></msub></math>))</span>.</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I7.ix5" class="ltx_item"><span class="ltx_tag ltx_tag_description">rotate(ov, a)</span></dt> | <dt id='Ch2.I7.ix5' class='ltx_item'><span class='ltx_tag ltx_tag_description'>rotate(ov, a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I7.ix5.p1" class="ltx_para"> | <div id='Ch2.I7.ix5.p1' class='ltx_para'> |
<p class="ltx_p">rotates the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> with respect to those axes specified | <p class='ltx_p'>rotates the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> with respect to those axes specified |
by the offset vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">ov</span>. | by the offset vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>ov</span>. |
Starting from the leftmost axis, the elements of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">ov</span> specify by how many | Starting from the leftmost axis, the elements of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>ov</span> specify by how many |
positions the elements are rotated towards increasing indices (positive values) | positions the elements are rotated towards increasing indices (positive values) |
or towards decreasing indices (negative values). | or towards decreasing indices (negative values). |
<span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I7.I5" class="ltx_itemize"> | <ul id='Ch2.I7.I5' class='ltx_itemize'> |
<li id="Ch2.I7.I5.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I5.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I5.i1.p1" class="ltx_para"> | <div id='Ch2.I7.I5.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">ov</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>ov</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I5.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I5.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I5.i2.p1" class="ltx_para"> | <div id='Ch2.I7.I5.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">ov</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>ov</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I7.ix6" class="ltx_item"><span class="ltx_tag ltx_tag_description">shift(ov, expr, a)</span></dt> | <dt id='Ch2.I7.ix6' class='ltx_item'><span class='ltx_tag ltx_tag_description'>shift(ov, expr, a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I7.ix6.p1" class="ltx_para"> | <div id='Ch2.I7.ix6.p1' class='ltx_para'> |
<p class="ltx_p">shifts the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> with respect to those axes specified | <p class='ltx_p'>shifts the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> with respect to those axes specified |
by the offset vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">ov</span>. | by the offset vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>ov</span>. |
The element positions that become “void” are filled by the (scalar) | The element positions that become “void” are filled by the (scalar) |
default element <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">expr</span>. | default element <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>expr</span>. |
Again, depending on the sign of the values of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">ov</span> the elements | Again, depending on the sign of the values of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>ov</span> the elements |
are either shifted towards increasing or decreasing indices. | are either shifted towards increasing or decreasing indices. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions</span>:</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions</span>:</p> |
<ul id="Ch2.I7.I6" class="ltx_itemize"> | <ul id='Ch2.I7.I6' class='ltx_itemize'> |
<li id="Ch2.I7.I6.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I6.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I6.i1.p1" class="ltx_para"> | <div id='Ch2.I7.I6.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">ov</span>)<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>1</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>ov</span>)<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>1</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I6.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I6.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I6.i2.p1" class="ltx_para"> | <div id='Ch2.I7.I6.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">ov</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">dim</span>(<span class="ltx_text ltx_lst_identifier">a</span>)</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>ov</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>dim</span>(<span class='ltx_text ltx_lst_identifier'>a</span>)</span></p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I7.I6.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I7.I6.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch2.I7.I6.i3.p1" class="ltx_para"> | <div id='Ch2.I7.I6.i3.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">expr</span>)[[0]]<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>[]</span></p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>expr</span>)[[0]]<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>[]</span></p> |
</div> | </div> |
</li> | </li> |
</dl> | </dl> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx3.p3" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx3.p3' class='ltx_para'> |
<p class="ltx_p">A few examples:</p> | <p class='ltx_p'>A few examples:</p> |
</div> | </div> |
<figure id="LST11" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST11' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 11: </span>Restructuring Operations</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 11: </span>Restructuring Operations</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKICBw%0AcmludChtYXQpOwoKICBwcmludCh0YWtlKFsyLC0yXSwgbWF0KSk7CiAgcHJpbnQodGFrZShbMl0s%0AIG1hdCkpOwogIHByaW50KHRha2UoW10sIG1hdCkpOwoKICBwcmludCh0YWtlKFswXSwgbWF0KSk7%0ACiAgcHJpbnQodGFrZShbMiwgMF0sIG1hdCkpOwogIHByaW50KHRha2UoWzJdLCByZXNoYXBlKFsz%0ALDAsNV0sIFtdKSkpOwoKICBwcmludChkcm9wKFswLCAtMV0sIG1hdCkpOwoKICBwcmludChtYXQg%0AKysgbWF0KTsKCiAgcHJpbnQocm90YXRlKFstMSwgNDJdLCBtYXQpKTsKICBwcmludChyb3RhdGUo%0AWyAxXSwgbWF0KSk7CgogIHByaW50KHNoaWZ0KFswLCAtMl0sIDAsIG1hdCkpOwogIHByaW50KHNo%0AaWZ0KFswLCAtMjJdLCAwLCBtYXQpKTsKICBwcmludChzaGlmdChbMV0sIDAsIG1hdCkpOwoKICBy%0AZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKICBw%0AcmludChtYXQpOwoKICBwcmludCh0YWtlKFsyLC0yXSwgbWF0KSk7CiAgcHJpbnQodGFrZShbMl0s%0AIG1hdCkpOwogIHByaW50KHRha2UoW10sIG1hdCkpOwoKICBwcmludCh0YWtlKFswXSwgbWF0KSk7%0ACiAgcHJpbnQodGFrZShbMiwgMF0sIG1hdCkpOwogIHByaW50KHRha2UoWzJdLCByZXNoYXBlKFsz%0ALDAsNV0sIFtdKSkpOwoKICBwcmludChkcm9wKFswLCAtMV0sIG1hdCkpOwoKICBwcmludChtYXQg%0AKysgbWF0KTsKCiAgcHJpbnQocm90YXRlKFstMSwgNDJdLCBtYXQpKTsKICBwcmludChyb3RhdGUo%0AWyAxXSwgbWF0KSk7CgogIHByaW50KHNoaWZ0KFswLCAtMl0sIDAsIG1hdCkpOwogIHByaW50KHNo%0AaWZ0KFswLCAtMjJdLCAwLCBtYXQpKTsKICBwcmludChzaGlmdChbMV0sIDAsIG1hdCkpOwoKICBy%0AZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6,7,8,9]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6,7,8,9]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">vect</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+10,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+20]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>vect</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+10,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+20]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">take</span>([2,-2],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>take</span>([2,-2],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">take</span>([2],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>take</span>([2],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">take</span>([],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>take</span>([],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">take</span>([0],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>take</span>([0],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">take</span>([2,<span class="ltx_text ltx_lst_space"> </span>0],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>take</span>([2,<span class='ltx_text ltx_lst_space'> </span>0],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">take</span>([2],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reshape</span>([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[]))); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>take</span>([2],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reshape</span>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[]))); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">drop</span>([0,<span class="ltx_text ltx_lst_space"> </span>-1],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>drop</span>([0,<span class='ltx_text ltx_lst_space'> </span>-1],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>++<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>++<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">rotate</span>([-1,<span class="ltx_text ltx_lst_space"> </span>42],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>rotate</span>([-1,<span class='ltx_text ltx_lst_space'> </span>42],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">rotate</span>([<span class="ltx_text ltx_lst_space"> </span>1],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>rotate</span>([<span class='ltx_text ltx_lst_space'> </span>1],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">shift</span>([0,<span class="ltx_text ltx_lst_space"> </span>-2],<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>shift</span>([0,<span class='ltx_text ltx_lst_space'> </span>-2],<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">shift</span>([0,<span class="ltx_text ltx_lst_space"> </span>-22],<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>shift</span>([0,<span class='ltx_text ltx_lst_space'> </span>-22],<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">shift</span>([1],<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>shift</span>([1],<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">30</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>30</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">31</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>31</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS1.SSSx3.p4" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx3.p4' class='ltx_para'> |
<p class="ltx_p">The applications of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">take</span> in lines 11-13 demonstrate, how the | <p class='ltx_p'>The applications of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>take</span> in lines 11-13 demonstrate, how the |
dimensionality of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> remains unaffected by the length of the | dimensionality of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> remains unaffected by the length of the |
first argument. | first argument. |
Only the shape of the result and the “side” from which the elements | Only the shape of the result and the “side” from which the elements |
are taken is defined by it.</p> | are taken is defined by it.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx3.p5" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx3.p5' class='ltx_para'> |
<p class="ltx_p">The applications in lines 15-17 demonstrate how empty arrays are dealt | <p class='ltx_p'>The applications in lines 15-17 demonstrate how empty arrays are dealt |
with in the individual argument positions. | with in the individual argument positions. |
In particular from the example in line 17 it can be seen how well the | In particular from the example in line 17 it can be seen how well the |
fits nicely into the overall framework.</p> | fits nicely into the overall framework.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx3.p6" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx3.p6' class='ltx_para'> |
<p class="ltx_p">The remaining examples are rather straightforward. | <p class='ltx_p'>The remaining examples are rather straightforward. |
The only aspect of interest here may be the “overflows” in the | The only aspect of interest here may be the “overflows” in the |
rotation and shift parameters in lines 24 and 28, respectively.</p> | rotation and shift parameters in lines 24 and 28, respectively.</p> |
</div> | </div> |
<div id="Thmtheorem7" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem7' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 7. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 7. </h6> |
<div id="Thmtheorem7.p1" class="ltx_para"> | <div id='Thmtheorem7.p1' class='ltx_para'> |
<p class="ltx_p">Which of the following expressions can be reformulated in terms | <p class='ltx_p'>Which of the following expressions can be reformulated in terms |
of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">take</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">++</span>, and the basic operations defined | of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>take</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>++</span>, and the basic operations defined |
in the previous parts?</p> | in the previous parts?</p> |
<ul id="Ch2.I8" class="ltx_itemize"> | <ul id='Ch2.I8' class='ltx_itemize'> |
<li id="Ch2.I8.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I8.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I8.i1.p1" class="ltx_para"> | <div id='Ch2.I8.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">drop</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">v</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>drop</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>v</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I8.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I8.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I8.i2.p1" class="ltx_para"> | <div id='Ch2.I8.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">tile</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">v</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">o</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>tile</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>v</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>o</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I8.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I8.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I8.i3.p1" class="ltx_para"> | <div id='Ch2.I8.i3.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shift</span><span class="ltx_text ltx_lst_space"> </span>([<span class="ltx_text ltx_lst_identifier">n</span>],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">e</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shift</span><span class='ltx_text ltx_lst_space'> </span>([<span class='ltx_text ltx_lst_identifier'>n</span>],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>e</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I8.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I8.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I8.i4.p1" class="ltx_para"> | <div id='Ch2.I8.i4.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">shift</span><span class="ltx_text ltx_lst_space"> </span>([<span class="ltx_text ltx_lst_identifier">m</span>,<span class="ltx_text ltx_lst_identifier">n</span>],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">e</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>shift</span><span class='ltx_text ltx_lst_space'> </span>([<span class='ltx_text ltx_lst_identifier'>m</span>,<span class='ltx_text ltx_lst_identifier'>n</span>],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>e</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I8.i5" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I8.i5' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I8.i5.p1" class="ltx_para"> | <div id='Ch2.I8.i5.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">rotate</span><span class="ltx_text ltx_lst_space"> </span>([<span class="ltx_text ltx_lst_identifier">n</span>],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>rotate</span><span class='ltx_text ltx_lst_space'> </span>([<span class='ltx_text ltx_lst_identifier'>n</span>],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch2.I8.i6" class="ltx_item" style="list-style-type:none;"> | <li id='Ch2.I8.i6' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch2.I8.i6.p1" class="ltx_para"> | <div id='Ch2.I8.i6.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">rotate</span><span class="ltx_text ltx_lst_space"> </span>([<span class="ltx_text ltx_lst_identifier">m</span>,<span class="ltx_text ltx_lst_identifier">n</span>],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>)</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>rotate</span><span class='ltx_text ltx_lst_space'> </span>([<span class='ltx_text ltx_lst_identifier'>m</span>,<span class='ltx_text ltx_lst_identifier'>n</span>],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>)</span>?</p> |
</div> | </div> |
</li> | </li> |
</ul> | </ul> |
<p class="ltx_p">Can we define the general versions of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">shift</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">rotate</span> | <p class='ltx_p'>Can we define the general versions of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>shift</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>rotate</span> |
as well?</p> | as well?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S2.SS1.SSSx4" class="ltx_subsubsection"> | <section id='Ch2.S2.SS1.SSSx4' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Reduction Operations</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Reduction Operations</h6> |
| |
<div id="Ch2.S2.SS1.SSSx4.p1" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx4.p1' class='ltx_para'> |
<p class="ltx_p">The library of standard array operations that comes with the current <span class="ltx_text ltx_font_smallcaps">SaC</span> release also contains a set of functions | <p class='ltx_p'>The library of standard array operations that comes with the current <span class='ltx_text ltx_font_smallcaps'>SaC</span> release also contains a set of functions |
that fold all (scalar) elements of an array into a single one. The most common | that fold all (scalar) elements of an array into a single one. The most common |
ones of these are described here.</p> | ones of these are described here.</p> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx4.p2" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx4.p2' class='ltx_para'> |
<dl id="Ch2.I9" class="ltx_description"> | <dl id='Ch2.I9' class='ltx_description'> |
<dt id="Ch2.I9.ix1" class="ltx_item"><span class="ltx_tag ltx_tag_description">sum(a)</span></dt> | <dt id='Ch2.I9.ix1' class='ltx_item'><span class='ltx_tag ltx_tag_description'>sum(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I9.ix1.p1" class="ltx_para"> | <div id='Ch2.I9.ix1.p1' class='ltx_para'> |
<p class="ltx_p">sums up all elements of the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is | <p class='ltx_p'>sums up all elements of the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is |
an empty array, <span class="ltx_text ltx_lstlisting"></span> is returned. | an empty array, <span class='ltx_text ltx_lstlisting'></span> is returned. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions:</span> the element type has to be numerical.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions:</span> the element type has to be numerical.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I9.ix2" class="ltx_item"><span class="ltx_tag ltx_tag_description">prod(a)</span></dt> | <dt id='Ch2.I9.ix2' class='ltx_item'><span class='ltx_tag ltx_tag_description'>prod(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I9.ix2.p1" class="ltx_para"> | <div id='Ch2.I9.ix2.p1' class='ltx_para'> |
<p class="ltx_p">multiplies all elements of the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is | <p class='ltx_p'>multiplies all elements of the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is |
an empty array, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">1</span> is returned. | an empty array, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>1</span> is returned. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions:</span> the element type has to be numerical.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions:</span> the element type has to be numerical.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I9.ix3" class="ltx_item"><span class="ltx_tag ltx_tag_description">all(a)</span></dt> | <dt id='Ch2.I9.ix3' class='ltx_item'><span class='ltx_tag ltx_tag_description'>all(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I9.ix3.p1" class="ltx_para"> | <div id='Ch2.I9.ix3.p1' class='ltx_para'> |
<p class="ltx_p">yields <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">true</span>, iff all elements of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> are <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">true</span>. | <p class='ltx_p'>yields <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>true</span>, iff all elements of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> are <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>true</span>. |
If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is an empty array, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">true</span> is returned. | If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is an empty array, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>true</span> is returned. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions:</span> the element type has to be boolean.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions:</span> the element type has to be boolean.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I9.ix4" class="ltx_item"><span class="ltx_tag ltx_tag_description">any(a)</span></dt> | <dt id='Ch2.I9.ix4' class='ltx_item'><span class='ltx_tag ltx_tag_description'>any(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I9.ix4.p1" class="ltx_para"> | <div id='Ch2.I9.ix4.p1' class='ltx_para'> |
<p class="ltx_p">yields <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">true</span>, iff at least one element of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> | <p class='ltx_p'>yields <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>true</span>, iff at least one element of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> |
is <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">true</span>. If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is an empty array, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">false</span> is returned. | is <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>true</span>. If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is an empty array, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>false</span> is returned. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions:</span> the element type has to be boolean.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions:</span> the element type has to be boolean.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I9.ix5" class="ltx_item"><span class="ltx_tag ltx_tag_description">maxval(a)</span></dt> | <dt id='Ch2.I9.ix5' class='ltx_item'><span class='ltx_tag ltx_tag_description'>maxval(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I9.ix5.p1" class="ltx_para"> | <div id='Ch2.I9.ix5.p1' class='ltx_para'> |
<p class="ltx_p">computes the maximum value of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is | <p class='ltx_p'>computes the maximum value of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is |
an empty array, the minimal number of the according element type is | an empty array, the minimal number of the according element type is |
returned. | returned. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions:</span> the element type has to be numerical.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions:</span> the element type has to be numerical.</p> |
</div> | </div> |
</dd> | </dd> |
<dt id="Ch2.I9.ix6" class="ltx_item"><span class="ltx_tag ltx_tag_description">minval(a)</span></dt> | <dt id='Ch2.I9.ix6' class='ltx_item'><span class='ltx_tag ltx_tag_description'>minval(a)</span></dt> |
<dd class="ltx_item"> | <dd class='ltx_item'> |
<div id="Ch2.I9.ix6.p1" class="ltx_para"> | <div id='Ch2.I9.ix6.p1' class='ltx_para'> |
<p class="ltx_p">computes the minimum value of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. If <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is | <p class='ltx_p'>computes the minimum value of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. If <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is |
an empty array, the maximal number of the according element type is | an empty array, the maximal number of the according element type is |
returned. | returned. |
<br class="ltx_break"><span class="ltx_text ltx_font_italic">Domain restrictions:</span> the element type has to be numerical.</p> | <br class='ltx_break'><span class='ltx_text ltx_font_italic'>Domain restrictions:</span> the element type has to be numerical.</p> |
</div> | </div> |
</dd> | </dd> |
</dl> | </dl> |
</div> | </div> |
<div id="Ch2.S2.SS1.SSSx4.p3" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx4.p3' class='ltx_para'> |
<p class="ltx_p">A few examples:</p> | <p class='ltx_p'>A few examples:</p> |
</div> | </div> |
<figure id="LST12" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST12' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 12: </span>Reduction Operations</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 12: </span>Reduction Operations</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKCiAg%0AcHJpbnQoc3VtKG1hdCkpOwogIHByaW50KHByb2QodmVjdCkpOwogIHByaW50KGFsbChtYXQgPj0g%0AMSkpOwogIHByaW50KGFueShtYXQgPiAxKSk7CiAgcHJpbnQobWF4dmFsKG1hdCkpOwogIHByaW50%0AKG1pbnZhbChtYXQpKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKCiAg%0AcHJpbnQoc3VtKG1hdCkpOwogIHByaW50KHByb2QodmVjdCkpOwogIHByaW50KGFsbChtYXQgPj0g%0AMSkpOwogIHByaW50KGFueShtYXQgPiAxKSk7CiAgcHJpbnQobWF4dmFsKG1hdCkpOwogIHByaW50%0AKG1pbnZhbChtYXQpKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6,7,8,9]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6,7,8,9]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">vect</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+10,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+20]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>vect</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+10,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+20]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">sum</span>(<span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>sum</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">prod</span>(<span class="ltx_text ltx_lst_identifier">vect</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>prod</span>(<span class='ltx_text ltx_lst_identifier'>vect</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">all</span>(<span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>>=<span class="ltx_text ltx_lst_space"> </span>1)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>all</span>(<span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>>=<span class='ltx_text ltx_lst_space'> </span>1)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">any</span>(<span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>><span class="ltx_text ltx_lst_space"> </span>1)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>any</span>(<span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>><span class='ltx_text ltx_lst_space'> </span>1)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">maxval</span>(<span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>maxval</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">minval</span>(<span class="ltx_text ltx_lst_identifier">mat</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>minval</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS1.SSSx4.p4" class="ltx_para"> | <div id='Ch2.S2.SS1.SSSx4.p4' class='ltx_para'> |
<p class="ltx_p">Most of these examples, again, are fairly self explanatory. | <p class='ltx_p'>Most of these examples, again, are fairly self explanatory. |
However, you may get an idea of the specificational advantages | However, you may get an idea of the specificational advantages |
of shape-invariant programming when having a closer look | of shape-invariant programming when having a closer look |
style of program specifications that results from it.</p> | style of program specifications that results from it.</p> |
</div> | </div> |
<div id="Thmtheorem8" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem8' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 8. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 8. </h6> |
<div id="Thmtheorem8.p1" class="ltx_para"> | <div id='Thmtheorem8.p1' class='ltx_para'> |
<p class="ltx_p">All operations introduced in this part apply to <span class="ltx_text ltx_font_bold">all</span> elements | <p class='ltx_p'>All operations introduced in this part apply to <span class='ltx_text ltx_font_bold'>all</span> elements |
of the array they are applied to. Given the array operations introduced | of the array they are applied to. Given the array operations introduced |
so far, can you specify row-wise or column-wise summations for matrices? | so far, can you specify row-wise or column-wise summations for matrices? |
</section> | </section> |
</section> | </section> |
<section id="Ch2.S2.SS2" class="ltx_subsection"> | <section id='Ch2.S2.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">2.2.2 </span>Axis Control Notation</h5> | <span class='ltx_tag ltx_tag_subsection'>2.2.2 </span>Axis Control Notation</h5> |
| |
<div id="Ch2.S2.SS2.p1" class="ltx_para"> | <div id='Ch2.S2.SS2.p1' class='ltx_para'> |
<p class="ltx_p">As can be seen from Exercise <a href="#Thmtheorem8" title="Exercise 8. ‣ Reduction Operations ‣ 2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">8</span></a>, without further | <p class='ltx_p'>As can be seen from Exercise <a href='#Thmtheorem8' title='Exercise 8. ‣ Reduction Operations ‣ 2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>8</span></a>, without further |
language support, it is rather difficult | language support, it is rather difficult |
to apply an array operation to certain axes of an array only. | to apply an array operation to certain axes of an array only. |
This section introduces two language constructs of <span class="ltx_text ltx_font_smallcaps">SaC</span> which, | This section introduces two language constructs of <span class='ltx_text ltx_font_smallcaps'>SaC</span> which, |
when taken together, can be used to that effect. | when taken together, can be used to that effect. |
While <em class="ltx_emph">Generalized Selections</em> are convenient for separating individual | While <em class='ltx_emph'>Generalized Selections</em> are convenient for separating individual |
axes of an array, | axes of an array, |
<em class="ltx_emph">Set Notations</em> allow to recombine such axes into a result array | <em class='ltx_emph'>Set Notations</em> allow to recombine such axes into a result array |
after applying arbitrary operations to them. | after applying arbitrary operations to them. |
However, as the two constructs in principle are orthogonal, | However, as the two constructs in principle are orthogonal, |
we introduce them separately before showing how they can be combined | we introduce them separately before showing how they can be combined |
into an instrument for <em class="ltx_emph">Axis Control</em>.</p> | into an instrument for <em class='ltx_emph'>Axis Control</em>.</p> |
</div> | </div> |
<section id="Ch2.S2.SS2.SSSx1" class="ltx_subsubsection"> | <section id='Ch2.S2.SS2.SSSx1' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Generalized Selections</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Generalized Selections</h6> |
| |
<div id="Ch2.S2.SS2.SSSx1.p1" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p1' class='ltx_para'> |
<p class="ltx_p">The selection operation introduced in Section <a href="#Ch2.S2.SS1.SSSx1" title="Basic Operations ‣ 2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.2.1</span></a> does not | <p class='ltx_p'>The selection operation introduced in Section <a href='#Ch2.S2.SS1.SSSx1' title='Basic Operations ‣ 2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.2.1</span></a> does not |
only allow scalar elements but entire subarrays of an array to be selected. | only allow scalar elements but entire subarrays of an array to be selected. |
However, the selection of (non-scalar) subarrays always assumes the given | However, the selection of (non-scalar) subarrays always assumes the given |
transposed first.</p> | transposed first.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p2" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p2' class='ltx_para'> |
<p class="ltx_p">To avoid clumsy notations, <span class="ltx_text ltx_font_smallcaps">SaC</span> provides special syntactical support for | <p class='ltx_p'>To avoid clumsy notations, <span class='ltx_text ltx_font_smallcaps'>SaC</span> provides special syntactical support for |
selecting arbitrary subarrays called <em class="ltx_emph">Generalized Selections</em>. | selecting arbitrary subarrays called <em class='ltx_emph'>Generalized Selections</em>. |
The basic idea is to indicate the axes whose elements are to be selected | The basic idea is to indicate the axes whose elements are to be selected |
entirely by using dot-symbols instead of numerical values within | entirely by using dot-symbols instead of numerical values within |
the index vectors of a selection operation.</p> | the index vectors of a selection operation.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p3" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p3' class='ltx_para'> |
<p class="ltx_p">Note here, that vectors containing dot-symbols are not | <p class='ltx_p'>Note here, that vectors containing dot-symbols are not |
first class citizens of the language, i.e. they can exclusively be specified within | first class citizens of the language, i.e. they can exclusively be specified within |
selection operations directly!</p> | selection operations directly!</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p4" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p4' class='ltx_para'> |
<p class="ltx_p">There are two kinds of dot-symbols, single-dots which refer to a single axis | <p class='ltx_p'>There are two kinds of dot-symbols, single-dots which refer to a single axis |
and triple-dots which refer to as many axes as they are left unspecified within | and triple-dots which refer to as many axes as they are left unspecified within |
a selection. | a selection. |
expression is allowed.</p> | expression is allowed.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p5" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p5' class='ltx_para'> |
<p class="ltx_p">A few examples:</p> | <p class='ltx_p'>A few examples:</p> |
</div> | </div> |
<figure id="LST13" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST13' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 13: </span>Generalized Selections</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 13: </span>Generalized Selections</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKICBw%0AcmludChtYXQpOwoKICBwcmludChtYXRbWzFdXSk7CiAgcHJpbnQobWF0W1sxLC5dXSk7CiAgcHJp%0AbnQobWF0W1sxLC4uLl1dKTsKCiAgcHJpbnQobWF0W1suLDFdXSk7CiAgcHJpbnQobWF0W1suLi4s%0AMV1dKTsKCiAgcHJpbnQobWF0W1sxLC4uLiwxXV0pOwoKICBhcnIzZCA9IFttYXQsIG1hdF07CiAg%0AcHJpbnQoYXJyM2QpOwoKICBwcmludChhcnIzZFtbLiwxXV0pOwogIHByaW50KGFycjNkW1suLi4s%0AMV1dKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsx%0ALDIsMyw0LDUsNiw3LDgsOV07CgogIG1hdCA9IFt2ZWN0LCB2ZWN0KzEwLCB2ZWN0KzIwXTsKICBw%0AcmludChtYXQpOwoKICBwcmludChtYXRbWzFdXSk7CiAgcHJpbnQobWF0W1sxLC5dXSk7CiAgcHJp%0AbnQobWF0W1sxLC4uLl1dKTsKCiAgcHJpbnQobWF0W1suLDFdXSk7CiAgcHJpbnQobWF0W1suLi4s%0AMV1dKTsKCiAgcHJpbnQobWF0W1sxLC4uLiwxXV0pOwoKICBhcnIzZCA9IFttYXQsIG1hdF07CiAg%0AcHJpbnQoYXJyM2QpOwoKICBwcmludChhcnIzZFtbLiwxXV0pOwogIHByaW50KGFycjNkW1suLi4s%0AMV1dKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5,6,7,8,9]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5,6,7,8,9]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">vect</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+10,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+20]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>vect</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+10,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+20]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[1,.]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[1,.]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[1,…]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[1,…]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[.,1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[.,1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[…,1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[…,1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[1,…,1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[1,…,1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">mat</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>mat</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[.,1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[.,1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[…,1]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[…,1]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS2.SSSx1.p6" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p6' class='ltx_para'> |
<p class="ltx_p">The examples in lines 11-13 demonstrate different versions for selecting | <p class='ltx_p'>The examples in lines 11-13 demonstrate different versions for selecting |
the second row of the matrix <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span>. | the second row of the matrix <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span>. |
However, as the rightmost axis is to be selected, a dot-free version | However, as the rightmost axis is to be selected, a dot-free version |
(cf. line 11) suffices for this task. | (cf. line 11) suffices for this task. |
The selection of the second column of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> is shown in lines 15 and 16.</p> | The selection of the second column of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> is shown in lines 15 and 16.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p7" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p7' class='ltx_para'> |
<p class="ltx_p">line 18 demonstrates that the triple-dot notation can | <p class='ltx_p'>line 18 demonstrates that the triple-dot notation can |
also be successfully applied if no axis can be matched at all.</p> | also be successfully applied if no axis can be matched at all.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p8" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p8' class='ltx_para'> |
<p class="ltx_p">The difference between the single-dot and the | <p class='ltx_p'>The difference between the single-dot and the |
triple-dot notation is shown in lines 23 and 24. | triple-dot notation is shown in lines 23 and 24. |
While the selection in line 23 is identical to | While the selection in line 23 is identical to |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">arr3d</span>[[.,1,.]]</span>, the one in line 24 is identical to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">arr3d</span>[[.,.,1]]</span>.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>arr3d</span>[[.,1,.]]</span>, the one in line 24 is identical to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>arr3d</span>[[.,.,1]]</span>.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx1.p9" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx1.p9' class='ltx_para'> |
<p class="ltx_p">Only in cases where the number of single-dots plus the number of numerical indices | <p class='ltx_p'>Only in cases where the number of single-dots plus the number of numerical indices |
exceeds the number of axes available, an error message will be generated.</p> | exceeds the number of axes available, an error message will be generated.</p> |
</div> | </div> |
<div id="Thmtheorem9" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem9' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 9. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 9. </h6> |
<div id="Thmtheorem9.p1" class="ltx_para"> | <div id='Thmtheorem9.p1' class='ltx_para'> |
<p class="ltx_p">How can a selection of all elements of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> be specified using | <p class='ltx_p'>How can a selection of all elements of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> be specified using |
generalized selections? Try to find all 9 possible solutions! | generalized selections? Try to find all 9 possible solutions! |
</p> | </p> |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem10" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem10' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 10. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 10. </h6> |
<div id="Thmtheorem10.p1" class="ltx_para"> | <div id='Thmtheorem10.p1' class='ltx_para'> |
<p class="ltx_p">Referring to Exercise <a href="#Thmtheorem5" title="Exercise 5. ‣ Basic Operations ‣ 2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">5</span></a>, can this new notation | <p class='ltx_p'>Referring to Exercise <a href='#Thmtheorem5' title='Exercise 5. ‣ Basic Operations ‣ 2.2.1 Standard Array Operations ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>5</span></a>, can this new notation |
be used for selecting “over” empty axis? | be used for selecting “over” empty axis? |
For example, can you specify a selection vector <math id="Thmtheorem10.p1.m1" class="ltx_Math" alttext="{{\langle\textrm{\lstinline 1}}}\rangle" display="inline"><mrow><mo stretchy="false">⟨</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">vec</mtext><mo stretchy="false">⟩</mo></mrow></math>, so that | For example, can you specify a selection vector <math id='Thmtheorem10.p1.m1' class='ltx_Math' alttext='{{\langle\textrm{\lstinline 1}}}\rangle' display='inline'><mrow><mo stretchy='false'>⟨</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>vec</mtext><mo stretchy='false'>⟩</mo></mrow></math>, so that |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">reshape</span>([3,0,5],<span class="ltx_text ltx_lst_space"> </span>[])[<span class="ltx_text ltx_lst_identifier">vec</span>]<span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reshape</span><span class="ltx_text ltx_lst_space"> </span>([3,0],<span class="ltx_text ltx_lst_space"> </span>[])</span> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>reshape</span>([3,0,5],<span class='ltx_text ltx_lst_space'> </span>[])[<span class='ltx_text ltx_lst_identifier'>vec</span>]<span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reshape</span><span class='ltx_text ltx_lst_space'> </span>([3,0],<span class='ltx_text ltx_lst_space'> </span>[])</span> |
holds?</p> | holds?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S2.SS2.SSSx2" class="ltx_subsubsection"> | <section id='Ch2.S2.SS2.SSSx2' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Set Notation</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Set Notation</h6> |
| |
<div id="Ch2.S2.SS2.SSSx2.p1" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p1' class='ltx_para'> |
<p class="ltx_p">The means for composing arrays that have been described so far are rather restricted. | <p class='ltx_p'>The means for composing arrays that have been described so far are rather restricted. |
Apart from element-wise definitions all other operations treat all elements | Apart from element-wise definitions all other operations treat all elements |
uniformly. | uniformly. |
As a consequence, it is difficult to define arrays whose elements differ | As a consequence, it is difficult to define arrays whose elements differ |
depending on their position within the array. | depending on their position within the array. |
The so-called <em class="ltx_emph">set notation</em> facilitates such position dependent array | The so-called <em class='ltx_emph'>set notation</em> facilitates such position dependent array |
definitions. | definitions. |
Essentially, it consists of a mapping from index vectors to elements, taking | Essentially, it consists of a mapping from index vectors to elements, taking |
the general form</p> | the general form</p> |
<table id="Ch2.Ex1" class="ltx_equation ltx_eqn_table"> | <table id='Ch2.Ex1' class='ltx_equation ltx_eqn_table'> |
| |
<tr class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_eqn_cell ltx_align_center"><math id="Ch2.Ex1.m1" class="ltx_Math" alttext="{{{{{{\langle\textrm{\lstinline 1}}}\rangle\ \mathop{\textrm{\lstinline 1}}}}\ % | <td class='ltx_eqn_cell ltx_align_center'><math id='Ch2.Ex1.m1' class='ltx_Math' alttext='{{{{{{\langle\textrm{\lstinline 1}}}\rangle\ \mathop{\textrm{\lstinline 1}}}}\ % |
\langle\textrm{\lstinline 1}}}\rangle" display="block"><mrow><mrow><mo stretchy="false">⟨</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">index_vector</mtext><mo rspace="7.5pt" stretchy="false">⟩</mo></mrow><mo></mo><mrow><mpadded class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting" width="+5pt"><mtext>-></mtext></mpadded><mrow><mo stretchy="false">⟨</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">expression</mtext><mo stretchy="false">⟩</mo></mrow></mrow></mrow></math></td> | \langle\textrm{\lstinline 1}}}\rangle' display='block'><mrow><mrow><mo stretchy='false'>⟨</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>index_vector</mtext><mo rspace='7.5pt' stretchy='false'>⟩</mo></mrow><mo></mo><mrow><mpadded class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting' width='+5pt'><mtext>-></mtext></mpadded><mrow><mo stretchy='false'>⟨</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>expression</mtext><mo stretchy='false'>⟩</mo></mrow></mrow></mrow></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
</table> | </table> |
<p class="ltx_p">where <math id="Ch2.S2.SS2.SSSx2.p1.m1" class="ltx_Math" alttext="{{\langle\textrm{\lstinline 1}}}\rangle" display="inline"><mrow><mo stretchy="false">⟨</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">index_vector</mtext><mo stretchy="false">⟩</mo></mrow></math> either is a variable or a vector of variables | <p class='ltx_p'>where <math id='Ch2.S2.SS2.SSSx2.p1.m1' class='ltx_Math' alttext='{{\langle\textrm{\lstinline 1}}}\rangle' display='inline'><mrow><mo stretchy='false'>⟨</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>index_vector</mtext><mo stretchy='false'>⟩</mo></mrow></math> either is a variable or a vector of variables |
and <math id="Ch2.S2.SS2.SSSx2.p1.m2" class="ltx_Math" alttext="{{\langle\textrm{\lstinline 1}}}\rangle" display="inline"><mrow><mo stretchy="false">⟨</mo><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">expression</mtext><mo stretchy="false">⟩</mo></mrow></math> is a <span class="ltx_text ltx_font_smallcaps">SaC</span> expression that refers to | and <math id='Ch2.S2.SS2.SSSx2.p1.m2' class='ltx_Math' alttext='{{\langle\textrm{\lstinline 1}}}\rangle' display='inline'><mrow><mo stretchy='false'>⟨</mo><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>expression</mtext><mo stretchy='false'>⟩</mo></mrow></math> is a <span class='ltx_text ltx_font_smallcaps'>SaC</span> expression that refers to |
the index vector or its components and defines the | the index vector or its components and defines the |
individual array elements. | individual array elements. |
by the expression given and, thus, it is not specified explicitly.</p> | by the expression given and, thus, it is not specified explicitly.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx2.p2" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p2' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for language design freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for language design freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">You may wonder why we restrict the expressiveness of the set notation | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>You may wonder why we restrict the expressiveness of the set notation |
by relying on compiler driven range detection rather than an explicit | by relying on compiler driven range detection rather than an explicit |
range specification. | range specification. |
the capabilities of the set notation suffice whereas an explicit specification | the capabilities of the set notation suffice whereas an explicit specification |
of ranges would obfuscate the code.</span></span> | of ranges would obfuscate the code.</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">Furthermore, as you will see in Chapter <a href="#Ch4" title="Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">4</span></a>, <span class="ltx_text ltx_font_smallcaps">SaC</span> provides a | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>Furthermore, as you will see in Chapter <a href='#Ch4' title='Chapter 4 With-Loops ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>4</span></a>, <span class='ltx_text ltx_font_smallcaps'>SaC</span> provides a |
more versatile language construct for defining arrays. | more versatile language construct for defining arrays. |
However, the expressiveness of that construct comes for quite some | However, the expressiveness of that construct comes for quite some |
</p> | </p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx2.p3" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p3' class='ltx_para'> |
<p class="ltx_p">Let us have a look at some examples:</p> | <p class='ltx_p'>Let us have a look at some examples:</p> |
</div> | </div> |
<figure id="LST14" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST14' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 14: </span>Basic Set Notation</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 14: </span>Basic Set Notation</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzLDQsNSw2LDcsOCw5XTsKCiAgbWF0ID0ge1tpXSAtPiB2ZWN0W1tpXV0qMTArdmVjdH07%0ACiAgcHJpbnQobWF0KTsKCiAgbWF0X2luYyA9IHtpdiAtPiBtYXRbaXZdICsgMX07CiAgcHJpbnQo%0AbWF0X2luYyk7CgogIG1hdF90cmFucyA9IHtbaSxqXSAtPiBtYXRbW2osaV1dfTsKICBwcmludCht%0AYXRfdHJhbnMpOwoKICBtYXRfZGlhZyA9IHtbaSxqXSAtPiB3aGVyZShpID09IGogLCBtYXRbW2ks%0Aal1dICwgMCl9OwogIHByaW50KG1hdF9kaWFnKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzLDQsNSw2LDcsOCw5XTsKCiAgbWF0ID0ge1tpXSAtPiB2ZWN0W1tpXV0qMTArdmVjdH07%0ACiAgcHJpbnQobWF0KTsKCiAgbWF0X2luYyA9IHtpdiAtPiBtYXRbaXZdICsgMX07CiAgcHJpbnQo%0AbWF0X2luYyk7CgogIG1hdF90cmFucyA9IHtbaSxqXSAtPiBtYXRbW2osaV1dfTsKICBwcmludCht%0AYXRfdHJhbnMpOwoKICBtYXRfZGlhZyA9IHtbaSxqXSAtPiB3aGVyZShpID09IGogLCBtYXRbW2ks%0Aal1dICwgMCl9OwogIHByaW50KG1hdF9kaWFnKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[0,1,2,3,4,5,6,7,8,9]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[0,1,2,3,4,5,6,7,8,9]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*10+<span class="ltx_text ltx_lst_identifier">vect</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*10+<span class='ltx_text ltx_lst_identifier'>vect</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat_inc</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[<span class="ltx_text ltx_lst_identifier">iv</span>]<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span>1}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat_inc</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>]<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span>1}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat_inc</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat_inc</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat_trans</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[j,<span class="ltx_text ltx_lst_identifier">i</span>]]}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat_trans</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[j,<span class='ltx_text ltx_lst_identifier'>i</span>]]}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat_trans</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat_trans</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat_diag</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">where</span>(<span class="ltx_text ltx_lst_identifier">i</span><span class="ltx_text ltx_lst_space"> </span>==<span class="ltx_text ltx_lst_space"> </span>j<span class="ltx_text ltx_lst_space"> </span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,j]]<span class="ltx_text ltx_lst_space"> </span>,<span class="ltx_text ltx_lst_space"> </span>0)}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat_diag</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>where</span>(<span class='ltx_text ltx_lst_identifier'>i</span><span class='ltx_text ltx_lst_space'> </span>==<span class='ltx_text ltx_lst_space'> </span>j<span class='ltx_text ltx_lst_space'> </span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,j]]<span class='ltx_text ltx_lst_space'> </span>,<span class='ltx_text ltx_lst_space'> </span>0)}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat_diag</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat_diag</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS2.SSSx2.p4" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p4' class='ltx_para'> |
<p class="ltx_p">The set notation in line 8 defines a vector whose components | <p class='ltx_p'>The set notation in line 8 defines a vector whose components |
at position <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[<span class="ltx_text ltx_lst_identifier">i</span>]</span> are vectors that are computed from adding | at position <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[<span class='ltx_text ltx_lst_identifier'>i</span>]</span> are vectors that are computed from adding |
a multiple of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">1</span> to the vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">vect</span>. | a multiple of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>1</span> to the vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>vect</span>. |
The legal range of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</span> is derived from the selection | The legal range of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</span> is derived from the selection |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]</span> yielding in fact a matrix with shape <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[10,10]</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]</span> yielding in fact a matrix with shape <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[10,10]</span>. |
An explicit element-wise increment operation is specified in line 11. | An explicit element-wise increment operation is specified in line 11. |
Since the operation does not need to refer to individual axes a | Since the operation does not need to refer to individual axes a |
variable <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span> is used for the entire index vector rather than | variable <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span> is used for the entire index vector rather than |
having variables for individual index components. | having variables for individual index components. |
Line 14 shows how the matrix can be transposed, and line 17 | Line 14 shows how the matrix can be transposed, and line 17 |
changes all non-diagonal elements to <span class="ltx_text ltx_lstlisting"></span>.</p> | changes all non-diagonal elements to <span class='ltx_text ltx_lstlisting'></span>.</p> |
</div> | </div> |
<div id="Thmtheorem11" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem11' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 11. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 11. </h6> |
<div id="Thmtheorem11.p1" class="ltx_para"> | <div id='Thmtheorem11.p1' class='ltx_para'> |
<p class="ltx_p">Which of these operations can be expressed in terms of the array operations | <p class='ltx_p'>Which of these operations can be expressed in terms of the array operations |
defined so far?</p> | defined so far?</p> |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem12" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem12' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 12. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 12. </h6> |
<div id="Thmtheorem12.p1" class="ltx_para"> | <div id='Thmtheorem12.p1' class='ltx_para'> |
<p class="ltx_p">What results do you expect if <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> is an empty matrix, e.g. <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">reshape</span>([10,0],<span class="ltx_text ltx_lst_space"> </span>[])</span>?</p> | <p class='ltx_p'>What results do you expect if <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> is an empty matrix, e.g. <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>reshape</span>([10,0],<span class='ltx_text ltx_lst_space'> </span>[])</span>?</p> |
</div> | </div> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx2.p5" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p5' class='ltx_para'> |
<p class="ltx_p">As we can see from the set notation in line 8, non-scalar expressions | <p class='ltx_p'>As we can see from the set notation in line 8, non-scalar expressions |
within the set notation per default constitute the inner axes of the | within the set notation per default constitute the inner axes of the |
result array. | result array. |
axes that should constitute the result axis.</p> | axes that should constitute the result axis.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx2.p6" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p6' class='ltx_para'> |
<p class="ltx_p">A few examples:</p> | <p class='ltx_p'>A few examples:</p> |
</div> | </div> |
<figure id="LST15" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST15' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 15: </span>Advanced Set Notation</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 15: </span>Advanced Set Notation</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzXTsKCiAgbWF0ID0ge1suLGldIC0+IHZlY3RbW2ldXSo0ICsgdmVjdH07CiAgcHJpbnQo%0AbWF0KTsKCiAgYXJyM2QgPSB7W2ldIC0+IHZlY3RbW2ldXSoxNiArIG1hdH07CiAgcHJpbnQoYXJy%0AM2QpOwoKICBhcnIzZCA9IHtbLiwuLGldIC0+IHZlY3RbW2ldXSoxNiArIG1hdH07CiAgcHJpbnQo%0AYXJyM2QpOwoKICBhcnIzZCA9IHtbLixpXSAtPiB2ZWN0W1tpXV0qMTYgKyBtYXR9OwogIHByaW50%0AKGFycjNkKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzXTsKCiAgbWF0ID0ge1suLGldIC0+IHZlY3RbW2ldXSo0ICsgdmVjdH07CiAgcHJpbnQo%0AbWF0KTsKCiAgYXJyM2QgPSB7W2ldIC0+IHZlY3RbW2ldXSoxNiArIG1hdH07CiAgcHJpbnQoYXJy%0AM2QpOwoKICBhcnIzZCA9IHtbLiwuLGldIC0+IHZlY3RbW2ldXSoxNiArIG1hdH07CiAgcHJpbnQo%0AYXJyM2QpOwoKICBhcnIzZCA9IHtbLixpXSAtPiB2ZWN0W1tpXV0qMTYgKyBtYXR9OwogIHByaW50%0AKGFycjNkKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[0,1,2,3]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[0,1,2,3]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[.,<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*4<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[.,<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*4<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*16<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*16<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[.,.,<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*16<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[.,.,<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*16<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[.,<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*16<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[.,<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*16<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS2.SSSx2.p7" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx2.p7' class='ltx_para'> |
<p class="ltx_p">These examples show how the result of evaluating the expression on the right of the arrow can be directed into any axes of the overall result array. | <p class='ltx_p'>These examples show how the result of evaluating the expression on the right of the arrow can be directed into any axes of the overall result array. |
As can be seen in line 17, the axes of the expressions can even be put into | As can be seen in line 17, the axes of the expressions can even be put into |
non-adjacent axes of the result.</p> | non-adjacent axes of the result.</p> |
</div> | </div> |
<div id="Thmtheorem13" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem13' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 13. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 13. </h6> |
<div id="Thmtheorem13.p1" class="ltx_para"> | <div id='Thmtheorem13.p1' class='ltx_para'> |
<p class="ltx_p">The ‘.’ symbol in the set notation allows us to direct a computation | <p class='ltx_p'>The ‘.’ symbol in the set notation allows us to direct a computation |
to any axes of the result. This is identical to first putting the result | to any axes of the result. This is identical to first putting the result |
into the innermost axes and then transposing the result. | into the innermost axes and then transposing the result. |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S2.SS2.SSSx3" class="ltx_subsubsection"> | <section id='Ch2.S2.SS2.SSSx3' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Axis Control</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Axis Control</h6> |
| |
<div id="Ch2.S2.SS2.SSSx3.p1" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p1' class='ltx_para'> |
<p class="ltx_p">Although generalized selections and the set notation per se can be useful, | <p class='ltx_p'>Although generalized selections and the set notation per se can be useful, |
their real potential shows when they are used in combination. | their real potential shows when they are used in combination. |
Together, they constitute means to control the axes a given operation | Together, they constitute means to control the axes a given operation |
the results to the overall array.</p> | the results to the overall array.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx3.p2" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p2' class='ltx_para'> |
<p class="ltx_p">For example, we can now easily sum up the individual rows or columns | <p class='ltx_p'>For example, we can now easily sum up the individual rows or columns |
of a matrix:</p> | of a matrix:</p> |
</div> | </div> |
<figure id="LST16" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST16' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 16: </span>Axis Control: sum</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 16: </span>Axis Control: sum</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzLDQsNSw2LDcsOCw5XTsKCiAgbWF0ID0ge1suLGldIC0+IHZlY3RbW2ldXSoxMCt2ZWN0%0AfTsKICBwcmludChtYXQpOwoKICBzdW1fcm93cyA9IHtbaV0gLT4gc3VtKG1hdFtbaV1dKX07CiAg%0AcHJpbnQoc3VtX3Jvd3MpOwoKICBzdW1fY29scyA9IHtbaV0gLT4gc3VtKCBtYXRbWy4saV1dKX07%0ACiAgcHJpbnQoc3VtX2NvbHMpOwoKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzLDQsNSw2LDcsOCw5XTsKCiAgbWF0ID0ge1suLGldIC0+IHZlY3RbW2ldXSoxMCt2ZWN0%0AfTsKICBwcmludChtYXQpOwoKICBzdW1fcm93cyA9IHtbaV0gLT4gc3VtKG1hdFtbaV1dKX07CiAg%0AcHJpbnQoc3VtX3Jvd3MpOwoKICBzdW1fY29scyA9IHtbaV0gLT4gc3VtKCBtYXRbWy4saV1dKX07%0ACiAgcHJpbnQoc3VtX2NvbHMpOwoKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[0,1,2,3,4,5,6,7,8,9]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[0,1,2,3,4,5,6,7,8,9]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[.,<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*10+<span class="ltx_text ltx_lst_identifier">vect</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[.,<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*10+<span class='ltx_text ltx_lst_identifier'>vect</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum_rows</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum</span>(<span class="ltx_text ltx_lst_identifier">mat</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum_rows</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">sum_rows</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>sum_rows</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum_cols</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum</span>(<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[.,<span class="ltx_text ltx_lst_identifier">i</span>]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum_cols</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum</span>(<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[.,<span class='ltx_text ltx_lst_identifier'>i</span>]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">sum_cols</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>sum_cols</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS2.SSSx3.p3" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p3' class='ltx_para'> |
<p class="ltx_p">Reduction operations, in general, are prone to axis control, as they | <p class='ltx_p'>Reduction operations, in general, are prone to axis control, as they |
often need to be applied to certain | often need to be applied to certain |
particular axes rather than entire arrays. | particular axes rather than entire arrays. |
Other popular examples are the maximum (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">maxval</span>) and | Other popular examples are the maximum (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>maxval</span>) and |
minimum (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">minval</span>) operations:</p> | minimum (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>minval</span>) operations:</p> |
</div> | </div> |
<figure id="LST17" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST17' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 17: </span>Axis Control: max</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 17: </span>Axis Control: max</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzXTsKCiAgYXJyM2QgPSB7W2ksal0gLT4gdmVjdFtbaV1dKjQgKyB2ZWN0W1tqXV0qMTYg%0AKyB2ZWN0fTsKICBwcmludChhcnIzZCk7CgogIG1heF9pbm5lcl92ZWN0cyA9IHtbaSxqXSAtPiBt%0AYXh2YWwoYXJyM2RbW2ksal1dKX07CiAgcHJpbnQobWF4X2lubmVyX3ZlY3RzKTsKCiAgbWF4X2lu%0AbmVyX2FycmF5cyA9IHtbaV0gLT4gbWF4dmFsKGFycjNkW1tpXV0pfTsKICBwcmludChtYXhfaW5u%0AZXJfYXJyYXlzKTsKCiAgbWF4X291dGVyX2FycmF5cyA9IHtbaV0gLT4gbWF4dmFsKGFycjNkW1su%0ALC4saV1dKX07CiAgcHJpbnQobWF4X291dGVyX2FycmF5cyk7CgogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzXTsKCiAgYXJyM2QgPSB7W2ksal0gLT4gdmVjdFtbaV1dKjQgKyB2ZWN0W1tqXV0qMTYg%0AKyB2ZWN0fTsKICBwcmludChhcnIzZCk7CgogIG1heF9pbm5lcl92ZWN0cyA9IHtbaSxqXSAtPiBt%0AYXh2YWwoYXJyM2RbW2ksal1dKX07CiAgcHJpbnQobWF4X2lubmVyX3ZlY3RzKTsKCiAgbWF4X2lu%0AbmVyX2FycmF5cyA9IHtbaV0gLT4gbWF4dmFsKGFycjNkW1tpXV0pfTsKICBwcmludChtYXhfaW5u%0AZXJfYXJyYXlzKTsKCiAgbWF4X291dGVyX2FycmF5cyA9IHtbaV0gLT4gbWF4dmFsKGFycjNkW1su%0ALC4saV1dKX07CiAgcHJpbnQobWF4X291dGVyX2FycmF5cyk7CgogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[0,1,2,3]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[0,1,2,3]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*4<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[j]]*16<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*4<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[j]]*16<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">max_inner_vects</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">maxval</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,j]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>max_inner_vects</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>maxval</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,j]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">max_inner_vects</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>max_inner_vects</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">max_inner_arrays</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">maxval</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>max_inner_arrays</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>maxval</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">max_inner_arrays</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>max_inner_arrays</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">max_outer_arrays</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">maxval</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[.,.,<span class="ltx_text ltx_lst_identifier">i</span>]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>max_outer_arrays</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>maxval</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[.,.,<span class='ltx_text ltx_lst_identifier'>i</span>]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">max_outer_arrays</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>max_outer_arrays</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS2.SSSx3.p4" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p4' class='ltx_para'> |
<p class="ltx_p">In line 8, we directly generate a 3 dimensional array from the vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">vect</span>. | <p class='ltx_p'>In line 8, we directly generate a 3 dimensional array from the vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>vect</span>. |
Lines 11, 14, and 17 compute maxima within different slices of that array. | Lines 11, 14, and 17 compute maxima within different slices of that array. |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">max_inner_vects</span> is a matrix containing the maxima within the innermost vectors, | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>max_inner_vects</span> is a matrix containing the maxima within the innermost vectors, |
i.e. the 3-dimensional array is considered a matrix of vectors whose maximum | i.e. the 3-dimensional array is considered a matrix of vectors whose maximum |
values are computed. | values are computed. |
For <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">max_inner_arrays</span>, the array is considered a vector of matrices; it contains | For <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>max_inner_arrays</span>, the array is considered a vector of matrices; it contains |
the maximum values of these subarrays. | the maximum values of these subarrays. |
The last example demonstrates, that outer dimensions can be considered for | The last example demonstrates, that outer dimensions can be considered for |
reduction as well.</p> | reduction as well.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx3.p5" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p5' class='ltx_para'> |
<p class="ltx_p">Further demand for axis control arises in the context of array operations | <p class='ltx_p'>Further demand for axis control arises in the context of array operations |
that are dedicated to one fixed axis (usually the outermost one) and that need | that are dedicated to one fixed axis (usually the outermost one) and that need |
to be applied to another one. | to be applied to another one. |
Examples for this situation are the concatenation operation (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">++</span>) | Examples for this situation are the concatenation operation (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>++</span>) |
and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reverse</span>:</p> | and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reverse</span>:</p> |
</div> | </div> |
<figure id="LST18" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST18' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 18: </span>Axis Control: ++, reverse</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 18: </span>Axis Control: ++, reverse</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzXTsKCiAgYXJyM2QgPSB7W2ksal0gLT4gdmVjdFtbaV1dKjQgKyB2ZWN0W1tqXV0qMTYg%0AKyB2ZWN0fTsKICBwcmludChhcnIzZCk7CgogIHByaW50KGFycjNkICsrIGFycjNkKTsKICBwcmlu%0AdCh7W2ldIC0+IGFycjNkW1tpXV0gKysgYXJyM2RbW2ldXX0pOwogIHByaW50KHtbaSxqXSAtPiBh%0AcnIzZFtbaSxqXV0gKysgYXJyM2RbW2ksal1dfSk7CgogIHByaW50KHJldmVyc2UoIGFycjNkKSk7%0ACiAgcHJpbnQoeyBbaV0gLT4gcmV2ZXJzZShhcnIzZFtbaV1dKX0pOwogIHByaW50KHsgW2ksal0g%0ALT4gcmV2ZXJzZShhcnIzZFtbaSxqXV0pfSk7CgogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgdmVjdCA9IFsw%0ALDEsMiwzXTsKCiAgYXJyM2QgPSB7W2ksal0gLT4gdmVjdFtbaV1dKjQgKyB2ZWN0W1tqXV0qMTYg%0AKyB2ZWN0fTsKICBwcmludChhcnIzZCk7CgogIHByaW50KGFycjNkICsrIGFycjNkKTsKICBwcmlu%0AdCh7W2ldIC0+IGFycjNkW1tpXV0gKysgYXJyM2RbW2ldXX0pOwogIHByaW50KHtbaSxqXSAtPiBh%0AcnIzZFtbaSxqXV0gKysgYXJyM2RbW2ksal1dfSk7CgogIHByaW50KHJldmVyc2UoIGFycjNkKSk7%0ACiAgcHJpbnQoeyBbaV0gLT4gcmV2ZXJzZShhcnIzZFtbaV1dKX0pOwogIHByaW50KHsgW2ksal0g%0ALT4gcmV2ZXJzZShhcnIzZFtbaSxqXV0pfSk7CgogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[0,1,2,3]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[0,1,2,3]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]*4<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>[[j]]*16<span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]*4<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>[[j]]*16<span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span><span class="ltx_text ltx_lst_space"> </span>++<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span><span class='ltx_text ltx_lst_space'> </span>++<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>({[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]<span class="ltx_text ltx_lst_space"> </span>++<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]]}); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>({[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]<span class='ltx_text ltx_lst_space'> </span>++<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]]}); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>({[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,j]]<span class="ltx_text ltx_lst_space"> </span>++<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,j]]}); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>({[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,j]]<span class='ltx_text ltx_lst_space'> </span>++<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,j]]}); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">reverse</span>(<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">arr3d</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>reverse</span>(<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>arr3d</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>({<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reverse</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>]])}); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>({<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reverse</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>]])}); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>({<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">reverse</span>(<span class="ltx_text ltx_lst_identifier">arr3d</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,j]])}); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>({<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>reverse</span>(<span class='ltx_text ltx_lst_identifier'>arr3d</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,j]])}); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS2.SSSx3.p6" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p6' class='ltx_para'> |
<p class="ltx_p">Line 11 shows a standard application of the concatenation of two arrays. | <p class='ltx_p'>Line 11 shows a standard application of the concatenation of two arrays. |
It affects the outermost axis only, resulting in an array of shape | It affects the outermost axis only, resulting in an array of shape |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[8,<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span>0]</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[8,<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span>0]</span>. |
The two subsequent lines show, how to apply concatenation to other axis. | The two subsequent lines show, how to apply concatenation to other axis. |
Essentially, the selections on the right hand sides select the sub expressions to | Essentially, the selections on the right hand sides select the sub expressions to |
subarrays back together again.</p> | subarrays back together again.</p> |
</div> | </div> |
<div id="Ch2.S2.SS2.SSSx3.p7" class="ltx_para"> | <div id='Ch2.S2.SS2.SSSx3.p7' class='ltx_para'> |
<p class="ltx_p">The examples in lines 15-17 show the same exercise for the operation | <p class='ltx_p'>The examples in lines 15-17 show the same exercise for the operation |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">reverse</span> which reverses the order of the elements within an array | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>reverse</span> which reverses the order of the elements within an array |
with respect to the outermost axis.</p> | with respect to the outermost axis.</p> |
</div> | </div> |
<div id="Thmtheorem14" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem14' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 14. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 14. </h6> |
<div id="Thmtheorem14.p1" class="ltx_para"> | <div id='Thmtheorem14.p1' class='ltx_para'> |
<p class="ltx_p">The operation <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">take</span> is defined in a way that ensures inner axes | <p class='ltx_p'>The operation <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>take</span> is defined in a way that ensures inner axes |
to be taken completely in case the take vector does not provide enough | to be taken completely in case the take vector does not provide enough |
entities for all axes. | entities for all axes. |
How can <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">take</span> be applied to an array so that the outermost axis | How can <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>take</span> be applied to an array so that the outermost axis |
remains untouched and the selections are applied to inner axes, starting at the | remains untouched and the selections are applied to inner axes, starting at the |
second one? (You may assume, that the take vector has fewer elements | second one? (You may assume, that the take vector has fewer elements |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem15" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem15' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 15. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 15. </h6> |
<div id="Thmtheorem15.p1" class="ltx_para"> | <div id='Thmtheorem15.p1' class='ltx_para'> |
<p class="ltx_p">Can you merge two vectors of identical length element-wise? | <p class='ltx_p'>Can you merge two vectors of identical length element-wise? |
Extend your solution in a way that permits merging <math id="Thmtheorem15.p1.m1" class="ltx_Math" alttext="n" display="inline"><mi>n</mi></math>-dimensional | Extend your solution in a way that permits merging <math id='Thmtheorem15.p1.m1' class='ltx_Math' alttext='n' display='inline'><mi>n</mi></math>-dimensional |
arrays on the outermost axis.</p> | arrays on the outermost axis.</p> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch2.S2.SS3" class="ltx_subsection"> | <section id='Ch2.S2.SS3' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">2.2.3 </span>Putting it all Together</h5> | <span class='ltx_tag ltx_tag_subsection'>2.2.3 </span>Putting it all Together</h5> |
| |
<div id="Ch2.S2.SS3.p1" class="ltx_para"> | <div id='Ch2.S2.SS3.p1' class='ltx_para'> |
<p class="ltx_p">The array operations presented so far constitute a substantial | <p class='ltx_p'>The array operations presented so far constitute a substantial |
subset of the functionality that is provided by array programming | subset of the functionality that is provided by array programming |
languages such as <span class="ltx_text ltx_font_smallcaps">APL</span>. | languages such as <span class='ltx_text ltx_font_smallcaps'>APL</span>. |
When orchestrated properly, these suffice to express rather complex | When orchestrated properly, these suffice to express rather complex |
array operations very concisely. | array operations very concisely. |
power: matrix product and relaxation.</p> | power: matrix product and relaxation.</p> |
</div> | </div> |
<section id="Ch2.S2.SS3.SSSx1" class="ltx_subsubsection"> | <section id='Ch2.S2.SS3.SSSx1' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Matrix Product</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Matrix Product</h6> |
| |
<div id="Ch2.S2.SS3.SSSx1.p1" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx1.p1' class='ltx_para'> |
<p class="ltx_p">The matrix product of two matrices <math id="Ch2.S2.SS3.SSSx1.p1.m1" class="ltx_Math" alttext="A" display="inline"><mi>A</mi></math> and <math id="Ch2.S2.SS3.SSSx1.p1.m2" class="ltx_Math" alttext="B" display="inline"><mi>B</mi></math> (denoted by <math id="Ch2.S2.SS3.SSSx1.p1.m3" class="ltx_Math" alttext="A\odot B" display="inline"><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow></math>) is defined | <p class='ltx_p'>The matrix product of two matrices <math id='Ch2.S2.SS3.SSSx1.p1.m1' class='ltx_Math' alttext='A' display='inline'><mi>A</mi></math> and <math id='Ch2.S2.SS3.SSSx1.p1.m2' class='ltx_Math' alttext='B' display='inline'><mi>B</mi></math> (denoted by <math id='Ch2.S2.SS3.SSSx1.p1.m3' class='ltx_Math' alttext='A\odot B' display='inline'><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow></math>) is defined |
as follows:</p> | as follows:</p> |
</div> | </div> |
<div id="Ch2.S2.SS3.SSSx1.p2" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx1.p2' class='ltx_para'> |
<p class="ltx_p">Provided <math id="Ch2.S2.SS3.SSSx1.p2.m1" class="ltx_Math" alttext="A" display="inline"><mi>A</mi></math> has as many columns as <math id="Ch2.S2.SS3.SSSx1.p2.m2" class="ltx_Math" alttext="B" display="inline"><mi>B</mi></math> has rows, the result of <math id="Ch2.S2.SS3.SSSx1.p2.m3" class="ltx_Math" alttext="A\odot B" display="inline"><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow></math> | <p class='ltx_p'>Provided <math id='Ch2.S2.SS3.SSSx1.p2.m1' class='ltx_Math' alttext='A' display='inline'><mi>A</mi></math> has as many columns as <math id='Ch2.S2.SS3.SSSx1.p2.m2' class='ltx_Math' alttext='B' display='inline'><mi>B</mi></math> has rows, the result of <math id='Ch2.S2.SS3.SSSx1.p2.m3' class='ltx_Math' alttext='A\odot B' display='inline'><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow></math> |
has as many rows as <math id="Ch2.S2.SS3.SSSx1.p2.m4" class="ltx_Math" alttext="A" display="inline"><mi>A</mi></math> and as many columns as <math id="Ch2.S2.SS3.SSSx1.p2.m5" class="ltx_Math" alttext="B" display="inline"><mi>B</mi></math>. Each element | has as many rows as <math id='Ch2.S2.SS3.SSSx1.p2.m4' class='ltx_Math' alttext='A' display='inline'><mi>A</mi></math> and as many columns as <math id='Ch2.S2.SS3.SSSx1.p2.m5' class='ltx_Math' alttext='B' display='inline'><mi>B</mi></math>. Each element |
<math id="Ch2.S2.SS3.SSSx1.p2.m6" class="ltx_Math" alttext="{(A\odot B)}_{i,j}" display="inline"><msub><mrow><mo stretchy="false">(</mo><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow><mo stretchy="false">)</mo></mrow><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></math> is defined as the scalar product of the <math id="Ch2.S2.SS3.SSSx1.p2.m7" class="ltx_Math" alttext="i" display="inline"><mi>i</mi></math>-th row of <math id="Ch2.S2.SS3.SSSx1.p2.m8" class="ltx_Math" alttext="A" display="inline"><mi>A</mi></math> | <math id='Ch2.S2.SS3.SSSx1.p2.m6' class='ltx_Math' alttext='{(A\odot B)}_{i,j}' display='inline'><msub><mrow><mo stretchy='false'>(</mo><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow><mo stretchy='false'>)</mo></mrow><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></math> is defined as the scalar product of the <math id='Ch2.S2.SS3.SSSx1.p2.m7' class='ltx_Math' alttext='i' display='inline'><mi>i</mi></math>-th row of <math id='Ch2.S2.SS3.SSSx1.p2.m8' class='ltx_Math' alttext='A' display='inline'><mi>A</mi></math> |
and the <math id="Ch2.S2.SS3.SSSx1.p2.m9" class="ltx_Math" alttext="j" display="inline"><mi>j</mi></math>-th column of <math id="Ch2.S2.SS3.SSSx1.p2.m10" class="ltx_Math" alttext="B" display="inline"><mi>B</mi></math>, i.e. we have | and the <math id='Ch2.S2.SS3.SSSx1.p2.m9' class='ltx_Math' alttext='j' display='inline'><mi>j</mi></math>-th column of <math id='Ch2.S2.SS3.SSSx1.p2.m10' class='ltx_Math' alttext='B' display='inline'><mi>B</mi></math>, i.e. we have |
<math id="Ch2.S2.SS3.SSSx1.p2.m11" class="ltx_Math" alttext="{(A\odot B)}_{i,j}=\sum_{k}A_{i,k}*B_{k,j}" display="inline"><mrow><msub><mrow><mo stretchy="false">(</mo><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow><mo stretchy="false">)</mo></mrow><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mrow><msub><mo largeop="true" symmetric="true">∑</mo><mi>k</mi></msub><mrow><msub><mi>A</mi><mrow><mi>i</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>*</mo><msub><mi>B</mi><mrow><mi>k</mi><mo>,</mo><mi>j</mi></mrow></msub></mrow></mrow></mrow></math>.</p> | <math id='Ch2.S2.SS3.SSSx1.p2.m11' class='ltx_Math' alttext='{(A\odot B)}_{i,j}=\sum_{k}A_{i,k}*B_{k,j}' display='inline'><mrow><msub><mrow><mo stretchy='false'>(</mo><mrow><mi>A</mi><mo>⊙</mo><mi>B</mi></mrow><mo stretchy='false'>)</mo></mrow><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mrow><msub><mo largeop='true' symmetric='true'>∑</mo><mi>k</mi></msub><mrow><msub><mi>A</mi><mrow><mi>i</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>*</mo><msub><mi>B</mi><mrow><mi>k</mi><mo>,</mo><mi>j</mi></mrow></msub></mrow></mrow></mrow></math>.</p> |
</div> | </div> |
<div id="Ch2.S2.SS3.SSSx1.p3" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx1.p3' class='ltx_para'> |
<p class="ltx_p">This definition can directly be translated into the following <span class="ltx_text ltx_font_smallcaps">SaC</span> code:</p> | <p class='ltx_p'>This definition can directly be translated into the following <span class='ltx_text ltx_font_smallcaps'>SaC</span> code:</p> |
</div> | </div> |
<figure id="LST19" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST19' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 19: </span>Matrix Product</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 19: </span>Matrix Product</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgaWQgPSBbWzFk%0ALCAwZCwgMGRdLCBbMGQsIDFkLCAwZF0sIFswZCwgMGQsIDFkXV07CgogIHZlY3QgPSBbMWQsIDJk%0ALCAzZCwgNGRdOwogIG1hdCA9IFt2ZWN0LCB2ZWN0KzRkLCB2ZWN0KzhkXTsKICBwcmludChtYXQp%0AOwoKICByZXMgPSB7W2ksal0gLT4gc3VtKGlkW1tpLC5dXSAqIG1hdFtbLixqXV0pfTsKICBwcmlu%0AdChyZXMpOwoKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgaWQgPSBbWzFk%0ALCAwZCwgMGRdLCBbMGQsIDFkLCAwZF0sIFswZCwgMGQsIDFkXV07CgogIHZlY3QgPSBbMWQsIDJk%0ALCAzZCwgNGRdOwogIG1hdCA9IFt2ZWN0LCB2ZWN0KzRkLCB2ZWN0KzhkXTsKICBwcmludChtYXQp%0AOwoKICByZXMgPSB7W2ksal0gLT4gc3VtKGlkW1tpLC5dXSAqIG1hdFtbLixqXV0pfTsKICBwcmlu%0AdChyZXMpOwoKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">id</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[[1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>],<span class="ltx_text ltx_lst_space"> </span>[0<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>],<span class="ltx_text ltx_lst_space"> </span>[0<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>1<span class="ltx_text ltx_lst_identifier">d</span>]]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>id</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[[1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>],<span class='ltx_text ltx_lst_space'> </span>[0<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>],<span class='ltx_text ltx_lst_space'> </span>[0<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>1<span class='ltx_text ltx_lst_identifier'>d</span>]]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>2<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>3<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>4<span class="ltx_text ltx_lst_identifier">d</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>2<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>3<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>4<span class='ltx_text ltx_lst_identifier'>d</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">vect</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+4<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+8<span class="ltx_text ltx_lst_identifier">d</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>vect</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+4<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+8<span class='ltx_text ltx_lst_identifier'>d</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">res</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum</span>(<span class="ltx_text ltx_lst_identifier">id</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,.]]<span class="ltx_text ltx_lst_space"> </span>*<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>[[.,j]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>res</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum</span>(<span class='ltx_text ltx_lst_identifier'>id</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,.]]<span class='ltx_text ltx_lst_space'> </span>*<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>[[.,j]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">res</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>res</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS3.SSSx1.p4" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx1.p4' class='ltx_para'> |
<p class="ltx_p">After defining two matrices <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">id</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span> in | <p class='ltx_p'>After defining two matrices <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>id</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span> in |
lines6 and 8, respectively, | lines6 and 8, respectively, |
the matrix product <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">id</span><span class="ltx_text ltx_lst_space"> </span><math id="Ch2.S2.SS3.SSSx1.p4.m1" class="ltx_Math" alttext="\odot" display="inline"><mo>⊙</mo></math><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span></span> is specified in line 12. | the matrix product <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>id</span><span class='ltx_text ltx_lst_space'> </span><math id='Ch2.S2.SS3.SSSx1.p4.m1' class='ltx_Math' alttext='\odot' display='inline'><mo>⊙</mo></math><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span></span> is specified in line 12. |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">id</span>[[<span class="ltx_text ltx_lst_identifier">i</span>,.]]</span> selects the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</span>-th row of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">id</span> and | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>id</span>[[<span class='ltx_text ltx_lst_identifier'>i</span>,.]]</span> selects the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</span>-th row of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>id</span> and |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">mat</span>[[.,j]]</span> refers to the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">j</span>-th column of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>mat</span>[[.,j]]</span> refers to the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>j</span>-th column of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span>. |
The index ranges for <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">j</span> are deduced from the accesses | The index ranges for <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>j</span> are deduced from the accesses |
into <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">id</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mat</span>, respectively. | into <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>id</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mat</span>, respectively. |
A variable <math id="Ch2.S2.SS3.SSSx1.p4.m2" class="ltx_Math" alttext="k" display="inline"><mi>k</mi></math> as used in the mathematical specification is not required | A variable <math id='Ch2.S2.SS3.SSSx1.p4.m2' class='ltx_Math' alttext='k' display='inline'><mi>k</mi></math> as used in the mathematical specification is not required |
as we can make use of the array operations <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">*</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sum</span>.</p> | as we can make use of the array operations <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>*</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sum</span>.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch2.S2.SS3.SSSx2" class="ltx_subsubsection"> | <section id='Ch2.S2.SS3.SSSx2' class='ltx_subsubsection'> |
<h6 class="ltx_title ltx_title_subsubsection">Relaxation</h6> | <h6 class='ltx_title ltx_title_subsubsection'>Relaxation</h6> |
| |
<div id="Ch2.S2.SS3.SSSx2.p1" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx2.p1' class='ltx_para'> |
<p class="ltx_p">Numerical approximations to the solution of partial differential equations | <p class='ltx_p'>Numerical approximations to the solution of partial differential equations |
are often made by applying so-called <span class="ltx_text ltx_font_italic">relaxation methods</span>. | are often made by applying so-called <span class='ltx_text ltx_font_italic'>relaxation methods</span>. |
These require large arrays to be iteratively modified by so-called | These require large arrays to be iteratively modified by so-called |
<span class="ltx_text ltx_font_italic">stencil operations</span> until a certain convergence criterion is met. | <span class='ltx_text ltx_font_italic'>stencil operations</span> until a certain convergence criterion is met. |
Fig. <a href="#Ch2.F1" title="Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.1</span></a> illustrates such a stencil operation.</p> | Fig. <a href='#Ch2.F1' title='Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.1</span></a> illustrates such a stencil operation.</p> |
</div> | </div> |
<figure id="Ch2.F1" class="ltx_figure"><img src="x1.png" id="Ch2.F1.g1" class="ltx_graphics ltx_centering" width="209" height="130" alt=""> | <figure id='Ch2.F1' class='ltx_figure'><img src='x1.png' id='Ch2.F1.g1' class='ltx_graphics ltx_centering' width='209' height='130' alt=''> |
<figcaption class="ltx_caption ltx_centering"><span class="ltx_tag ltx_tag_figure">Figure 2.1: </span>A 5-point-stencil relaxation with cyclic boundaries</figcaption> | <figcaption class='ltx_caption ltx_centering'><span class='ltx_tag ltx_tag_figure'>Figure 2.1: </span>A 5-point-stencil relaxation with cyclic boundaries</figcaption> |
</figure> | </figure> |
<div id="Ch2.S2.SS3.SSSx2.p2" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx2.p2' class='ltx_para'> |
<p class="ltx_p">A stencil operation re-computes all elements of an array by computing a weighted | <p class='ltx_p'>A stencil operation re-computes all elements of an array by computing a weighted |
sum of all neighbor elements. | sum of all neighbor elements. |
The weights that are used solely depend on the positions relative to the element | The weights that are used solely depend on the positions relative to the element |
to be computed rather than the position in the result array. | to be computed rather than the position in the result array. |
Therefore, we can conveniently specify these weights by a single matrix of weights | Therefore, we can conveniently specify these weights by a single matrix of weights |
as shown on the left side of Fig. <a href="#Ch2.F1" title="Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.1</span></a>.</p> | as shown on the left side of Fig. <a href='#Ch2.F1' title='Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.1</span></a>.</p> |
</div> | </div> |
<div id="Ch2.S2.SS3.SSSx2.p3" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx2.p3' class='ltx_para'> |
<p class="ltx_p">In this example, only 4 direct neighbor elements and the old value itself | <p class='ltx_p'>In this example, only 4 direct neighbor elements and the old value itself |
are taken into account for computing a new value. | are taken into account for computing a new value. |
(Hence its name: <span class="ltx_text ltx_font_italic">5-point-stencil operation</span>). | (Hence its name: <span class='ltx_text ltx_font_italic'>5-point-stencil operation</span>). |
As can be seen from the weights, a new value is computed from old ones by adding | As can be seen from the weights, a new value is computed from old ones by adding |
an eight-th each of the values of the upper, lower, left, and right neighbors | an eight-th each of the values of the upper, lower, left, and right neighbors |
to half of the old value.</p> | to half of the old value.</p> |
</div> | </div> |
<div id="Ch2.S2.SS3.SSSx2.p4" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx2.p4' class='ltx_para'> |
<p class="ltx_p">As demonstrated on the right side of Fig. <a href="#Ch2.F1" title="Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.1</span></a> our example assumes | <p class='ltx_p'>As demonstrated on the right side of Fig. <a href='#Ch2.F1' title='Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.1</span></a> our example assumes |
so-called <span class="ltx_text ltx_font_italic">cyclic boundary conditions</span>. | so-called <span class='ltx_text ltx_font_italic'>cyclic boundary conditions</span>. |
This means that the missing neighbor elements at the boundaries of the matrix | This means that the missing neighbor elements at the boundaries of the matrix |
are taken from the opposite sides as indicated by the elliptic curves. | are taken from the opposite sides as indicated by the elliptic curves. |
</p> | </p> |
</div> | </div> |
<div id="Ch2.S2.SS3.SSSx2.p5" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx2.p5' class='ltx_para'> |
<p class="ltx_p">In the sequel, we concentrate on the specification of a single relaxation | <p class='ltx_p'>In the sequel, we concentrate on the specification of a single relaxation |
step, i.e. on one re-computation of the entire array. | step, i.e. on one re-computation of the entire array. |
This can be specified as a single line of <span class="ltx_text ltx_font_smallcaps">SaC</span> code:</p> | This can be specified as a single line of <span class='ltx_text ltx_font_smallcaps'>SaC</span> code:</p> |
</div> | </div> |
<figure id="LST20" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST20' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 20: </span>Relaxation with Cyclic Boundaries</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 20: </span>Relaxation with Cyclic Boundaries</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgd2VpZ2h0cyA9%0AIFtbMGQsIDFkLCAwZF0sIFsxZCwgNGQsIDFkXSwgWyAwZCwgMWQsIDBkXV0gLyA4ZDsKCiAgdmVj%0AdCA9IFsxZCwgMmQsIDNkLCA0ZF07CiAgbWF0ID0gW3ZlY3QsIHZlY3QrNGQsIHZlY3QrOGQsIHZl%0AY3QrMTJkXTsKICBwcmludChtYXQpOwoKICBtYXQgPSB7W2ksal0gLT4gc3VtKHsgaXYgLT4gd2Vp%0AZ2h0c1tpdl0gKiByb3RhdGUoaXYtMSwgbWF0KX1bWy4uLixpLGpdXSl9OwogIHByaW50KG1hdCk7%0ACgogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgd2VpZ2h0cyA9%0AIFtbMGQsIDFkLCAwZF0sIFsxZCwgNGQsIDFkXSwgWyAwZCwgMWQsIDBkXV0gLyA4ZDsKCiAgdmVj%0AdCA9IFsxZCwgMmQsIDNkLCA0ZF07CiAgbWF0ID0gW3ZlY3QsIHZlY3QrNGQsIHZlY3QrOGQsIHZl%0AY3QrMTJkXTsKICBwcmludChtYXQpOwoKICBtYXQgPSB7W2ksal0gLT4gc3VtKHsgaXYgLT4gd2Vp%0AZ2h0c1tpdl0gKiByb3RhdGUoaXYtMSwgbWF0KX1bWy4uLixpLGpdXSl9OwogIHByaW50KG1hdCk7%0ACgogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">weights</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[[0<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>],<span class="ltx_text ltx_lst_space"> </span>[1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>4<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>1<span class="ltx_text ltx_lst_identifier">d</span>],<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>0<span class="ltx_text ltx_lst_identifier">d</span>]]<span class="ltx_text ltx_lst_space"> </span>/<span class="ltx_text ltx_lst_space"> </span>8<span class="ltx_text ltx_lst_identifier">d</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>weights</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[[0<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>],<span class='ltx_text ltx_lst_space'> </span>[1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>4<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>1<span class='ltx_text ltx_lst_identifier'>d</span>],<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>0<span class='ltx_text ltx_lst_identifier'>d</span>]]<span class='ltx_text ltx_lst_space'> </span>/<span class='ltx_text ltx_lst_space'> </span>8<span class='ltx_text ltx_lst_identifier'>d</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>2<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>3<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span>4<span class="ltx_text ltx_lst_identifier">d</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>2<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>3<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span>4<span class='ltx_text ltx_lst_identifier'>d</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">vect</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+4<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+8<span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">vect</span>+12<span class="ltx_text ltx_lst_identifier">d</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>vect</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+4<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+8<span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>vect</span>+12<span class='ltx_text ltx_lst_identifier'>d</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>{[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum</span>({<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">weights</span>[<span class="ltx_text ltx_lst_identifier">iv</span>]<span class="ltx_text ltx_lst_space"> </span>*<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">rotate</span>(<span class="ltx_text ltx_lst_identifier">iv</span>-1,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)}[[…,<span class="ltx_text ltx_lst_identifier">i</span>,j]])}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>{[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum</span>({<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>weights</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>]<span class='ltx_text ltx_lst_space'> </span>*<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>rotate</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>-1,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)}[[…,<span class='ltx_text ltx_lst_identifier'>i</span>,j]])}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">mat</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>mat</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch2.S2.SS3.SSSx2.p6" class="ltx_para"> | <div id='Ch2.S2.SS3.SSSx2.p6' class='ltx_para'> |
<p class="ltx_p">Line 6 defines the array of weights as given on the left side of Fig. <a href="#Ch2.F1" title="Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.1</span></a>. | <p class='ltx_p'>Line 6 defines the array of weights as given on the left side of Fig. <a href='#Ch2.F1' title='Figure 2.1 ‣ Relaxation ‣ 2.2.3 Putting it all Together ‣ 2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.1</span></a>. |
Our example array is initialized in lines 8–9. | Our example array is initialized in lines 8–9. |
The relaxation step is specified in line 12. | The relaxation step is specified in line 12. |
At its core, all elements are re-computed by operations on the entire array | At its core, all elements are re-computed by operations on the entire array |
rather than individual elements. | rather than individual elements. |
This is achieved by applying <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">rotate</span> for each legal index position <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span> | This is achieved by applying <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>rotate</span> for each legal index position <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span> |
into the array of weights <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">weights</span>. | into the array of weights <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>weights</span>. |
Since the expression <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">{<span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span>-><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">weights</span>[<span class="ltx_text ltx_lst_identifier">iv</span>]<span class="ltx_text ltx_lst_space"> </span>*<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">rotate</span>(<span class="ltx_text ltx_lst_identifier">iv</span>-1,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mat</span>)}</span> | Since the expression <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>{<span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span>-><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>weights</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>]<span class='ltx_text ltx_lst_space'> </span>*<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>rotate</span>(<span class='ltx_text ltx_lst_identifier'>iv</span>-1,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mat</span>)}</span> |
computes a 3 by 3 array of matrices; the reduction operation <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sum</span> | computes a 3 by 3 array of matrices; the reduction operation <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sum</span> |
needs to be directed towards the outer two axes of that expression only. | needs to be directed towards the outer two axes of that expression only. |
This is achieved through axis control using a selection index <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[\<span class="ltx_text ltx_lst_identifier">dots</span>,<span class="ltx_text ltx_lst_identifier">i</span>,j]</span> | This is achieved through axis control using a selection index <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[\<span class='ltx_text ltx_lst_identifier'>dots</span>,<span class='ltx_text ltx_lst_identifier'>i</span>,j]</span> |
within a set notation over <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">j</span>.</p> | within a set notation over <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>j</span>.</p> |
</div> | </div> |
<div id="Thmtheorem16" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem16' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 16. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 16. </h6> |
<div id="Thmtheorem16.p1" class="ltx_para"> | <div id='Thmtheorem16.p1' class='ltx_para'> |
<p class="ltx_p">Another variant of relaxation problems requires the boundary elements to have | <p class='ltx_p'>Another variant of relaxation problems requires the boundary elements to have |
a fixed value. | a fixed value. |
Can you modify the above solution in a way that causes all boundary elements | Can you modify the above solution in a way that causes all boundary elements |
to be 0? [<span class="ltx_text ltx_font_bold">Hint:</span> You may consider the boundary elements to actually be | to be 0? [<span class='ltx_text ltx_font_bold'>Hint:</span> You may consider the boundary elements to actually be |
located <span class="ltx_text ltx_font_bold">outside</span> the matrix]</p> | located <span class='ltx_text ltx_font_bold'>outside</span> the matrix]</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch3" class="ltx_chapter"> | <section id='Ch3' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 3 </span>Basic Program Structure</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 3 </span>Basic Program Structure</h3> |
| |
<div id="Ch3.p1" class="ltx_para"> | <div id='Ch3.p1' class='ltx_para'> |
<p class="ltx_p">This trail gives a brief introduction into the main language | <p class='ltx_p'>This trail gives a brief introduction into the main language |
constructs most of which have been adopted from standard <span class="ltx_text ltx_font_smallcaps">C</span>. | constructs most of which have been adopted from standard <span class='ltx_text ltx_font_smallcaps'>C</span>. |
We assume some familiarity with standard <span class="ltx_text ltx_font_smallcaps">C</span> and, therefore, | We assume some familiarity with standard <span class='ltx_text ltx_font_smallcaps'>C</span> and, therefore, |
only give a quick overview and highlight the differences | only give a quick overview and highlight the differences |
between <span class="ltx_text ltx_font_smallcaps">SaC</span> and <span class="ltx_text ltx_font_smallcaps">C</span>.</p> | between <span class='ltx_text ltx_font_smallcaps'>SaC</span> and <span class='ltx_text ltx_font_smallcaps'>C</span>.</p> |
</div> | </div> |
<section id="Ch3.S1" class="ltx_section"> | <section id='Ch3.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">3.1 </span>Lesson 3: Functions and their Types</h4> | <span class='ltx_tag ltx_tag_section'>3.1 </span>Lesson 3: Functions and their Types</h4> |
| |
<section id="Ch3.S1.SS1" class="ltx_subsection"> | <section id='Ch3.S1.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.1.1 </span>Function Definitions</h5> | <span class='ltx_tag ltx_tag_subsection'>3.1.1 </span>Function Definitions</h5> |
| |
<div id="Ch3.S1.SS1.p1" class="ltx_para"> | <div id='Ch3.S1.SS1.p1' class='ltx_para'> |
<p class="ltx_p">Like in other modern programming languages functions | <p class='ltx_p'>Like in other modern programming languages functions |
constitute the main form of structuring programs in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | constitute the main form of structuring programs in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
<span class="ltx_text ltx_font_smallcaps">SaC</span> functions very much resemble their <span class="ltx_text ltx_font_smallcaps">C</span> counterparts. | <span class='ltx_text ltx_font_smallcaps'>SaC</span> functions very much resemble their <span class='ltx_text ltx_font_smallcaps'>C</span> counterparts. |
The most prominent difference is that <span class="ltx_text ltx_font_smallcaps">SaC</span> functions can have | The most prominent difference is that <span class='ltx_text ltx_font_smallcaps'>SaC</span> functions can have |
multiple return values, as illustrated in the following example.</p> | multiple return values, as illustrated in the following example.</p> |
</div> | </div> |
<figure id="LST21" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST21' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 21: </span>Function definitions</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 21: </span>Function definitions</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CgppbnQsIGludCBkaXZtb2QoaW50IHgsIGludCB5KQp7CiAg%0AcmV0dXJuICh4IC8geSwgeCAlIHkpOwp9CgppbnQgbWFpbigpCnsKICBkLCBtID0gZGl2bW9kKDgs%0AIDMpOwogIHJldHVybiBkOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CgppbnQsIGludCBkaXZtb2QoaW50IHgsIGludCB5KQp7CiAg%0AcmV0dXJuICh4IC8geSwgeCAlIHkpOwp9CgppbnQgbWFpbigpCnsKICBkLCBtID0gZGl2bW9kKDgs%0AIDMpOwogIHJldHVybiBkOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ScalarArith</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ScalarArith</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">divmod</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>divmod</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">x</span><span class="ltx_text ltx_lst_space"> </span>/<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span><span class="ltx_text ltx_lst_space"> </span>%<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>x</span><span class='ltx_text ltx_lst_space'> </span>/<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span><span class='ltx_text ltx_lst_space'> </span>%<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">d</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">m</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">divmod</span>(8,<span class="ltx_text ltx_lst_space"> </span>3); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>d</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>m</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>divmod</span>(8,<span class='ltx_text ltx_lst_space'> </span>3); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">d</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>d</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch3.S1.SS1.p2" class="ltx_para"> | <div id='Ch3.S1.SS1.p2' class='ltx_para'> |
<p class="ltx_p">A function with multiple return values, like <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">divmod</span> | <p class='ltx_p'>A function with multiple return values, like <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>divmod</span> |
in the above example, has a comma-separated list of return | in the above example, has a comma-separated list of return |
types in front of the function name and the | types in front of the function name and the |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">return</span>-statement likewise contains a comma-separated list | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>return</span>-statement likewise contains a comma-separated list |
of expressions. | of expressions. |
Obviously both lists must coincide in length to make up a | Obviously both lists must coincide in length to make up a |
well-formed program. | well-formed program. |
Functions with multiple return values cannot appear in expression | Functions with multiple return values cannot appear in expression |
positions in <span class="ltx_text ltx_font_smallcaps">SaC</span>, but their results need to be directly assigned to | positions in <span class='ltx_text ltx_font_smallcaps'>SaC</span>, but their results need to be directly assigned to |
identifiers as illustrated above.</p> | identifiers as illustrated above.</p> |
</div> | </div> |
<div id="Thmtheorem17" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem17' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 17. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 17. </h6> |
<div id="Thmtheorem17.p1" class="ltx_para"> | <div id='Thmtheorem17.p1' class='ltx_para'> |
<p class="ltx_p">Extend the above example program to compute the greatest common | <p class='ltx_p'>Extend the above example program to compute the greatest common |
denominator of two numbers using Euclid’s algorithm. | denominator of two numbers using Euclid’s algorithm. |
In particular, use the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">divmod</span>.</p> | In particular, use the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>divmod</span>.</p> |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem18" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem18' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 18. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 18. </h6> |
<div id="Thmtheorem18.p1" class="ltx_para"> | <div id='Thmtheorem18.p1' class='ltx_para'> |
<p class="ltx_p">What happens, if you use the same variable name for both results | <p class='ltx_p'>What happens, if you use the same variable name for both results |
of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">divmod</span>?</p> | of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>divmod</span>?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S1.SS2" class="ltx_subsection"> | <section id='Ch3.S1.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.1.2 </span>Built-in Types</h5> | <span class='ltx_tag ltx_tag_subsection'>3.1.2 </span>Built-in Types</h5> |
| |
<div id="Ch3.S1.SS2.p1" class="ltx_para"> | <div id='Ch3.S1.SS2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> supports all basic types of standard <span class="ltx_text ltx_font_smallcaps">C</span> such as | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> supports all basic types of standard <span class='ltx_text ltx_font_smallcaps'>C</span> such as |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">int</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">float</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">double</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">char</span> etc.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>int</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>float</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>double</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>char</span> etc.</p> |
</div> | </div> |
<div id="Ch3.S1.SS2.p2" class="ltx_para"> | <div id='Ch3.S1.SS2.p2' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for bit freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for bit freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">All basic types are mapped one-to-one to their <span class="ltx_text ltx_font_smallcaps">C</span> counterparts | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>All basic types are mapped one-to-one to their <span class='ltx_text ltx_font_smallcaps'>C</span> counterparts |
and, hence, the same rules apply to them in <span class="ltx_text ltx_font_smallcaps">SaC</span> as in <span class="ltx_text ltx_font_smallcaps">C</span>. | and, hence, the same rules apply to them in <span class='ltx_text ltx_font_smallcaps'>SaC</span> as in <span class='ltx_text ltx_font_smallcaps'>C</span>. |
As a consequence of this, the concrete bit widths used for representation | As a consequence of this, the concrete bit widths used for representation |
and, hence, the range of values for integer types are | and, hence, the range of values for integer types are |
platform-dependent. Although this may be considered undesirable | platform-dependent. Although this may be considered undesirable |
we find it acceptable from a compatibility-with-<span class="ltx_text ltx_font_smallcaps">C</span> perspective.</span></span> | we find it acceptable from a compatibility-with-<span class='ltx_text ltx_font_smallcaps'>C</span> perspective.</span></span> |
</span> | </span> |
</p> | </p> |
</div> | </div> |
<div id="Ch3.S1.SS2.p3" class="ltx_para"> | <div id='Ch3.S1.SS2.p3' class='ltx_para'> |
<p class="ltx_p">In addition to the <span class="ltx_text ltx_font_smallcaps">C</span>-inhereted types, <span class="ltx_text ltx_font_smallcaps">SaC</span> supports three more basic types: | <p class='ltx_p'>In addition to the <span class='ltx_text ltx_font_smallcaps'>C</span>-inhereted types, <span class='ltx_text ltx_font_smallcaps'>SaC</span> supports three more basic types: |
the boolean type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">bool</span> and the integer type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">byte</span>, both | the boolean type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>bool</span> and the integer type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>byte</span>, both |
signed and unsigned. | signed and unsigned. |
Although these are internally mapped to the same <span class="ltx_text ltx_font_smallcaps">C</span> type, on the level | Although these are internally mapped to the same <span class='ltx_text ltx_font_smallcaps'>C</span> type, on the level |
of <span class="ltx_text ltx_font_smallcaps">SaC</span>, there is a strict separation between them. | of <span class='ltx_text ltx_font_smallcaps'>SaC</span>, there is a strict separation between them. |
Neither can be used in places where the other is expected. | Neither can be used in places where the other is expected. |
This separation also applies to the standard <span class="ltx_text ltx_font_smallcaps">C</span> types which rules out | This separation also applies to the standard <span class='ltx_text ltx_font_smallcaps'>C</span> types which rules out |
tacit coercions as one would find them in <span class="ltx_text ltx_font_smallcaps">C</span> or <span class="ltx_text ltx_font_smallcaps">Java</span>.</p> | tacit coercions as one would find them in <span class='ltx_text ltx_font_smallcaps'>C</span> or <span class='ltx_text ltx_font_smallcaps'>Java</span>.</p> |
</div> | </div> |
<div id="Ch3.S1.SS2.p4" class="ltx_para"> | <div id='Ch3.S1.SS2.p4' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for language design freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for language design freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">The reader may wonder why we enforced this strict separation. | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>The reader may wonder why we enforced this strict separation. |
The reason is two-fold: First, it prevents from accidental coercions | The reason is two-fold: First, it prevents from accidental coercions |
and second, it makes type-inference more accessible for the user | and second, it makes type-inference more accessible for the user |
in the absence of explicit type declarations. | in the absence of explicit type declarations. |
Just imagine an overloading of a function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">foo</span> for integer and | Just imagine an overloading of a function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>foo</span> for integer and |
double arguments which would yield different results depending on the type | double arguments which would yield different results depending on the type |
of argument. | of argument. |
If we had implicit coercions in place it would be completely | If we had implicit coercions in place it would be completely |
unclear how the result of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">foo</span>(0)</span> would be computed!</span></span> | unclear how the result of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>foo</span>(0)</span> would be computed!</span></span> |
</span> | </span> |
| |
</p> | </p> |
</div> | </div> |
<div id="Ch3.S1.SS2.p5" class="ltx_para"> | <div id='Ch3.S1.SS2.p5' class='ltx_para'> |
<p class="ltx_p">As a consequence of this strict separation, | <p class='ltx_p'>As a consequence of this strict separation, |
programmers need to apply some rigor when it comes to specifying | programmers need to apply some rigor when it comes to specifying |
constant values. | constant values. |
They have to be attributed with the appropriate suffixes to indicate | They have to be attributed with the appropriate suffixes to indicate |
the desired runtime representation. | the desired runtime representation. |
Note here, that we adopted the suffixes and default rules from <span class="ltx_text ltx_font_smallcaps">C</span>. | Note here, that we adopted the suffixes and default rules from <span class='ltx_text ltx_font_smallcaps'>C</span>. |
Here a few examples:</p> | Here a few examples:</p> |
</div> | </div> |
<figure id="LST22" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST22' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 22: </span>Element-Type segregation</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 22: </span>Element-Type segregation</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKYm9vbCBmb28oZG91YmxlIHgpCnsKICBy%0AZXR1cm4gdHJ1ZTsKfQoKYm9vbCBiYXIoZmxvYXQgeCkKewogIHJldHVybiBmYWxzZTsKfQoKaW50%0AIG1haW4oKQp7CiAgLyogVHlwZSBlcnJvcjogZm9vIGlzIG5vdCBkZWZpbmVkIG9uIGludCEgICov%0ACiAgYSA9IGZvbygwKTsKCiAgLyogQ29ycmVjdCBjYWxsczogICovCiAgYSA9IGZvbygwLjApOwog%0AIGEgPSBmb28oMGQpOwoKICAvKiBUeXBlIGVycm9yOiBiYXIgaXMgbm90IGRlZmluZWQgb24gZG91%0AYmxlISAgKi8KICBhID0gYmFyKDAuMCk7CgogIC8qIENvcnJlY3QgY2FsbHM6ICAgKi8KICBhID0g%0AYmFyKDBmKTsKICBhID0gYmFyKDAuMGYpOwoKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKYm9vbCBmb28oZG91YmxlIHgpCnsKICBy%0AZXR1cm4gdHJ1ZTsKfQoKYm9vbCBiYXIoZmxvYXQgeCkKewogIHJldHVybiBmYWxzZTsKfQoKaW50%0AIG1haW4oKQp7CiAgLyogVHlwZSBlcnJvcjogZm9vIGlzIG5vdCBkZWZpbmVkIG9uIGludCEgICov%0ACiAgYSA9IGZvbygwKTsKCiAgLyogQ29ycmVjdCBjYWxsczogICovCiAgYSA9IGZvbygwLjApOwog%0AIGEgPSBmb28oMGQpOwoKICAvKiBUeXBlIGVycm9yOiBiYXIgaXMgbm90IGRlZmluZWQgb24gZG91%0AYmxlISAgKi8KICBhID0gYmFyKDAuMCk7CgogIC8qIENvcnJlY3QgY2FsbHM6ICAgKi8KICBhID0g%0AYmFyKDBmKTsKICBhID0gYmFyKDAuMGYpOwoKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">bool</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foo</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>bool</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foo</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">true</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>true</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">bool</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">float</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>bool</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>float</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">false</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>false</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Type<span class="ltx_text ltx_lst_space"> </span>error:<span class="ltx_text ltx_lst_space"> </span>foo<span class="ltx_text ltx_lst_space"> </span>is<span class="ltx_text ltx_lst_space"> </span>not<span class="ltx_text ltx_lst_space"> </span>defined<span class="ltx_text ltx_lst_space"> </span>on<span class="ltx_text ltx_lst_space"> </span>int!<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Type<span class='ltx_text ltx_lst_space'> </span>error:<span class='ltx_text ltx_lst_space'> </span>foo<span class='ltx_text ltx_lst_space'> </span>is<span class='ltx_text ltx_lst_space'> </span>not<span class='ltx_text ltx_lst_space'> </span>defined<span class='ltx_text ltx_lst_space'> </span>on<span class='ltx_text ltx_lst_space'> </span>int!<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foo</span>(0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foo</span>(0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Correct<span class="ltx_text ltx_lst_space"> </span>calls:<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Correct<span class='ltx_text ltx_lst_space'> </span>calls:<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foo</span>(0.0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foo</span>(0.0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foo</span>(0<span class="ltx_text ltx_lst_identifier">d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foo</span>(0<span class='ltx_text ltx_lst_identifier'>d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Type<span class="ltx_text ltx_lst_space"> </span>error:<span class="ltx_text ltx_lst_space"> </span>bar<span class="ltx_text ltx_lst_space"> </span>is<span class="ltx_text ltx_lst_space"> </span>not<span class="ltx_text ltx_lst_space"> </span>defined<span class="ltx_text ltx_lst_space"> </span>on<span class="ltx_text ltx_lst_space"> </span>double!<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Type<span class='ltx_text ltx_lst_space'> </span>error:<span class='ltx_text ltx_lst_space'> </span>bar<span class='ltx_text ltx_lst_space'> </span>is<span class='ltx_text ltx_lst_space'> </span>not<span class='ltx_text ltx_lst_space'> </span>defined<span class='ltx_text ltx_lst_space'> </span>on<span class='ltx_text ltx_lst_space'> </span>double!<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(0.0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(0.0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Correct<span class="ltx_text ltx_lst_space"> </span>calls:<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Correct<span class='ltx_text ltx_lst_space'> </span>calls:<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(0<span class="ltx_text ltx_lst_identifier">f</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(0<span class='ltx_text ltx_lst_identifier'>f</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(0.0<span class="ltx_text ltx_lst_identifier">f</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(0.0<span class='ltx_text ltx_lst_identifier'>f</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">30</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>30</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">31</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>31</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Thmtheorem19" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem19' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 19. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 19. </h6> |
<div id="Thmtheorem19.p1" class="ltx_para"> | <div id='Thmtheorem19.p1' class='ltx_para'> |
<p class="ltx_p">How can you modify the above program in a way that allows the programmer by | <p class='ltx_p'>How can you modify the above program in a way that allows the programmer by |
a simple define to switch the argument type of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">foo</span> between float | a simple define to switch the argument type of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>foo</span> between float |
and double and all the calls to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">foo</span> accordingly?</p> | and double and all the calls to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>foo</span> accordingly?</p> |
</div> | </div> |
<div id="Thmtheorem19.p2" class="ltx_para"> | <div id='Thmtheorem19.p2' class='ltx_para'> |
<p class="ltx_p">[<span class="ltx_text ltx_font_bold">Hint:</span> Use the <span class="ltx_text ltx_font_smallcaps">C</span> preprocessor to make the necessary modifications]</p> | <p class='ltx_p'>[<span class='ltx_text ltx_font_bold'>Hint:</span> Use the <span class='ltx_text ltx_font_smallcaps'>C</span> preprocessor to make the necessary modifications]</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S1.SS3" class="ltx_subsection"> | <section id='Ch3.S1.SS3' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.1.3 </span>Subtyping</h5> | <span class='ltx_tag ltx_tag_subsection'>3.1.3 </span>Subtyping</h5> |
| |
<div id="Ch3.S1.SS3.p1" class="ltx_para"> | <div id='Ch3.S1.SS3.p1' class='ltx_para'> |
<p class="ltx_p">For each basic type there is an entire hierarchy of array types | <p class='ltx_p'>For each basic type there is an entire hierarchy of array types |
that specify the shape of an array (remember that any expression | that specify the shape of an array (remember that any expression |
in <span class="ltx_text ltx_font_smallcaps">SaC</span> denotes an array) at different levels of accurateness. | in <span class='ltx_text ltx_font_smallcaps'>SaC</span> denotes an array) at different levels of accurateness. |
Using type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">int</span> as a running example, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">int</span> | Using type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>int</span> as a running example, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>int</span> |
itself denotes an integer array with rank zero, the empty | itself denotes an integer array with rank zero, the empty |
vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[]</span> as shape vector and a single element, | vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[]</span> as shape vector and a single element, |
in other words the equivalent of a scalar value. | in other words the equivalent of a scalar value. |
Then, there are (real) array types denoting arrays of rank | Then, there are (real) array types denoting arrays of rank |
greater than zero, e.g. <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[4]</span> denotes a 4-element | greater than zero, e.g. <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[4]</span> denotes a 4-element |
vector while <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[10,20]</span> denotes a 10 by 20 element | vector while <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[10,20]</span> denotes a 10 by 20 element |
matrix.</p> | matrix.</p> |
</div> | </div> |
<div id="Ch3.S1.SS3.p2" class="ltx_para"> | <div id='Ch3.S1.SS3.p2' class='ltx_para'> |
<p class="ltx_p">Whereas all these types specify exact shapes, <span class="ltx_text ltx_font_smallcaps">SaC</span> also features | <p class='ltx_p'>Whereas all these types specify exact shapes, <span class='ltx_text ltx_font_smallcaps'>SaC</span> also features |
types that solely denote the rank of some array, but leave the | types that solely denote the rank of some array, but leave the |
concrete shape open, e.g. <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.]</span> describes the type | concrete shape open, e.g. <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.]</span> describes the type |
of all integer vectors (of any length) and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]</span> | of all integer vectors (of any length) and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]</span> |
is the type of all integer matrices. | is the type of all integer matrices. |
In order to support rank-invariant programming, | In order to support rank-invariant programming, |
<span class="ltx_text ltx_font_smallcaps">SaC</span>, furthermore, has types that not only abstract from concrete | <span class='ltx_text ltx_font_smallcaps'>SaC</span>, furthermore, has types that not only abstract from concrete |
shapes but even from concrete ranks. | shapes but even from concrete ranks. |
These are <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*]</span> which is the type of all integer arrays | These are <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*]</span> which is the type of all integer arrays |
of any rank and shape, including rank-zero arrays (usually referred | of any rank and shape, including rank-zero arrays (usually referred |
to as scalars) and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[+]</span>, the type of all “true” integer | to as scalars) and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[+]</span>, the type of all “true” integer |
arrays, i.e. arrays of rank greater than zero.</p> | arrays, i.e. arrays of rank greater than zero.</p> |
</div> | </div> |
<div id="Ch3.S1.SS3.p3" class="ltx_para"> | <div id='Ch3.S1.SS3.p3' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> defines a subtype relationship between array types in the obvious | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> defines a subtype relationship between array types in the obvious |
way. | way. |
Figure <a href="#Ch3.F1" title="Figure 3.1 ‣ 3.1.3 Subtyping ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">3.1</span></a> shows this relationship for arrays of | Figure <a href='#Ch3.F1' title='Figure 3.1 ‣ 3.1.3 Subtyping ‣ 3.1 Lesson 3: Functions and their Types ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>3.1</span></a> shows this relationship for arrays of |
integer elements in a graphical form.</p> | integer elements in a graphical form.</p> |
</div> | </div> |
<figure id="Ch3.F1" class="ltx_figure"><svg id="Ch3.F1.pic1" class="ltx_picture ltx_centering" height="144.08" overflow="visible" version="1.1" viewBox="-35.4 -12.98 449.02 144.08" width="449.02"><g transform="matrix(1 0 0 -1 0 118.12)"><g stroke="#000000"><g fill="#000000"><g color="#000000" stroke-width="0.4pt"><g transform="matrix(1 0 0 1 -28.02 115)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="56.04"> | <figure id='Ch3.F1' class='ltx_figure'><svg id='Ch3.F1.pic1' class='ltx_picture ltx_centering' height='144.08' overflow='visible' version='1.1' viewbox='-35.4 -12.98 449.02 144.08' width='449.02'><g transform='matrix(1 0 0 -1 0 118.12)'><g stroke='#000000'><g fill='#000000'><g color='#000000' stroke-width='0.4pt'><g transform='matrix(1 0 0 1 -28.02 115)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='56.04'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[*]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 31.04 75.63)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="56.04"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[*]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 31.04 75.63)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='56.04'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[+]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 31.04 36.26)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="56.04"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[+]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 31.04 36.26)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='56.04'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[.]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 159.49 36.26)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="74.72"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[.]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 159.49 36.26)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='74.72'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[.,.]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 307.63 36.26)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="93.4"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[.,.]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 307.63 36.26)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='93.4'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[.,.,.]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 392.97 36.26)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="9.34"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[.,.,.]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 392.97 36.26)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='9.34'> |
<p class="ltx_p"><math id="Ch3.F1.pic1.m1" class="ltx_Math" alttext="\cdots" display="inline"><mi mathsize="90%" mathvariant="normal">⋯</mi></math></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 31.04 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="56.04"> | <p class='ltx_p'><math id='Ch3.F1.pic1.m1' class='ltx_Math' alttext='\cdots' display='inline'><mi mathsize='90%' mathvariant='normal'>⋯</mi></math></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 31.04 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='56.04'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[1]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 78.28 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="56.04"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[1]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 78.28 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='56.04'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[4]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 133.13 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="9.34"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[4]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 133.13 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='9.34'> |
<p class="ltx_p"><math id="Ch3.F1.pic1.m2" class="ltx_Math" alttext="\cdots" display="inline"><mi mathsize="90%" mathvariant="normal">⋯</mi></math></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 159.49 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="74.72"> | <p class='ltx_p'><math id='Ch3.F1.pic1.m2' class='ltx_Math' alttext='\cdots' display='inline'><mi mathsize='90%' mathvariant='normal'>⋯</mi></math></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 159.49 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='74.72'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[7,2]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 218.55 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="74.72"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[7,2]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 218.55 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='74.72'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[2,9]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 286.67 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="9.34"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[2,9]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 286.67 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='9.34'> |
<p class="ltx_p"><math id="Ch3.F1.pic1.m3" class="ltx_Math" alttext="\cdots" display="inline"><mi mathsize="90%" mathvariant="normal">⋯</mi></math></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 302.96 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="102.74"> | <p class='ltx_p'><math id='Ch3.F1.pic1.m3' class='ltx_Math' alttext='\cdots' display='inline'><mi mathsize='90%' mathvariant='normal'>⋯</mi></math></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 302.96 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='102.74'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int[9,8,11]</span></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 396.9 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="9.34"> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int[9,8,11]</span></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 396.9 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='9.34'> |
<p class="ltx_p"><math id="Ch3.F1.pic1.m4" class="ltx_Math" alttext="\cdots" display="inline"><mi mathsize="90%" mathvariant="normal">⋯</mi></math></p></foreignObject></switch></g></g><g transform="matrix(1 0 0 1 -14.01 -3.11)"><g class="ltx_svg_fog" transform="matrix(1 0 0 -1 0 11.21)"><switch><foreignObject color="#000000" height="100%" overflow="visible" width="28.02"> | <p class='ltx_p'><math id='Ch3.F1.pic1.m4' class='ltx_Math' alttext='\cdots' display='inline'><mi mathsize='90%' mathvariant='normal'>⋯</mi></math></p></foreignobject></switch></g></g><g transform='matrix(1 0 0 1 -14.01 -3.11)'><g class='ltx_svg_fog' transform='matrix(1 0 0 -1 0 11.21)'><switch><foreignobject color='#000000' height='100%' overflow='visible' width='28.02'> |
<p class="ltx_p"><span class="ltx_text ltx_font_typewriter" style="font-size:90%;">int</span></p></foreignObject></switch></g></g><path d="M 0 107.62 L 0 10.49" style="fill:none"></path><path d="M 15.74 107.62 L 43.32 89.23" style="fill:none"></path><path d="M 59.06 68.25 L 59.06 49.86" style="fill:none"></path><path d="M 91.96 69.34 L 160.13 49.86" style="fill:none"></path><path d="M 91.96 74.35 L 302.74 46.25" style="fill:none"></path><path d="M 59.06 28.88 L 59.06 10.49" style="fill:none"></path><path d="M 71.65 28.88 L 93.71 10.49" style="fill:none"></path><path d="M 196.85 28.88 L 196.85 10.49" style="fill:none"></path><path d="M 212.59 28.88 L 240.17 10.49" style="fill:none"></path><path d="M 354.33 28.88 L 354.33 10.49" style="fill:none"></path></g></g></g></g></svg> | <p class='ltx_p'><span class='ltx_text ltx_font_typewriter' style='font-size:90%;'>int</span></p></foreignobject></switch></g></g><path d='M 0 107.62 L 0 10.49' style='fill:none'></path><path d='M 15.74 107.62 L 43.32 89.23' style='fill:none'></path><path d='M 59.06 68.25 L 59.06 49.86' style='fill:none'></path><path d='M 91.96 69.34 L 160.13 49.86' style='fill:none'></path><path d='M 91.96 74.35 L 302.74 46.25' style='fill:none'></path><path d='M 59.06 28.88 L 59.06 10.49' style='fill:none'></path><path d='M 71.65 28.88 L 93.71 10.49' style='fill:none'></path><path d='M 196.85 28.88 L 196.85 10.49' style='fill:none'></path><path d='M 212.59 28.88 L 240.17 10.49' style='fill:none'></path><path d='M 354.33 28.88 L 354.33 10.49' style='fill:none'></path></g></g></g></g></svg> |
<figcaption class="ltx_caption ltx_centering"><span class="ltx_tag ltx_tag_figure">Figure 3.1: </span>The hierarchy of array types of integer elements.</figcaption> | <figcaption class='ltx_caption ltx_centering'><span class='ltx_tag ltx_tag_figure'>Figure 3.1: </span>The hierarchy of array types of integer elements.</figcaption> |
</figure> | </figure> |
<div id="Ch3.S1.SS3.p4" class="ltx_para"> | <div id='Ch3.S1.SS3.p4' class='ltx_para'> |
<p class="ltx_p">Whenever two types are in subtype relationship they are connected by a line. | <p class='ltx_p'>Whenever two types are in subtype relationship they are connected by a line. |
For example, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[+]</span> is a subtype of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*]</span>, | For example, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[+]</span> is a subtype of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*]</span>, |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.]</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]</span> are both subtypes of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[+]</span> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.]</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]</span> are both subtypes of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[+]</span> |
and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[12]</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[42]</span> are subtypes of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.]</span>. | and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[12]</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[42]</span> are subtypes of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.]</span>. |
As we can see, the subtyping hierarchy of <span class="ltx_text ltx_font_smallcaps">SaC</span> has exactly four levels.</p> | As we can see, the subtyping hierarchy of <span class='ltx_text ltx_font_smallcaps'>SaC</span> has exactly four levels.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S1.SS4" class="ltx_subsection"> | <section id='Ch3.S1.SS4' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.1.4 </span>Function Overloading</h5> | <span class='ltx_tag ltx_tag_subsection'>3.1.4 </span>Function Overloading</h5> |
| |
<div id="Ch3.S1.SS4.p1" class="ltx_para"> | <div id='Ch3.S1.SS4.p1' class='ltx_para'> |
<p class="ltx_p">The real power of subtyping unfolds when it is combined with function | <p class='ltx_p'>The real power of subtyping unfolds when it is combined with function |
overloading. | overloading. |
It allows programmers to specify | It allows programmers to specify |
later add special definitions for a few special cases.</p> | later add special definitions for a few special cases.</p> |
</div> | </div> |
<div id="Ch3.S1.SS4.p2" class="ltx_para"> | <div id='Ch3.S1.SS4.p2' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for OO-freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for OO-freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">This can be seen as a more general form of inheritance. If you restrict | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>This can be seen as a more general form of inheritance. If you restrict |
overloading to one argument only, say the first one, it equates | overloading to one argument only, say the first one, it equates |
to inheritance in OO languages. However, the overloading of <span class="ltx_text ltx_font_smallcaps">SaC</span> is much more powerful. | to inheritance in OO languages. However, the overloading of <span class='ltx_text ltx_font_smallcaps'>SaC</span> is much more powerful. |
Not only does it support inheritance on </span><span class="ltx_text ltx_font_bold">all</span><span class="ltx_text ltx_font_italic"> arguments but it also | Not only does it support inheritance on </span><span class='ltx_text ltx_font_bold'>all</span><span class='ltx_text ltx_font_italic'> arguments but it also |
supports overloading across different types. | supports overloading across different types. |
These features render several of the well-known OO programming pattern | These features render several of the well-known OO programming pattern |
such as the visitor pattern superfluous in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | such as the visitor pattern superfluous in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
Instead, the desired overloading can be specified directly. | Instead, the desired overloading can be specified directly. |
</span></span> | </span></span> |
</p> | </p> |
</div> | </div> |
<div id="Ch3.S1.SS4.p3" class="ltx_para"> | <div id='Ch3.S1.SS4.p3' class='ltx_para'> |
<p class="ltx_p">Here, an example for element-type overloading:</p> | <p class='ltx_p'>Here, an example for element-type overloading:</p> |
</div> | </div> |
<figure id="LST23" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST23' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 23: </span>Function overloading</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 23: </span>Function overloading</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IHR3aWNlKGludCB4KQp7%0ACiAgcmV0dXJuIDIgKiB4Owp9Cgpkb3VibGUgdHdpY2UoZG91YmxlIHgpCnsKICByZXR1cm4gMi4w%0AICogeDsKfQoKaW50IG1haW4oKQp7CiAgYSA9IHR3aWNlKDUpOwogIHByaW50KGEpOwoKICBiID0g%0AdHdpY2UoNS45KTsKICBwcmludChiKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IHR3aWNlKGludCB4KQp7%0ACiAgcmV0dXJuIDIgKiB4Owp9Cgpkb3VibGUgdHdpY2UoZG91YmxlIHgpCnsKICByZXR1cm4gMi4w%0AICogeDsKfQoKaW50IG1haW4oKQp7CiAgYSA9IHR3aWNlKDUpOwogIHByaW50KGEpOwoKICBiID0g%0AdHdpY2UoNS45KTsKICBwcmludChiKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ScalarArith</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ScalarArith</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">twice</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>twice</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>2<span class="ltx_text ltx_lst_space"> </span>*<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>2<span class='ltx_text ltx_lst_space'> </span>*<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">twice</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>twice</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>2.0<span class="ltx_text ltx_lst_space"> </span>*<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>2.0<span class='ltx_text ltx_lst_space'> </span>*<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">twice</span>(5); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>twice</span>(5); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">twice</span>(5.9); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>twice</span>(5.9); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch3.S1.SS4.p4" class="ltx_para"> | <div id='Ch3.S1.SS4.p4' class='ltx_para'> |
<p class="ltx_p">When utilising the overloading on our hierarchy of array types | <p class='ltx_p'>When utilising the overloading on our hierarchy of array types |
we can even achieve a pattern matching like programming style as | we can even achieve a pattern matching like programming style as |
demonstrated in the next example. | demonstrated in the next example. |
Here, we have three instances of the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">quicksort</span>, | Here, we have three instances of the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>quicksort</span>, |
one for vectors of any length, one for vectors of length one | one for vectors of any length, one for vectors of length one |
and one for empty vectors. | and one for empty vectors. |
The latter two boil down to the identity function. | The latter two boil down to the identity function. |
As a result we can safely access the first element of the argument | As a result we can safely access the first element of the argument |
vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">v</span> in the general instance because any argument vector | vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>v</span> in the general instance because any argument vector |
is guaranteed to have at least two elements.</p> | is guaranteed to have at least two elements.</p> |
</div> | </div> |
<figure id="LST24" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST24' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 24: </span>Overloading as pattern matching.</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 24: </span>Overloading as pattern matching.</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,aW50Wy5dIHF1aWNrc29ydChpbnRbLl0gdikKewogICBwaXZvdCA9IHZbWzFdXTsKICAgLyogLi4u%0AICAqLwp9CgppbnRbMV0gcXVpY2tzb3J0KGludFsxXSB2KQp7CiAgcmV0dXJuIHY7Cn0KCmludFsw%0AXSBxdWlja3NvcnQoaW50WzBdIHYpCnsKICByZXR1cm4gdjsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,aW50Wy5dIHF1aWNrc29ydChpbnRbLl0gdikKewogICBwaXZvdCA9IHZbWzFdXTsKICAgLyogLi4u%0AICAqLwp9CgppbnRbMV0gcXVpY2tzb3J0KGludFsxXSB2KQp7CiAgcmV0dXJuIHY7Cn0KCmludFsw%0AXSBxdWlja3NvcnQoaW50WzBdIHYpCnsKICByZXR1cm4gdjsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">quicksort</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>quicksort</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">pivot</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>[[1]]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>pivot</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>[[1]]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[1]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">quicksort</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[1]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[1]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>quicksort</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[1]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[0]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">quicksort</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[0]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[0]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>quicksort</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[0]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Thmtheorem20" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem20' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 20. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 20. </h6> |
<div id="Thmtheorem20.p1" class="ltx_para"> | <div id='Thmtheorem20.p1' class='ltx_para'> |
<p class="ltx_p">In a <span class="ltx_text ltx_font_smallcaps">C</span> program, functions like <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">+</span> can be applied to arbitrary | <p class='ltx_p'>In a <span class='ltx_text ltx_font_smallcaps'>C</span> program, functions like <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>+</span> can be applied to arbitrary |
combinations of integer and double arguments. | combinations of integer and double arguments. |
Try to mimic that behaviour in <span class="ltx_text ltx_font_smallcaps">SaC</span> by defining a function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">cPlus</span> | Try to mimic that behaviour in <span class='ltx_text ltx_font_smallcaps'>SaC</span> by defining a function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>cPlus</span> |
and by overloading it appropriately.</p> | and by overloading it appropriately.</p> |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem21" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem21' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 21. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 21. </h6> |
<div id="Thmtheorem21.p1" class="ltx_para"> | <div id='Thmtheorem21.p1' class='ltx_para'> |
<p class="ltx_p">In OO languages inheritance cannot always be statically resolved. | <p class='ltx_p'>In OO languages inheritance cannot always be statically resolved. |
This leads to what is referred to as dynamic dispatch, i.e. the disambiguation | This leads to what is referred to as dynamic dispatch, i.e. the disambiguation |
of function calls at runtime. | of function calls at runtime. |
Is that required in <span class="ltx_text ltx_font_smallcaps">SaC</span> too? | Is that required in <span class='ltx_text ltx_font_smallcaps'>SaC</span> too? |
If so, can you come up with an example program that demonstrates this?</p> | If so, can you come up with an example program that demonstrates this?</p> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch3.S2" class="ltx_section"> | <section id='Ch3.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">3.2 </span>Lesson 4: Function Bodies</h4> | <span class='ltx_tag ltx_tag_section'>3.2 </span>Lesson 4: Function Bodies</h4> |
| |
<section id="Ch3.S2.SS1" class="ltx_subsection"> | <section id='Ch3.S2.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.2.1 </span>Variable Declarations</h5> | <span class='ltx_tag ltx_tag_subsection'>3.2.1 </span>Variable Declarations</h5> |
| |
<div id="Ch3.S2.SS1.p1" class="ltx_para"> | <div id='Ch3.S2.SS1.p1' class='ltx_para'> |
<p class="ltx_p">Local variables within bodies of <span class="ltx_text ltx_font_smallcaps">SaC</span> functions are typically not | <p class='ltx_p'>Local variables within bodies of <span class='ltx_text ltx_font_smallcaps'>SaC</span> functions are typically not |
declared (in contrast to <span class="ltx_text ltx_font_smallcaps">C</span>), but the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler infers proper | declared (in contrast to <span class='ltx_text ltx_font_smallcaps'>C</span>), but the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler infers proper |
types for local variables or yields an appropriate error message. | types for local variables or yields an appropriate error message. |
Nevertheless, it is syntactically legal to add explicit variable | Nevertheless, it is syntactically legal to add explicit variable |
declarations in <span class="ltx_text ltx_font_smallcaps">SaC</span> in exactly the same way as in <span class="ltx_text ltx_font_smallcaps">C</span>.</p> | declarations in <span class='ltx_text ltx_font_smallcaps'>SaC</span> in exactly the same way as in <span class='ltx_text ltx_font_smallcaps'>C</span>.</p> |
</div> | </div> |
<div id="Ch3.S2.SS1.p2" class="ltx_para"> | <div id='Ch3.S2.SS1.p2' class='ltx_para'> |
<p class="ltx_p">There is one difference to <span class="ltx_text ltx_font_smallcaps">C</span>, however: While <span class="ltx_text ltx_font_smallcaps">C</span> allows local | <p class='ltx_p'>There is one difference to <span class='ltx_text ltx_font_smallcaps'>C</span>, however: While <span class='ltx_text ltx_font_smallcaps'>C</span> allows local |
variable declarations at the beginning of each code block and | variable declarations at the beginning of each code block and |
in the latest C99 standard instructions and declarations can | in the latest C99 standard instructions and declarations can |
even be interleaved, <span class="ltx_text ltx_font_smallcaps">SaC</span> only supports variable declarations on | even be interleaved, <span class='ltx_text ltx_font_smallcaps'>SaC</span> only supports variable declarations on |
the level of function bodies, and they must precede any instruction.</p> | the level of function bodies, and they must precede any instruction.</p> |
</div> | </div> |
<div id="Thmtheorem22" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem22' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 22. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 22. </h6> |
<div id="Thmtheorem22.p1" class="ltx_para"> | <div id='Thmtheorem22.p1' class='ltx_para'> |
<p class="ltx_p">Rewrite your solution to computing the greatest common denominator | <p class='ltx_p'>Rewrite your solution to computing the greatest common denominator |
of two numbers from the previous exercise such that each subexpression | of two numbers from the previous exercise such that each subexpression |
is assigned to an identifier, i.e. flatten any nested expression. | is assigned to an identifier, i.e. flatten any nested expression. |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem23" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem23' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 23. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 23. </h6> |
<div id="Thmtheorem23.p1" class="ltx_para"> | <div id='Thmtheorem23.p1' class='ltx_para'> |
<p class="ltx_p">The previous exercise only used scalar types, more precisely <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">int</span>. | <p class='ltx_p'>The previous exercise only used scalar types, more precisely <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>int</span>. |
What happens if you replace <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">int</span> in all variable declarations | What happens if you replace <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>int</span> in all variable declarations |
by its supertype <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*]</span>?</p> | by its supertype <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*]</span>?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S2.SS2" class="ltx_subsection"> | <section id='Ch3.S2.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.2.2 </span>Assignments</h5> | <span class='ltx_tag ltx_tag_subsection'>3.2.2 </span>Assignments</h5> |
| |
<div id="Ch3.S2.SS2.p1" class="ltx_para"> | <div id='Ch3.S2.SS2.p1' class='ltx_para'> |
<p class="ltx_p">As we have already seen in the previous trails, <span class="ltx_text ltx_font_smallcaps">SaC</span> allows for | <p class='ltx_p'>As we have already seen in the previous trails, <span class='ltx_text ltx_font_smallcaps'>SaC</span> allows for |
<span class="ltx_text ltx_font_smallcaps">C</span>-style assignments to variables. | <span class='ltx_text ltx_font_smallcaps'>C</span>-style assignments to variables. |
In contrast to <span class="ltx_text ltx_font_smallcaps">C</span>, | In contrast to <span class='ltx_text ltx_font_smallcaps'>C</span>, |
assignments cannot be placed within expression positions and | assignments cannot be placed within expression positions and |
the comma-operator of <span class="ltx_text ltx_font_smallcaps">C</span> is not supported. | the comma-operator of <span class='ltx_text ltx_font_smallcaps'>C</span> is not supported. |
However, the combinations of operators and assignment are | However, the combinations of operators and assignment are |
the same in <span class="ltx_text ltx_font_smallcaps">SaC</span> as in <span class="ltx_text ltx_font_smallcaps">C</span></p> | the same in <span class='ltx_text ltx_font_smallcaps'>SaC</span> as in <span class='ltx_text ltx_font_smallcaps'>C</span></p> |
</div> | </div> |
<figure id="LST25" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST25' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 25: </span>Operator assignments in SaC</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 25: </span>Operator assignments in SaC</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIEFycmF5OiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IDQyOwog%0AIHByaW50KGEpOwogIGErKzsKICBwcmludChhKTsKICBhICs9IDU7CiAgcHJpbnQoYSk7CiAgYSAt%0APSBhOwogIHByaW50KGEpOwoKICB2ID0gWzEsMiwzLDQsNV07CiAgcHJpbnQodik7CiAgdiArPSAx%0AOwogIHByaW50KHYpOwogIHZbMF0gPSAwOwogIHByaW50KHYpOwoKICBtID0gW3Ysdix2XTsKICBw%0AcmludChtKTsKICBtKys7CiAgcHJpbnQobSk7CgogIHJldHVybiBhOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIEFycmF5OiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IDQyOwog%0AIHByaW50KGEpOwogIGErKzsKICBwcmludChhKTsKICBhICs9IDU7CiAgcHJpbnQoYSk7CiAgYSAt%0APSBhOwogIHByaW50KGEpOwoKICB2ID0gWzEsMiwzLDQsNV07CiAgcHJpbnQodik7CiAgdiArPSAx%0AOwogIHByaW50KHYpOwogIHZbMF0gPSAwOwogIHByaW50KHYpOwoKICBtID0gW3Ysdix2XTsKICBw%0AcmludChtKTsKICBtKys7CiAgcHJpbnQobSk7CgogIHJldHVybiBhOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>++; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>++; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>+=<span class="ltx_text ltx_lst_space"> </span>5; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>+=<span class='ltx_text ltx_lst_space'> </span>5; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>-=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>-=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[1,2,3,4,5]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[1,2,3,4,5]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">v</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>v</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span><span class="ltx_text ltx_lst_space"> </span>+=<span class="ltx_text ltx_lst_space"> </span>1; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span><span class='ltx_text ltx_lst_space'> </span>+=<span class='ltx_text ltx_lst_space'> </span>1; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">v</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>v</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">v</span>[0]<span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>v</span>[0]<span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">v</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>v</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">m</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">v</span>,<span class="ltx_text ltx_lst_identifier">v</span>,<span class="ltx_text ltx_lst_identifier">v</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>m</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>v</span>,<span class='ltx_text ltx_lst_identifier'>v</span>,<span class='ltx_text ltx_lst_identifier'>v</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">m</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>m</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">m</span>++; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>m</span>++; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">m</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>m</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch3.S2.SS2.p2" class="ltx_para"> | <div id='Ch3.S2.SS2.p2' class='ltx_para'> |
<p class="ltx_p">Note that despite the term “Single Assignment” in the name of <span class="ltx_text ltx_font_smallcaps">SaC</span>, | <p class='ltx_p'>Note that despite the term “Single Assignment” in the name of <span class='ltx_text ltx_font_smallcaps'>SaC</span>, |
the language actually supports repeated assignment of values to the | the language actually supports repeated assignment of values to the |
same variable as in the above example. | same variable as in the above example. |
This seeming contradiction can be explained as follows: Each assignment | This seeming contradiction can be explained as follows: Each assignment |
opens up a new scope of an identifier bound to some value. | opens up a new scope of an identifier bound to some value. |
Accordingly, the second assignmnent to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> in the above example | Accordingly, the second assignmnent to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> in the above example |
opens up a new scope for a new identifier <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> that only | opens up a new scope for a new identifier <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> that only |
coincidentally carries the same name as the identifier introduced | coincidentally carries the same name as the identifier introduced |
in the code line before. | in the code line before. |
However, because these two variables do carry the same name, the | However, because these two variables do carry the same name, the |
second assignment shadows the scope of the first assignment meaning | second assignment shadows the scope of the first assignment meaning |
that no access to the first <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> is possible any more.</p> | that no access to the first <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> is possible any more.</p> |
</div> | </div> |
<div id="Ch3.S2.SS2.p3" class="ltx_para"> | <div id='Ch3.S2.SS2.p3' class='ltx_para'> |
<p class="ltx_p">Another aspect to notice here is that these operator-assignment | <p class='ltx_p'>Another aspect to notice here is that these operator-assignment |
combinations in <span class="ltx_text ltx_font_smallcaps">SaC</span> can be used on arbitrary types. | combinations in <span class='ltx_text ltx_font_smallcaps'>SaC</span> can be used on arbitrary types. |
Line 17 is an example for this flexibility. | Line 17 is an example for this flexibility. |
The variable <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">v</span> is of type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[5]</span> and thus | The variable <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>v</span> is of type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[5]</span> and thus |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">+=</span> works on vectors. The way this works is that | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>+=</span> works on vectors. The way this works is that |
all these operator assignment cases are considered syntactic sugar | all these operator assignment cases are considered syntactic sugar |
for assignements with function applications on the righ hand side.</p> | for assignements with function applications on the righ hand side.</p> |
</div> | </div> |
<div id="Ch3.S2.SS2.p4" class="ltx_para"> | <div id='Ch3.S2.SS2.p4' class='ltx_para'> |
<p class="ltx_p">This syntactic-sugar trick also enables very <span class="ltx_text ltx_font_smallcaps">C</span>-like notations when | <p class='ltx_p'>This syntactic-sugar trick also enables very <span class='ltx_text ltx_font_smallcaps'>C</span>-like notations when |
denoting applications of the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">modarray</span>. | denoting applications of the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>modarray</span>. |
Line 19 shows an example.</p> | Line 19 shows an example.</p> |
</div> | </div> |
<div id="Thmtheorem24" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem24' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 24. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 24. </h6> |
<div id="Thmtheorem24.p1" class="ltx_para"> | <div id='Thmtheorem24.p1' class='ltx_para'> |
<p class="ltx_p">Starting from the code in Listing <a href="#LST25" title="25 ‣ 3.2.2 Assignments ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">25</span></a>, what happens when you | <p class='ltx_p'>Starting from the code in Listing <a href='#LST25' title='25 ‣ 3.2.2 Assignments ‣ 3.2 Lesson 4: Function Bodies ‣ Chapter 3 Basic Program Structure ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>25</span></a>, what happens when you |
combine the above shortcut notations? | combine the above shortcut notations? |
Try operator assignments such as <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">v</span>[0]++</span> or | Try operator assignments such as <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>v</span>[0]++</span> or |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">m</span>[0][0]<span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>42;</span>.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>m</span>[0][0]<span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>42;</span>.</p> |
</div> | </div> |
<div id="Thmtheorem24.p2" class="ltx_para"> | <div id='Thmtheorem24.p2' class='ltx_para'> |
<p class="ltx_p">Can you define a function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">f</span> that makes the following | <p class='ltx_p'>Can you define a function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>f</span> that makes the following |
operator assignment legal <span class="ltx_text ltx_font_smallcaps">SaC</span> code: <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">v</span>[1],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">m</span>[1]<span class="ltx_text ltx_lst_space"> </span>+=<span class="ltx_text ltx_lst_identifier">f</span>();</span>?</p> | operator assignment legal <span class='ltx_text ltx_font_smallcaps'>SaC</span> code: <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>v</span>[1],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>m</span>[1]<span class='ltx_text ltx_lst_space'> </span>+=<span class='ltx_text ltx_lst_identifier'>f</span>();</span>?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S2.SS3" class="ltx_subsection"> | <section id='Ch3.S2.SS3' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.2.3 </span>Conditionals</h5> | <span class='ltx_tag ltx_tag_subsection'>3.2.3 </span>Conditionals</h5> |
| |
<div id="Ch3.S2.SS3.p1" class="ltx_para"> | <div id='Ch3.S2.SS3.p1' class='ltx_para'> |
<p class="ltx_p">In <span class="ltx_text ltx_font_smallcaps">SaC</span>, we support three forms of conditionals:</p> | <p class='ltx_p'>In <span class='ltx_text ltx_font_smallcaps'>SaC</span>, we support three forms of conditionals:</p> |
<ul id="Ch3.I1" class="ltx_itemize"> | <ul id='Ch3.I1' class='ltx_itemize'> |
<li id="Ch3.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch3.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch3.I1.i1.p1" class="ltx_para"> | <div id='Ch3.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p">branching with consequence only (if-then),</p> | <p class='ltx_p'>branching with consequence only (if-then),</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch3.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch3.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch3.I1.i2.p1" class="ltx_para"> | <div id='Ch3.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p">branching with consequence and alternative (if-then-else) and</p> | <p class='ltx_p'>branching with consequence and alternative (if-then-else) and</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch3.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch3.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch3.I1.i3.p1" class="ltx_para"> | <div id='Ch3.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p">conditional expressions.</p> | <p class='ltx_p'>conditional expressions.</p> |
</div> | </div> |
</li> | </li> |
</ul> | </ul> |
<p class="ltx_p">All three forms use a syntax that is identical to that of <span class="ltx_text ltx_font_smallcaps">C</span>, as the | <p class='ltx_p'>All three forms use a syntax that is identical to that of <span class='ltx_text ltx_font_smallcaps'>C</span>, as the |
following listing illustrates. | following listing illustrates. |
Similarity with <span class="ltx_text ltx_font_smallcaps">C</span> extends to the use of curly brackets to build | Similarity with <span class='ltx_text ltx_font_smallcaps'>C</span> extends to the use of curly brackets to build |
blocks of multiple statements and their potential absence if the | blocks of multiple statements and their potential absence if the |
condition covers a single statement only | condition covers a single statement only |
</p> | </p> |
</div> | </div> |
<figure id="LST26" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST26' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 26: </span>Conditionals in SaC</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 26: </span>Conditionals in SaC</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9%0AIDU7CiAgYiA9IDc7CiAgcHJpbnRmKCJhPSVkLCBiPSVkXG4iLCBhLCBiKTsKCiAgaWYgKGEgPCBi%0AKSBhID0gYjsKICBwcmludGYoImE9JWQsIGI9JWRcbiIsIGEsIGIpOwoKICBpZiAoYSA+PSBiKSB7%0ACiAgICBhID0gYjsKICB9IGVsc2UgewogICAgYiA9IGE7CiAgfQogIHByaW50ZigiYT0lZCwgYj0l%0AZFxuIiwgYSwgYik7CgogIGIgPSBhIDwgYiA/IGEgOiBiOwogIHByaW50ZigiYT0lZCwgYj0lZFxu%0AIiwgYSwgYik7CgogIHJldHVybiBiOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9%0AIDU7CiAgYiA9IDc7CiAgcHJpbnRmKCJhPSVkLCBiPSVkXG4iLCBhLCBiKTsKCiAgaWYgKGEgPCBi%0AKSBhID0gYjsKICBwcmludGYoImE9JWQsIGI9JWRcbiIsIGEsIGIpOwoKICBpZiAoYSA+PSBiKSB7%0ACiAgICBhID0gYjsKICB9IGVsc2UgewogICAgYiA9IGE7CiAgfQogIHByaW50ZigiYT0lZCwgYj0l%0AZFxuIiwgYSwgYik7CgogIGIgPSBhIDwgYiA/IGEgOiBiOwogIHByaW50ZigiYT0lZCwgYj0lZFxu%0AIiwgYSwgYik7CgogIHJldHVybiBiOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ScalarArith</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ScalarArith</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>5; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>5; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>7; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>7; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”a=%d,<span class="ltx_text ltx_lst_space"> </span>b=%d\n”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”a=%d,<span class='ltx_text ltx_lst_space'> </span>b=%d\n”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">if</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>)<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>if</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>)<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”a=%d,<span class="ltx_text ltx_lst_space"> </span>b=%d\n”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”a=%d,<span class='ltx_text ltx_lst_space'> </span>b=%d\n”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">if</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>)<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>if</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>)<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span>}<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">else</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span>}<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>else</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”a=%d,<span class="ltx_text ltx_lst_space"> </span>b=%d\n”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”a=%d,<span class='ltx_text ltx_lst_space'> </span>b=%d\n”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>?<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>?<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”a=%d,<span class="ltx_text ltx_lst_space"> </span>b=%d\n”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”a=%d,<span class='ltx_text ltx_lst_space'> </span>b=%d\n”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch3.S2.SS3.p2" class="ltx_para"> | <div id='Ch3.S2.SS3.p2' class='ltx_para'> |
<p class="ltx_p">As in <span class="ltx_text ltx_font_smallcaps">C</span> all forms of conditionals can be nested in any way, and the | <p class='ltx_p'>As in <span class='ltx_text ltx_font_smallcaps'>C</span> all forms of conditionals can be nested in any way, and the |
dangling else ambiguity is resolved as in <span class="ltx_text ltx_font_smallcaps">C</span> proper.</p> | dangling else ambiguity is resolved as in <span class='ltx_text ltx_font_smallcaps'>C</span> proper.</p> |
</div> | </div> |
<div id="Ch3.S2.SS3.p3" class="ltx_para"> | <div id='Ch3.S2.SS3.p3' class='ltx_para'> |
<p class="ltx_p">A small difference to standard <span class="ltx_text ltx_font_smallcaps">C</span> is that the predicate expression | <p class='ltx_p'>A small difference to standard <span class='ltx_text ltx_font_smallcaps'>C</span> is that the predicate expression |
of any conditional must be of type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">bool</span>. | of any conditional must be of type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>bool</span>. |
There is no implicit treatment of integer values as predicates. | There is no implicit treatment of integer values as predicates. |
Another subtle difference to <span class="ltx_text ltx_font_smallcaps">C</span> stems from the functional nature of | Another subtle difference to <span class='ltx_text ltx_font_smallcaps'>C</span> stems from the functional nature of |
<span class="ltx_text ltx_font_smallcaps">SaC</span>: a variable defined only in one branch of a conditional, will | <span class='ltx_text ltx_font_smallcaps'>SaC</span>: a variable defined only in one branch of a conditional, will |
cause the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler to raise an error because the value may be | cause the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler to raise an error because the value may be |
undefined.</p> | undefined.</p> |
</div> | </div> |
<div id="Ch3.S2.SS3.p4" class="ltx_para"> | <div id='Ch3.S2.SS3.p4' class='ltx_para'> |
<p class="ltx_p">The <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">switch</span>-statement of <span class="ltx_text ltx_font_smallcaps">C</span> is currently not supported by <span class="ltx_text ltx_font_smallcaps">SaC</span>. | <p class='ltx_p'>The <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>switch</span>-statement of <span class='ltx_text ltx_font_smallcaps'>C</span> is currently not supported by <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
This is not so much motivated by conceptual concerns, but rather by | This is not so much motivated by conceptual concerns, but rather by |
pragmatic considerations like the ratio between expressiveness gained | pragmatic considerations like the ratio between expressiveness gained |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S2.SS4" class="ltx_subsection"> | <section id='Ch3.S2.SS4' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.2.4 </span>Loops</h5> | <span class='ltx_tag ltx_tag_subsection'>3.2.4 </span>Loops</h5> |
| |
<div id="Ch3.S2.SS4.p1" class="ltx_para"> | <div id='Ch3.S2.SS4.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> supports all three loop constructs of standard <span class="ltx_text ltx_font_smallcaps">C</span>: <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">while</span>, | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> supports all three loop constructs of standard <span class='ltx_text ltx_font_smallcaps'>C</span>: <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>while</span>, |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">do</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">for</span> with the familiar syntax, as illustrated | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>do</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>for</span> with the familiar syntax, as illustrated |
by the following code fragment. | by the following code fragment. |
</p> | </p> |
</div> | </div> |
<figure id="LST27" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST27' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 27: </span>Loops in SaC</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 27: </span>Loops in SaC</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9%0AIDEwOwoKICB3aGlsZSAoYSA+IDApIHsKICAgIGEgPSBhIC0gMjsKICAgIHByaW50KGEpOwogIH0K%0ACiAgZG8gewogICAgcHJpbnQoYSk7CiAgICBhID0gYSArIDE7CiAgfSB3aGlsZSAoYSA8IDcpOwoK%0AICBmb3IgKGkgPSAxLCBqID0gMjsgaSArIGogPCA0MiA7IGkrKywgaisrKSB7CiAgICBhICo9IDI7%0ACiAgICBwcmludChhKTsKICB9CgogIHJldHVybiBhOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9%0AIDEwOwoKICB3aGlsZSAoYSA+IDApIHsKICAgIGEgPSBhIC0gMjsKICAgIHByaW50KGEpOwogIH0K%0ACiAgZG8gewogICAgcHJpbnQoYSk7CiAgICBhID0gYSArIDE7CiAgfSB3aGlsZSAoYSA8IDcpOwoK%0AICBmb3IgKGkgPSAxLCBqID0gMjsgaSArIGogPCA0MiA7IGkrKywgaisrKSB7CiAgICBhICo9IDI7%0ACiAgICBwcmludChhKTsKICB9CgogIHJldHVybiBhOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ScalarArith</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ScalarArith</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>10; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>10; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">while</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>><span class="ltx_text ltx_lst_space"> </span>0)<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>while</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>><span class='ltx_text ltx_lst_space'> </span>0)<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>-<span class="ltx_text ltx_lst_space"> </span>2; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>-<span class='ltx_text ltx_lst_space'> </span>2; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">do</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>do</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span>1; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span>1; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span>}<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">while</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>7); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span>}<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>while</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>7); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">for</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">i</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>1,<span class="ltx_text ltx_lst_space"> </span>j<span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>2;<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">i</span><span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span>j<span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>42<span class="ltx_text ltx_lst_space"> </span>;<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">i</span>++,<span class="ltx_text ltx_lst_space"> </span>j++)<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>for</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>i</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>1,<span class='ltx_text ltx_lst_space'> </span>j<span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>2;<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>i</span><span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span>j<span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>42<span class='ltx_text ltx_lst_space'> </span>;<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>i</span>++,<span class='ltx_text ltx_lst_space'> </span>j++)<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>*=<span class="ltx_text ltx_lst_space"> </span>2; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>*=<span class='ltx_text ltx_lst_space'> </span>2; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch3.S2.SS4.p2" class="ltx_para"> | <div id='Ch3.S2.SS4.p2' class='ltx_para'> |
<p class="ltx_p">In analogy to conditionals, the loop predicate expression must be | <p class='ltx_p'>In analogy to conditionals, the loop predicate expression must be |
of type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">bool</span>. | of type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>bool</span>. |
Note that <span class="ltx_text ltx_font_smallcaps">SaC</span> does even support the comma operator in <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">for</span>-loops | Note that <span class='ltx_text ltx_font_smallcaps'>SaC</span> does even support the comma operator in <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>for</span>-loops |
(though not in general terms as pointed out before).</p> | (though not in general terms as pointed out before).</p> |
</div> | </div> |
<div id="Ch3.S2.SS4.p3" class="ltx_para"> | <div id='Ch3.S2.SS4.p3' class='ltx_para'> |
<p class="ltx_p">These <span class="ltx_text ltx_font_smallcaps">C</span>-style loop constructs can make code look very imperative. | <p class='ltx_p'>These <span class='ltx_text ltx_font_smallcaps'>C</span>-style loop constructs can make code look very imperative. |
Despite these syntactic similarities, always bear in mind that <span class="ltx_text ltx_font_smallcaps">SaC</span> loops | Despite these syntactic similarities, always bear in mind that <span class='ltx_text ltx_font_smallcaps'>SaC</span> loops |
are (only) syntactic sugar for equivalent tail-end recursive functions. | are (only) syntactic sugar for equivalent tail-end recursive functions. |
While the functional semantics almost completely coincides with the | While the functional semantics almost completely coincides with the |
pragmatic expectations of a <span class="ltx_text ltx_font_smallcaps">C</span> programmer, some subtle issues may | pragmatic expectations of a <span class='ltx_text ltx_font_smallcaps'>C</span> programmer, some subtle issues may |
arise concerning the definedness of variables. | arise concerning the definedness of variables. |
For example, the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler would complain about the above example | For example, the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler would complain about the above example |
saying that the variable <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">b</span> in the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">while</span>-loop may be | saying that the variable <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>b</span> in the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>while</span>-loop may be |
used uninitialised if it is not defined before. | used uninitialised if it is not defined before. |
This is because the compiler assumes that the body of a <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">while</span>-loop | This is because the compiler assumes that the body of a <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>while</span>-loop |
may not be executed at all. | may not be executed at all. |
Of course, you may know better, but the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler at the moment makes | Of course, you may know better, but the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler at the moment makes |
no particular effort to prove this fact when it analyses the definedness | no particular effort to prove this fact when it analyses the definedness |
of variables.</p> | of variables.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S2.SS5" class="ltx_subsection"> | <section id='Ch3.S2.SS5' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.2.5 </span>Explicit Control Flow Manipulation</h5> | <span class='ltx_tag ltx_tag_subsection'>3.2.5 </span>Explicit Control Flow Manipulation</h5> |
| |
<div id="Ch3.S2.SS5.p1" class="ltx_para"> | <div id='Ch3.S2.SS5.p1' class='ltx_para'> |
<p class="ltx_p">The control flow manipulation statements of <span class="ltx_text ltx_font_smallcaps">C</span>, i.e. <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">goto</span>, | <p class='ltx_p'>The control flow manipulation statements of <span class='ltx_text ltx_font_smallcaps'>C</span>, i.e. <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>goto</span>, |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">break</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">continue</span>, as well as labels are not | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>break</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>continue</span>, as well as labels are not |
supported by <span class="ltx_text ltx_font_smallcaps">SaC</span>. | supported by <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
This is due to the fact that <span class="ltx_text ltx_font_smallcaps">SaC</span> is indeed a functional language | This is due to the fact that <span class='ltx_text ltx_font_smallcaps'>SaC</span> is indeed a functional language |
and as such there is actually no control flow, even though the | and as such there is actually no control flow, even though the |
<span class="ltx_text ltx_font_smallcaps">C</span>-like syntax suggests one.</p> | <span class='ltx_text ltx_font_smallcaps'>C</span>-like syntax suggests one.</p> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch3.S3" class="ltx_section"> | <section id='Ch3.S3' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">3.3 </span>Lesson 5: Advanced Topics</h4> | <span class='ltx_tag ltx_tag_section'>3.3 </span>Lesson 5: Advanced Topics</h4> |
| |
<section id="Ch3.S3.SS1" class="ltx_subsection"> | <section id='Ch3.S3.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.3.1 </span>User-defined Types</h5> | <span class='ltx_tag ltx_tag_subsection'>3.3.1 </span>User-defined Types</h5> |
| |
<div id="Ch3.S3.SS1.p1" class="ltx_para"> | <div id='Ch3.S3.SS1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> allows programmers to define their own types using a syntax | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> allows programmers to define their own types using a syntax |
that is identical to <span class="ltx_text ltx_font_smallcaps">C</span>.</p> | that is identical to <span class='ltx_text ltx_font_smallcaps'>C</span>.</p> |
</div> | </div> |
<figure id="LST28" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST28' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 28: </span>User-defined types</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 28: </span>User-defined types</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7Cgp0eXBlZGVmIGludCBteWludDsKdHlwZWRlZiBmbG9hdFsxMDAsMTAw%0AXSByZWFsX21hdHJpeDsKdHlwZWRlZiBkb3VibGVbMl0gY29tcGxleDsKCmludCBtYWluKCkKewog%0AIGNvbXBsZXggICBjOwogIGRvdWJsZVsyXSBkOwoKICBjID0gKGNvbXBsZXgpIFsxLjIsMi4zXTsK%0AICBkID0gKGRvdWJsZVsyXSkgYzsKICBwcmludChkKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7Cgp0eXBlZGVmIGludCBteWludDsKdHlwZWRlZiBmbG9hdFsxMDAsMTAw%0AXSByZWFsX21hdHJpeDsKdHlwZWRlZiBkb3VibGVbMl0gY29tcGxleDsKCmludCBtYWluKCkKewog%0AIGNvbXBsZXggICBjOwogIGRvdWJsZVsyXSBkOwoKICBjID0gKGNvbXBsZXgpIFsxLjIsMi4zXTsK%0AICBkID0gKGRvdWJsZVsyXSkgYzsKICBwcmludChkKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_identifier">typedef</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">myint</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_identifier'>typedef</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>myint</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_identifier">typedef</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">float</span>[100,100]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">real_matrix</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_identifier'>typedef</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>float</span>[100,100]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>real_matrix</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_identifier">typedef</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span>[2]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">complex</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_identifier'>typedef</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span>[2]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>complex</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">complex</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>complex</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span>[2]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">d</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span>[2]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>d</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">complex</span>)<span class="ltx_text ltx_lst_space"> </span>[1.2,2.3]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>complex</span>)<span class='ltx_text ltx_lst_space'> </span>[1.2,2.3]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span>[2])<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span>[2])<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch3.S3.SS1.p2" class="ltx_para"> | <div id='Ch3.S3.SS1.p2' class='ltx_para'> |
<p class="ltx_p">Following the keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">typedef</span> we have the defining type | <p class='ltx_p'>Following the keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>typedef</span> we have the defining type |
followed by the defined type name. | followed by the defined type name. |
Note that in contrast to <span class="ltx_text ltx_font_smallcaps">C</span>, defining type and defined type are | Note that in contrast to <span class='ltx_text ltx_font_smallcaps'>C</span>, defining type and defined type are |
not considered synonyms. | not considered synonyms. |
Types like <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span>[2]</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">complex</span> are distinguished | Types like <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span>[2]</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>complex</span> are distinguished |
properly and a function that expects a value of type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span>[2]</span> | properly and a function that expects a value of type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span>[2]</span> |
as an argument will not accept a value of type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">complex</span> instead.</p> | as an argument will not accept a value of type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>complex</span> instead.</p> |
</div> | </div> |
<div id="Ch3.S3.SS1.p3" class="ltx_para"> | <div id='Ch3.S3.SS1.p3' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> requires explicit type casts to change the type of a value from the | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> requires explicit type casts to change the type of a value from the |
defining type to the defined type or vice versa as in the following | defining type to the defined type or vice versa as in the following |
example.</p> | example.</p> |
</div> | </div> |
<div id="Ch3.S3.SS1.p4" class="ltx_para"> | <div id='Ch3.S3.SS1.p4' class='ltx_para'> |
<p class="ltx_p">Note that for the time being any defining type in a type definition | <p class='ltx_p'>Note that for the time being any defining type in a type definition |
must exactly specify some shape; the various less specific types are | must exactly specify some shape; the various less specific types are |
not supported. | not supported. |
shape, e.g. a matrix whose rows have different length. | shape, e.g. a matrix whose rows have different length. |
There is no doubt that this would be an extremely powerful extension | There is no doubt that this would be an extremely powerful extension |
to the homogeneously shaped arrays that <span class="ltx_text ltx_font_smallcaps">SaC</span> supports today, but it | to the homogeneously shaped arrays that <span class='ltx_text ltx_font_smallcaps'>SaC</span> supports today, but it |
would likewise require a non-trivial extension of the code generator | would likewise require a non-trivial extension of the code generator |
and runtime system that we leave for future research.</p> | and runtime system that we leave for future research.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch3.S3.SS2" class="ltx_subsection"> | <section id='Ch3.S3.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">3.3.2 </span>Type Conversions</h5> | <span class='ltx_tag ltx_tag_subsection'>3.3.2 </span>Type Conversions</h5> |
| |
<div id="Ch3.S3.SS2.p1" class="ltx_para"> | <div id='Ch3.S3.SS2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> uses <span class="ltx_text ltx_font_smallcaps">C</span>-like cast expressions to change the type of an | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> uses <span class='ltx_text ltx_font_smallcaps'>C</span>-like cast expressions to change the type of an |
expression whenever the data representation remains unaffected, | expression whenever the data representation remains unaffected, |
i.e. between user-defined types and their defining types or | i.e. between user-defined types and their defining types or |
vice versa. | vice versa. |
In contrast to <span class="ltx_text ltx_font_smallcaps">C</span>, <span class="ltx_text ltx_font_smallcaps">SaC</span> does not use cast expressions to actually | In contrast to <span class='ltx_text ltx_font_smallcaps'>C</span>, <span class='ltx_text ltx_font_smallcaps'>SaC</span> does not use cast expressions to actually |
change data representations, e.g. when converting from an integer | change data representations, e.g. when converting from an integer |
type to a floating point type, between floating point types of | type to a floating point type, between floating point types of |
different precision or between integer types of different bit | different precision or between integer types of different bit |
width. | width. |
For all these purposes <span class="ltx_text ltx_font_smallcaps">SaC</span> uses dedicated conversion functions | For all these purposes <span class='ltx_text ltx_font_smallcaps'>SaC</span> uses dedicated conversion functions |
to express the fact that such conversions actually require an | to express the fact that such conversions actually require an |
operation performed at runtime rather than just changing the | operation performed at runtime rather than just changing the |
type interpretation of a value.</p> | type interpretation of a value.</p> |
</div> | </div> |
<div id="Ch3.S3.SS2.p2" class="ltx_para"> | <div id='Ch3.S3.SS2.p2' class='ltx_para'> |
<p class="ltx_p">These conversion functions are named <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">tobool</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">tochar</span> | <p class='ltx_p'>These conversion functions are named <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>tobool</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>tochar</span> |
for converting into non-numerical values. | for converting into non-numerical values. |
For all numerical types these functions are named “to” plus an | For all numerical types these functions are named “to” plus an |
optional “u” for unsigned integer types followed by the | optional “u” for unsigned integer types followed by the |
first letter of the type name (“ll” in the case of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">long</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">long</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span></span>). | first letter of the type name (“ll” in the case of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>long</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>long</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span></span>). |
The following example illustrates type conversions in <span class="ltx_text ltx_font_smallcaps">SaC</span>.</p> | The following example illustrates type conversions in <span class='ltx_text ltx_font_smallcaps'>SaC</span>.</p> |
</div> | </div> |
<figure id="LST29" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST29' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 29: </span>Type conversions</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 29: </span>Type conversions</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgZG91%0AYmxlIHg7CiAgZmxvYXQgeTsKICBpbnQgejsKCiAgeCA9IDIuMzsKICBwcmludCh4KTsKCiAgeSA9%0AIHRvZih4KTsKICBwcmludCh5KTsKCiAgeiA9IHRvaSh5KTsKICBwcmludCh6KTsKCiAgcmV0dXJu%0AIHo7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFNjYWxhckFyaXRoOiBhbGw7CnVzZSBTdGRJTzogYWxsOwoKaW50IG1haW4oKQp7CiAgZG91%0AYmxlIHg7CiAgZmxvYXQgeTsKICBpbnQgejsKCiAgeCA9IDIuMzsKICBwcmludCh4KTsKCiAgeSA9%0AIHRvZih4KTsKICBwcmludCh5KTsKCiAgeiA9IHRvaSh5KTsKICBwcmludCh6KTsKCiAgcmV0dXJu%0AIHo7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ScalarArith</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ScalarArith</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">float</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>float</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">z</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>z</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>2.3; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>2.3; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">x</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>x</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">tof</span>(<span class="ltx_text ltx_lst_identifier">x</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>tof</span>(<span class='ltx_text ltx_lst_identifier'>x</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">y</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>y</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">z</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">toi</span>(<span class="ltx_text ltx_lst_identifier">y</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>z</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>toi</span>(<span class='ltx_text ltx_lst_identifier'>y</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">z</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>z</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">z</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>z</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span>} |
</div> | </div> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch4" class="ltx_chapter"> | <section id='Ch4' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 4 </span>With-Loops</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 4 </span>With-Loops</h3> |
| |
<div id="Ch4.p1" class="ltx_para"> | <div id='Ch4.p1' class='ltx_para'> |
<p class="ltx_p">This trail aims at providing a hands-on introduction to the | <p class='ltx_p'>This trail aims at providing a hands-on introduction to the |
key language construct of <span class="ltx_text ltx_font_smallcaps">SaC</span>: the with-loop. | key language construct of <span class='ltx_text ltx_font_smallcaps'>SaC</span>: the with-loop. |
It constitutes the generalisation of the | It constitutes the generalisation of the |
set-expression as introduced in the lesson <a href="#Ch2.S2" title="2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.2</span></a> on | set-expression as introduced in the lesson <a href='#Ch2.S2' title='2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.2</span></a> on |
<span class="ltx_text ltx_font_bold">Shape-Invariant Programming</span> | <span class='ltx_text ltx_font_bold'>Shape-Invariant Programming</span> |
and can be seen as a shape-invariant form of the map-reduce template or | and can be seen as a shape-invariant form of the map-reduce template or |
the array comprehensions found in other functional languages. | the array comprehensions found in other functional languages. |
into high-performance, concurrently executable code.</p> | into high-performance, concurrently executable code.</p> |
</div> | </div> |
<div id="Ch4.p2" class="ltx_para"> | <div id='Ch4.p2' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_bold">A note for language design freaks:</span></span> | <span class='ltx_p'><span class='ltx_text ltx_font_bold'>A note for language design freaks:</span></span> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">In fact, almost all array operations introduced in earlier | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>In fact, almost all array operations introduced in earlier |
trails are defined by with-loops within the standard library. | trails are defined by with-loops within the standard library. |
This design combines two major advantages:</span></span> | This design combines two major advantages:</span></span> |
<span id="Ch4.I1" class="ltx_itemize"> | <span id='Ch4.I1' class='ltx_itemize'> |
<span id="Ch4.I1.i1" class="ltx_item" style="list-style-type:none;"><span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_italic">•</span></span> | <span id='Ch4.I1.i1' class='ltx_item' style='list-style-type:none;'><span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_italic'>•</span></span> |
<span id="Ch4.I1.i1.p1" class="ltx_para"> | <span id='Ch4.I1.i1.p1' class='ltx_para'> |
<span class="ltx_p"><em class="ltx_emph ltx_font_italic">better performance</em><span class="ltx_text ltx_font_italic">, as the conformity enables optimisations to be more generally applicable, and</span></span> | <span class='ltx_p'><em class='ltx_emph ltx_font_italic'>better performance</em><span class='ltx_text ltx_font_italic'>, as the conformity enables optimisations to be more generally applicable, and</span></span> |
</span></span> | </span></span> |
<span id="Ch4.I1.i2" class="ltx_item" style="list-style-type:none;"><span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_italic">•</span></span> | <span id='Ch4.I1.i2' class='ltx_item' style='list-style-type:none;'><span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_italic'>•</span></span> |
<span id="Ch4.I1.i2.p1" class="ltx_para"> | <span id='Ch4.I1.i2.p1' class='ltx_para'> |
<span class="ltx_p"><em class="ltx_emph ltx_font_italic">increased flexibility</em><span class="ltx_text ltx_font_italic">, as the user can modify the definition | <span class='ltx_p'><em class='ltx_emph ltx_font_italic'>increased flexibility</em><span class='ltx_text ltx_font_italic'>, as the user can modify the definition |
of all standard operations.</span></span> | of all standard operations.</span></span> |
</span></span> | </span></span> |
</p> | </p> |
</div> | </div> |
<div id="Ch4.p3" class="ltx_para"> | <div id='Ch4.p3' class='ltx_para'> |
<p class="ltx_p">The introduction of with-loops comes in a single lesson which step-wise | <p class='ltx_p'>The introduction of with-loops comes in a single lesson which step-wise |
introduces all features and variants of with-loops in <span class="ltx_text ltx_font_smallcaps">SaC</span>.</p> | introduces all features and variants of with-loops in <span class='ltx_text ltx_font_smallcaps'>SaC</span>.</p> |
</div> | </div> |
<section id="Ch4.S1" class="ltx_section"> | <section id='Ch4.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">4.1 </span>Lesson 6: with-loop Basics</h4> | <span class='ltx_tag ltx_tag_section'>4.1 </span>Lesson 6: with-loop Basics</h4> |
| |
<section id="Ch4.S1.SS1" class="ltx_subsection"> | <section id='Ch4.S1.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">4.1.1 </span>Basic Components</h5> | <span class='ltx_tag ltx_tag_subsection'>4.1.1 </span>Basic Components</h5> |
| |
<div id="Ch4.S1.SS1.p1" class="ltx_para"> | <div id='Ch4.S1.SS1.p1' class='ltx_para'> |
<p class="ltx_p">Generally, with-loops are composed of three different components:</p> | <p class='ltx_p'>Generally, with-loops are composed of three different components:</p> |
</div> | </div> |
<div id="Ch4.S1.SS1.p2" class="ltx_para"> | <div id='Ch4.S1.SS1.p2' class='ltx_para'> |
<ul id="Ch4.I2" class="ltx_itemize"> | <ul id='Ch4.I2' class='ltx_itemize'> |
<li id="Ch4.I2.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I2.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I2.i1.p1" class="ltx_para"> | <div id='Ch4.I2.i1.p1' class='ltx_para'> |
<p class="ltx_p">sets of index vectors (referred to as <em class="ltx_emph">generator-ranges</em>),</p> | <p class='ltx_p'>sets of index vectors (referred to as <em class='ltx_emph'>generator-ranges</em>),</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I2.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I2.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I2.i2.p1" class="ltx_para"> | <div id='Ch4.I2.i2.p1' class='ltx_para'> |
<p class="ltx_p">functions that map index vectors to arbitrary values | <p class='ltx_p'>functions that map index vectors to arbitrary values |
(<em class="ltx_emph">generator-expressions</em>), and</p> | (<em class='ltx_emph'>generator-expressions</em>), and</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I2.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I2.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I2.i3.p1" class="ltx_para"> | <div id='Ch4.I2.i3.p1' class='ltx_para'> |
<p class="ltx_p">combining operations (<em class="ltx_emph">with-loop operators</em>) that take such | <p class='ltx_p'>combining operations (<em class='ltx_emph'>with-loop operators</em>) that take such |
values and construct arrays from them.</p> | values and construct arrays from them.</p> |
</div> | </div> |
</ul> | </ul> |
</div> | </div> |
<div id="Ch4.S1.SS1.p3" class="ltx_para"> | <div id='Ch4.S1.SS1.p3' class='ltx_para'> |
<p class="ltx_p">In its simplest form, a with-loop contains one component of each kind. | <p class='ltx_p'>In its simplest form, a with-loop contains one component of each kind. |
It then maps the function defined by the generator-expression to all | It then maps the function defined by the generator-expression to all |
index vectors from the generator-range in a data-parallel | index vectors from the generator-range in a data-parallel |
Let’s have a look at a simple example:</p> | Let’s have a look at a simple example:</p> |
</div> | </div> |
<figure id="LST30" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST30' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 30: </span>Simple with-loop</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 30: </span>Simple with-loop</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgIChbMF0gPD0gaXYgPCBbNV0pOiA0MjsKICAgICAgfTogZ2VuYXJyYXkoWzddLCAw%0AKTsKCiAgcHJpbnQoYSk7CiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgIChbMF0gPD0gaXYgPCBbNV0pOiA0MjsKICAgICAgfTogZ2VuYXJyYXkoWzddLCAw%0AKTsKCiAgcHJpbnQoYSk7CiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span>([0]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[5]):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span>([0]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[5]):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([7],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([7],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch4.S1.SS1.p4" class="ltx_para"> | <div id='Ch4.S1.SS1.p4' class='ltx_para'> |
<p class="ltx_p">Here, the with-loop in lines 6–8 computes | <p class='ltx_p'>Here, the with-loop in lines 6–8 computes |
the vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[42,<span class="ltx_text ltx_lst_space"> </span>42,<span class="ltx_text ltx_lst_space"> </span>42,<span class="ltx_text ltx_lst_space"> </span>42,<span class="ltx_text ltx_lst_space"> </span>42,<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span>0]</span>. | the vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[42,<span class='ltx_text ltx_lst_space'> </span>42,<span class='ltx_text ltx_lst_space'> </span>42,<span class='ltx_text ltx_lst_space'> </span>42,<span class='ltx_text ltx_lst_space'> </span>42,<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span>0]</span>. |
The generator-range is specified by the code snippet in round | The generator-range is specified by the code snippet in round |
brackets in line 7: <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([0]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[5])</span>. | brackets in line 7: <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([0]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[5])</span>. |
It denotes the set of vectors | It denotes the set of vectors |
<math id="Ch4.S1.SS1.p4.m1" class="ltx_Math" alttext="{{\{\textrm{\lstinline 1}}}\}" display="inline"><mrow><mo stretchy="false">{</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>[0],</mtext><mtext> </mtext><mtext>[1],</mtext><mtext> </mtext><mtext>…,</mtext><mtext> </mtext><mtext>[4]</mtext></mrow><mo stretchy="false">}</mo></mrow></math>. | <math id='Ch4.S1.SS1.p4.m1' class='ltx_Math' alttext='{{\{\textrm{\lstinline 1}}}\}' display='inline'><mrow><mo stretchy='false'>{</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>[0],</mtext><mtext> </mtext><mtext>[1],</mtext><mtext> </mtext><mtext>…,</mtext><mtext> </mtext><mtext>[4]</mtext></mrow><mo stretchy='false'>}</mo></mrow></math>. |
The generator-expression here is the constant <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">42</span>. | The generator-expression here is the constant <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>42</span>. |
Hence, the mapping function <math id="Ch4.S1.SS1.p4.m2" class="ltx_Math" alttext="f_{\text{map}}" display="inline"><msub><mi>f</mi><mtext>map</mtext></msub></math> maps any index vector <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span> | Hence, the mapping function <math id='Ch4.S1.SS1.p4.m2' class='ltx_Math' alttext='f_{\text{map}}' display='inline'><msub><mi>f</mi><mtext>map</mtext></msub></math> maps any index vector <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span> |
into <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">42</span>, i.e. we have <math id="Ch4.S1.SS1.p4.m3" class="ltx_Math" alttext="{{f_{\text{map}}\textrm{\lstinline 1}}}" display="inline"><mrow><msub><mi>f</mi><mtext>map</mtext></msub><mo></mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>(</mtext><mtext>iv</mtext><mtext>)</mtext><mtext> </mtext><mtext>=</mtext><mtext> </mtext><mtext>42</mtext></mrow></mrow></math>. | into <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>42</span>, i.e. we have <math id='Ch4.S1.SS1.p4.m3' class='ltx_Math' alttext='{{f_{\text{map}}\textrm{\lstinline 1}}}' display='inline'><mrow><msub><mi>f</mi><mtext>map</mtext></msub><mo></mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>(</mtext><mtext>iv</mtext><mtext>)</mtext><mtext> </mtext><mtext>=</mtext><mtext> </mtext><mtext>42</mtext></mrow></mrow></math>. |
Finally, the with-loop operation is specified as | Finally, the with-loop operation is specified as |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">genarray</span>([7],<span class="ltx_text ltx_lst_space"> </span>0)</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>genarray</span>([7],<span class='ltx_text ltx_lst_space'> </span>0)</span>. |
This operation computes an array of shape <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[7]</span> where: | This operation computes an array of shape <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[7]</span> where: |
</p> | </p> |
</div> | </div> |
<div id="Ch4.S1.SS1.p5" class="ltx_para"> | <div id='Ch4.S1.SS1.p5' class='ltx_para'> |
<table id="Ch4.Ex1" class="ltx_equation ltx_eqn_table"> | <table id='Ch4.Ex1' class='ltx_equation ltx_eqn_table'> |
| |
<tr class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_eqn_cell ltx_align_center"><math id="Ch4.Ex1.m1" class="ltx_Math" alttext="{{{{{{{{\textrm{\lstinline 1}}}=\begin{cases}f_{\text{map}}\textrm{\lstinline 1}}}&% | <td class='ltx_eqn_cell ltx_align_center'><math id='Ch4.Ex1.m1' class='ltx_Math' alttext='{{{{{{{{\textrm{\lstinline 1}}}=\begin{cases}f_{\text{map}}\textrm{\lstinline 1}}}&% |
\textrm{\lstinline 1}}}\in\{\textrm{\lstinline 1}}}\}\\ | \textrm{\lstinline 1}}}\in\{\textrm{\lstinline 1}}}\}\\ |
0&\text{otherwise.}\end{cases}" display="block"><mrow><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>a</mtext><mtext>[</mtext><mtext>iv</mtext><mtext>]</mtext></mrow><mo>=</mo><mrow><mo>{</mo><mtable columnspacing="5pt" displaystyle="true" rowspacing="0pt"><mtr><mtd columnalign="left"><mrow><msub><mi>f</mi><mtext>map</mtext></msub><mo></mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>(</mtext><mtext>iv</mtext><mtext>)</mtext></mrow></mrow></mtd><mtd columnalign="left"><mrow><mtext class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</mtext><mo>∈</mo><mrow><mo stretchy="false">{</mo><mrow class="ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><mtext>[0],</mtext><mtext> </mtext><mtext>[1],</mtext><mtext> </mtext><mtext>…,</mtext><mtext> </mtext><mtext>[4]</mtext></mrow><mo stretchy="false">}</mo></mrow></mrow></mtd></mtr><mtr><mtd columnalign="left"><mn>0</mn></mtd><mtd columnalign="left"><mtext>otherwise.</mtext></mtd></mtr></mtable></mrow></mrow></math></td> | 0&\text{otherwise.}\end{cases}' display='block'><mrow><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>a</mtext><mtext>[</mtext><mtext>iv</mtext><mtext>]</mtext></mrow><mo>=</mo><mrow><mo>{</mo><mtable columnspacing='5pt' displaystyle='true' rowspacing='0pt'><mtr><mtd columnalign='left'><mrow><msub><mi>f</mi><mtext>map</mtext></msub><mo></mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>(</mtext><mtext>iv</mtext><mtext>)</mtext></mrow></mrow></mtd><mtd columnalign='left'><mrow><mtext class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</mtext><mo>∈</mo><mrow><mo stretchy='false'>{</mo><mrow class='ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><mtext>[0],</mtext><mtext> </mtext><mtext>[1],</mtext><mtext> </mtext><mtext>…,</mtext><mtext> </mtext><mtext>[4]</mtext></mrow><mo stretchy='false'>}</mo></mrow></mrow></mtd></mtr><mtr><mtd columnalign='left'><mn>0</mn></mtd><mtd columnalign='left'><mtext>otherwise.</mtext></mtd></mtr></mtable></mrow></mrow></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
</table> | </table> |
</div> | </div> |
<div id="Ch4.S1.SS1.p6" class="ltx_para"> | <div id='Ch4.S1.SS1.p6' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_bold">Generator-ranges</span> and <span class="ltx_text ltx_font_bold">generator-expressions</span> always occur | <p class='ltx_p'><span class='ltx_text ltx_font_bold'>Generator-ranges</span> and <span class='ltx_text ltx_font_bold'>generator-expressions</span> always occur |
in pairs. Jointly they | in pairs. Jointly they |
form a syntactical unit, which we refer-to as <span class="ltx_text ltx_font_bold">generator</span>. | form a syntactical unit, which we refer-to as <span class='ltx_text ltx_font_bold'>generator</span>. |
As we will see later, with-loops can contain arbitrary numbers of | As we will see later, with-loops can contain arbitrary numbers of |
generators. They are enclosed in curly brackets.</p> | generators. They are enclosed in curly brackets.</p> |
</div> | </div> |
<div id="Thmtheorem25" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem25' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 25. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 25. </h6> |
<div id="Thmtheorem25.p1" class="ltx_para"> | <div id='Thmtheorem25.p1' class='ltx_para'> |
<p class="ltx_p">What result do you expect if we eliminate the generator from the above example?</p> | <p class='ltx_p'>What result do you expect if we eliminate the generator from the above example?</p> |
</div> | </div> |
<div id="Thmtheorem25.p2" class="ltx_para"> | <div id='Thmtheorem25.p2' class='ltx_para'> |
<p class="ltx_p">What results do you expect if we modify the generator-range | <p class='ltx_p'>What results do you expect if we modify the generator-range |
in the above example into:</p> | in the above example into:</p> |
<ul id="Ch4.I3" class="ltx_itemize"> | <ul id='Ch4.I3' class='ltx_itemize'> |
<li id="Ch4.I3.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I3.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I3.i1.p1" class="ltx_para"> | <div id='Ch4.I3.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([-2]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[3])</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([-2]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[3])</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I3.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I3.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I3.i2.p1" class="ltx_para"> | <div id='Ch4.I3.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([0]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[8])</span>? | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([0]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[8])</span>? |
</p> | </p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I3.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I3.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I3.i3.p1" class="ltx_para"> | <div id='Ch4.I3.i3.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([6]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[5])</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([6]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[5])</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I3.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I3.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I3.i4.p1" class="ltx_para"> | <div id='Ch4.I3.i4.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([8]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[5])</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([8]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[5])</span>?</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I3.i5" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I3.i5' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I3.i5.p1" class="ltx_para"> | <div id='Ch4.I3.i5.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">([6]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[0])</span>?</p> | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>([6]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[0])</span>?</p> |
</div> | </div> |
</li> | </li> |
</ul> | </ul> |
<p class="ltx_p">[<span class="ltx_text ltx_font_bold">Hint:</span> You should compile these examples with the option <span class="ltx_text ltx_font_typewriter">-check c</span> | <p class='ltx_p'>[<span class='ltx_text ltx_font_bold'>Hint:</span> You should compile these examples with the option <span class='ltx_text ltx_font_typewriter'>-check c</span> |
being enabled]</p> | being enabled]</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch4.S1.SS2" class="ltx_subsection"> | <section id='Ch4.S1.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">4.1.2 </span>Generator Ranges</h5> | <span class='ltx_tag ltx_tag_subsection'>4.1.2 </span>Generator Ranges</h5> |
| |
<div id="Ch4.S1.SS2.p1" class="ltx_para"> | <div id='Ch4.S1.SS2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> offers quite some flexibility when it comes to specifying | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> offers quite some flexibility when it comes to specifying |
generator ranges. | generator ranges. |
First of all, the use of index vectors in the bounds enables | First of all, the use of index vectors in the bounds enables |
the convenient specification of <math id="Ch4.S1.SS2.p1.m1" class="ltx_Math" alttext="n" display="inline"><mi>n</mi></math>-dimensional index ranges. | the convenient specification of <math id='Ch4.S1.SS2.p1.m1' class='ltx_Math' alttext='n' display='inline'><mi>n</mi></math>-dimensional index ranges. |
Let us look at a few examples for the 2-dimensional case:</p> | Let us look at a few examples for the 2-dimensional case:</p> |
</div> | </div> |
<figure id="LST31" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST31' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 31: </span>Generator Range Specifications</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 31: </span>Generator Range Specifications</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgIChbMCwyXSA8PSBbaSxqXSA8IFs1LDZdKTogNDI7CiAgICAgIH06IGdlbmFycmF5%0AKFs1LDZdLCAwKTsKICBwcmludChhKTsKCiAgc2hwID0gWzUsNl07CiAgYSA9IHdpdGggewogICAg%0AICAgICgwKnNocCA8PSBpdiA8IHNocCk6IDQyOwogICAgICB9OiBnZW5hcnJheShzaHAsIDApOwog%0AIHByaW50KGEpOwoKICBhID0gd2l0aCB7CiAgICAgICAgKC4gPCBpdiA8IC4pOiA0MjsKICAgICAg%0AfTogZ2VuYXJyYXkoWzUsNl0sIDApOwogIHByaW50KGEpOwoKICBhID0gd2l0aCB7CiAgICAgICAg%0AKC4gPD0ganY9W3gseV0gPD0gWzQsNV0pOiA0MjsKICAgICAgfTogZ2VuYXJyYXkoIFs1LDZdLCAw%0AKTsKICBwcmludChhKTsKCiAgYSA9IHdpdGggewogICAgICAgICguIDw9IFtpLGpdIDw9IC4gc3Rl%0AcCBbMSw0XSk6IDQyOwogICAgICB9OiBnZW5hcnJheShbNSw2XSwgMCk7CiAgcHJpbnQoYSk7Cgog%0AIGEgPSB3aXRoIHsKICAgICAgICAoLiA8PSBbaSxqXSA8PSAuIHN0ZXAgWzIsNF0gd2lkdGggWzEs%0AMl0pOiA0MjsKICAgICAgfTogZ2VuYXJyYXkoWzUsNl0sIDApOwogIHByaW50KGEpOwoKICByZXR1%0Acm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgIChbMCwyXSA8PSBbaSxqXSA8IFs1LDZdKTogNDI7CiAgICAgIH06IGdlbmFycmF5%0AKFs1LDZdLCAwKTsKICBwcmludChhKTsKCiAgc2hwID0gWzUsNl07CiAgYSA9IHdpdGggewogICAg%0AICAgICgwKnNocCA8PSBpdiA8IHNocCk6IDQyOwogICAgICB9OiBnZW5hcnJheShzaHAsIDApOwog%0AIHByaW50KGEpOwoKICBhID0gd2l0aCB7CiAgICAgICAgKC4gPCBpdiA8IC4pOiA0MjsKICAgICAg%0AfTogZ2VuYXJyYXkoWzUsNl0sIDApOwogIHByaW50KGEpOwoKICBhID0gd2l0aCB7CiAgICAgICAg%0AKC4gPD0ganY9W3gseV0gPD0gWzQsNV0pOiA0MjsKICAgICAgfTogZ2VuYXJyYXkoIFs1LDZdLCAw%0AKTsKICBwcmludChhKTsKCiAgYSA9IHdpdGggewogICAgICAgICguIDw9IFtpLGpdIDw9IC4gc3Rl%0AcCBbMSw0XSk6IDQyOwogICAgICB9OiBnZW5hcnJheShbNSw2XSwgMCk7CiAgcHJpbnQoYSk7Cgog%0AIGEgPSB3aXRoIHsKICAgICAgICAoLiA8PSBbaSxqXSA8PSAuIHN0ZXAgWzIsNF0gd2lkdGggWzEs%0AMl0pOiA0MjsKICAgICAgfTogZ2VuYXJyYXkoWzUsNl0sIDApOwogIHByaW50KGEpOwoKICByZXR1%0Acm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span>([0,2]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[5,6]):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span>([0,2]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[5,6]):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([5,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([5,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">shp</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[5,6]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>shp</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[5,6]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span>(0*<span class="ltx_text ltx_lst_identifier">shp</span><span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">shp</span>):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span>(0*<span class='ltx_text ltx_lst_identifier'>shp</span><span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>shp</span>):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>(<span class="ltx_text ltx_lst_identifier">shp</span>,<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>(<span class='ltx_text ltx_lst_identifier'>shp</span>,<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>.):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>.):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([5,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([5,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>j<span class="ltx_text ltx_lst_identifier">v</span>=[<span class="ltx_text ltx_lst_identifier">x</span>,<span class="ltx_text ltx_lst_identifier">y</span>]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[4,5]):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>j<span class='ltx_text ltx_lst_identifier'>v</span>=[<span class='ltx_text ltx_lst_identifier'>x</span>,<span class='ltx_text ltx_lst_identifier'>y</span>]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[4,5]):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>(<span class="ltx_text ltx_lst_space"> </span>[5,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>(<span class='ltx_text ltx_lst_space'> </span>[5,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">step</span><span class="ltx_text ltx_lst_space"> </span>[1,4]):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>step</span><span class='ltx_text ltx_lst_space'> </span>[1,4]):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([5,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([5,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">30</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>30</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">31</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>31</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">32</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>32</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">33</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">step</span><span class="ltx_text ltx_lst_space"> </span>[2,4]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">width</span><span class="ltx_text ltx_lst_space"> </span>[1,2]):<span class="ltx_text ltx_lst_space"> </span>42; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>33</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>step</span><span class='ltx_text ltx_lst_space'> </span>[2,4]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>width</span><span class='ltx_text ltx_lst_space'> </span>[1,2]):<span class='ltx_text ltx_lst_space'> </span>42; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">34</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([5,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>34</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([5,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">35</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>35</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">36</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>36</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">37</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>37</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">38</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>38</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch4.S1.SS2.p2" class="ltx_para"> | <div id='Ch4.S1.SS2.p2' class='ltx_para'> |
<p class="ltx_p">As we can see from the first with-loop in | <p class='ltx_p'>As we can see from the first with-loop in |
lines 6–8, a vector | lines 6–8, a vector |
of scalar indices can be used where we previously used the | of scalar indices can be used where we previously used the |
variable <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">iv</span> to denote the entire index vector. | variable <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>iv</span> to denote the entire index vector. |
In cases where the dimensionality of the with-loop is statically | In cases where the dimensionality of the with-loop is statically |
fixed, this sometimes comes in handy. | fixed, this sometimes comes in handy. |
as well as for the bounds.</p> | as well as for the bounds.</p> |
</div> | </div> |
<div id="Ch4.S1.SS2.p3" class="ltx_para"> | <div id='Ch4.S1.SS2.p3' class='ltx_para'> |
<p class="ltx_p ltx_align_center"> | <p class='ltx_p ltx_align_center'> |
| |
<span class="ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle" style="width:390.3pt;"> | <span class='ltx_inline-block ltx_minipage ltx_align_middle ltx_framed_rectangle' style='width:390.3pt;'> |
<span class="ltx_p"><span class="ltx_text ltx_font_italic">Note here, that the ability to use vectors rather than | <span class='ltx_p'><span class='ltx_text ltx_font_italic'>Note here, that the ability to use vectors rather than |
componentised indices and bounds is absolutely crucial here! | componentised indices and bounds is absolutely crucial here! |
It constitutes </span><span class="ltx_text ltx_font_bold">the</span><span class="ltx_text ltx_font_italic"> enabling | It constitutes </span><span class='ltx_text ltx_font_bold'>the</span><span class='ltx_text ltx_font_italic'> enabling |
factor for specifying with-loops in a shape-invariant style as | factor for specifying with-loops in a shape-invariant style as |
the length of those vectors may remain unknown until runtime. | the length of those vectors may remain unknown until runtime. |
</p> | </p> |
</div> | </div> |
<div id="Ch4.S1.SS2.p4" class="ltx_para"> | <div id='Ch4.S1.SS2.p4' class='ltx_para'> |
<p class="ltx_p">The with-loop in lines 12–14 | <p class='ltx_p'>The with-loop in lines 12–14 |
demonstrates a typical case where | demonstrates a typical case where |
the dimensionality of the resulting array is solely determined | the dimensionality of the resulting array is solely determined |
by a vector (here <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">shp</span>). | by a vector (here <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>shp</span>). |
A slightly more elegant way for the most frequent case is the use | A slightly more elegant way for the most frequent case is the use |
of a syntactical shortcut supported by <span class="ltx_text ltx_font_smallcaps">SaC</span>. The symbol “<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">.</span>” can | of a syntactical shortcut supported by <span class='ltx_text ltx_font_smallcaps'>SaC</span>. The symbol “<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>.</span>” can |
be used in the position for the lower and upper bound, denoting the | be used in the position for the lower and upper bound, denoting the |
lowest legal index and the highest legal index into the array to be | lowest legal index and the highest legal index into the array to be |
This is examplified in the with-loop in | This is examplified in the with-loop in |
lines 17–19. Note here, | lines 17–19. Note here, |
that this generator-range does <em class="ltx_emph">not</em> cover the entire legal | that this generator-range does <em class='ltx_emph'>not</em> cover the entire legal |
index space of the resulting array! | index space of the resulting array! |
As the “<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">.</span>” always represents legal indices, we have to make sure | As the “<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>.</span>” always represents legal indices, we have to make sure |
that we use <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><=</span> on both sides if we want to cover the entire | that we use <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><=</span> on both sides if we want to cover the entire |
range. The example presented here, excludes the extreme cases and, thus, | range. The example presented here, excludes the extreme cases and, thus, |
covers all inner elements of the resulting array only.</p> | covers all inner elements of the resulting array only.</p> |
</div> | </div> |
<div id="Thmtheorem26" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem26' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 26. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 26. </h6> |
<div id="Thmtheorem26.p1" class="ltx_para"> | <div id='Thmtheorem26.p1' class='ltx_para'> |
<p class="ltx_p">What happens if the length of the vectors within the generator-range | <p class='ltx_p'>What happens if the length of the vectors within the generator-range |
or the shape expression in the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">genarray</span>-operation do not match? | or the shape expression in the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>genarray</span>-operation do not match? |
[<span class="ltx_text ltx_font_bold">Hint:</span> You should compile these example with the option <span class="ltx_text ltx_font_typewriter">-check c</span> | [<span class='ltx_text ltx_font_bold'>Hint:</span> You should compile these example with the option <span class='ltx_text ltx_font_typewriter'>-check c</span> |
being enabled]</p> | being enabled]</p> |
</div> | </div> |
</div> | </div> |
<div id="Ch4.S1.SS2.p5" class="ltx_para"> | <div id='Ch4.S1.SS2.p5' class='ltx_para'> |
<p class="ltx_p">The with-loop in lines 22–24 | <p class='ltx_p'>The with-loop in lines 22–24 |
demonstrates how both, a vector version | demonstrates how both, a vector version |
of the index vector and scalarised versions can be made available | of the index vector and scalarised versions can be made available |
for the generator-expression. It also examplifies that a mix of | for the generator-expression. It also examplifies that a mix of |
the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">.</span>-symbol and explicit expressions can be used for the bounds.</p> | the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>.</span>-symbol and explicit expressions can be used for the bounds.</p> |
</div> | </div> |
<div id="Ch4.S1.SS2.p6" class="ltx_para"> | <div id='Ch4.S1.SS2.p6' class='ltx_para'> |
<p class="ltx_p">The remaining two with-loops demonstrate the ability to specify | <p class='ltx_p'>The remaining two with-loops demonstrate the ability to specify |
rectangular grids of indices. | rectangular grids of indices. |
The vector that follows the keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">step</span> specifies the stride | The vector that follows the keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>step</span> specifies the stride |
of the reoccurence pattern per axis. | of the reoccurence pattern per axis. |
As a consequence, the with-loop in lines 27–29 | As a consequence, the with-loop in lines 27–29 |
computes an array | computes an array |
whose every fourth column is <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">42</span> starting with the very first one.</p> | whose every fourth column is <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>42</span> starting with the very first one.</p> |
</div> | </div> |
<div id="Ch4.S1.SS2.p7" class="ltx_para"> | <div id='Ch4.S1.SS2.p7' class='ltx_para'> |
<p class="ltx_p">The use of the vector after the keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">width</span> enables the programmer | <p class='ltx_p'>The use of the vector after the keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>width</span> enables the programmer |
to denote more than one index per stepping period. | to denote more than one index per stepping period. |
The with-loop in lines 27–29 | The with-loop in lines 27–29 |
computes a matrix where <math id="Ch4.S1.SS2.p7.m1" class="ltx_Math" alttext="1\times 2" display="inline"><mrow><mn>1</mn><mo>×</mo><mn>2</mn></mrow></math> blocks of the value | computes a matrix where <math id='Ch4.S1.SS2.p7.m1' class='ltx_Math' alttext='1\times 2' display='inline'><mrow><mn>1</mn><mo>×</mo><mn>2</mn></mrow></math> blocks of the value |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">42</span> are placed in the upper left corner of each <math id="Ch4.S1.SS2.p7.m2" class="ltx_Math" alttext="2\times 4" display="inline"><mrow><mn>2</mn><mo>×</mo><mn>4</mn></mrow></math> grid of the | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>42</span> are placed in the upper left corner of each <math id='Ch4.S1.SS2.p7.m2' class='ltx_Math' alttext='2\times 4' display='inline'><mrow><mn>2</mn><mo>×</mo><mn>4</mn></mrow></math> grid of the |
resulting array.</p> | resulting array.</p> |
</div> | </div> |
<div id="Thmtheorem27" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem27' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 27. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 27. </h6> |
<div id="Thmtheorem27.p1" class="ltx_para"> | <div id='Thmtheorem27.p1' class='ltx_para'> |
<p class="ltx_p">Can you achieve the same result array as the last with-loop of the above | <p class='ltx_p'>Can you achieve the same result array as the last with-loop of the above |
examples <span class="ltx_text ltx_font_bold">without</span> using the step/width facility? | examples <span class='ltx_text ltx_font_bold'>without</span> using the step/width facility? |
[<span class="ltx_text ltx_font_bold">Hint:</span> The solution may be surprisingly short!]</p> | [<span class='ltx_text ltx_font_bold'>Hint:</span> The solution may be surprisingly short!]</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch4.S1.SS3" class="ltx_subsection"> | <section id='Ch4.S1.SS3' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">4.1.3 </span>Generator Expressions</h5> | <span class='ltx_tag ltx_tag_subsection'>4.1.3 </span>Generator Expressions</h5> |
| |
<div id="Ch4.S1.SS3.p1" class="ltx_para"> | <div id='Ch4.S1.SS3.p1' class='ltx_para'> |
<p class="ltx_p">As we have seen in the previous sections, each generator expression | <p class='ltx_p'>As we have seen in the previous sections, each generator expression |
implicitly defines a mapping function from indices to expressions. | implicitly defines a mapping function from indices to expressions. |
The parameters of these functions are derived from the index variables | The parameters of these functions are derived from the index variables |
associated generator expression. Here a few examples:</p> | associated generator expression. Here a few examples:</p> |
</div> | </div> |
<figure id="LST32" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST32' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 32: </span>Non-trivial generator expressions</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 32: </span>Non-trivial generator expressions</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgIChbMCwxXSA8PSBbaSxqXSA8IFs2LDZdKSB7CiAgICAgICAgICBkaXYsIG1vZCA9%0AIGRpdm1vZCggaSwgaik7CiAgICAgICAgfTogbW9kOwogICAgICB9OiBnZW5hcnJheShbNiw2XSwg%0AMCk7CiAgcHJpbnQoYSk7CgogIGEgPSB3aXRoIHsKICAgICAgICAoLiA8PSBbaSxqXSA8PSAuKTog%0AKGk9PWogPyAxOiAwKSA7CiAgICAgIH06IGdlbmFycmF5KFs2LDZdLCAwKTsKICBwcmludChhKTsK%0ACiAgYSA9IHdpdGggewogICAgICAgICguIDw9IFtpXSA8PSAuKSB7CiAgICAgICAgICBtdmFsID0g%0AaTsKICAgICAgICAgIHZhbCA9IHN1bSh3aXRoIHsKICAgICAgICAgICAgICAgICAgICAgICAoLiA8%0APSBbaV0gPD0gLik6IGk7CiAgICAgICAgICAgICAgICAgICAgfTogZ2VuYXJyYXkoW212YWxdLCAw%0AKSk7CiAgICAgICAgfTogdmFsOwogICAgICB9OiBnZW5hcnJheShbNl0sIDApOwogIHByaW50KGEp%0AOwoKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgIChbMCwxXSA8PSBbaSxqXSA8IFs2LDZdKSB7CiAgICAgICAgICBkaXYsIG1vZCA9%0AIGRpdm1vZCggaSwgaik7CiAgICAgICAgfTogbW9kOwogICAgICB9OiBnZW5hcnJheShbNiw2XSwg%0AMCk7CiAgcHJpbnQoYSk7CgogIGEgPSB3aXRoIHsKICAgICAgICAoLiA8PSBbaSxqXSA8PSAuKTog%0AKGk9PWogPyAxOiAwKSA7CiAgICAgIH06IGdlbmFycmF5KFs2LDZdLCAwKTsKICBwcmludChhKTsK%0ACiAgYSA9IHdpdGggewogICAgICAgICguIDw9IFtpXSA8PSAuKSB7CiAgICAgICAgICBtdmFsID0g%0AaTsKICAgICAgICAgIHZhbCA9IHN1bSh3aXRoIHsKICAgICAgICAgICAgICAgICAgICAgICAoLiA8%0APSBbaV0gPD0gLik6IGk7CiAgICAgICAgICAgICAgICAgICAgfTogZ2VuYXJyYXkoW212YWxdLCAw%0AKSk7CiAgICAgICAgfTogdmFsOwogICAgICB9OiBnZW5hcnJheShbNl0sIDApOwogIHByaW50KGEp%0AOwoKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span>([0,1]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span><<span class="ltx_text ltx_lst_space"> </span>[6,6])<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span>([0,1]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span><<span class='ltx_text ltx_lst_space'> </span>[6,6])<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">div</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mod</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">divmod</span>(<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">i</span>,<span class="ltx_text ltx_lst_space"> </span>j); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>div</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mod</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>divmod</span>(<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>i</span>,<span class='ltx_text ltx_lst_space'> </span>j); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mod</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mod</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([6,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([6,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>,j]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.):<span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">i</span>==j<span class="ltx_text ltx_lst_space"> </span>?<span class="ltx_text ltx_lst_space"> </span>1:<span class="ltx_text ltx_lst_space"> </span>0)<span class="ltx_text ltx_lst_space"> </span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>,j]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.):<span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>i</span>==j<span class='ltx_text ltx_lst_space'> </span>?<span class='ltx_text ltx_lst_space'> </span>1:<span class='ltx_text ltx_lst_space'> </span>0)<span class='ltx_text ltx_lst_space'> </span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([6,6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([6,6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.)<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.)<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mval</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">i</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mval</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>i</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">val</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sum</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>val</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sum</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.):<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">i</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.):<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>i</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([<span class="ltx_text ltx_lst_identifier">mval</span>],<span class="ltx_text ltx_lst_space"> </span>0)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([<span class='ltx_text ltx_lst_identifier'>mval</span>],<span class='ltx_text ltx_lst_space'> </span>0)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">val</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>val</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>([6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>([6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch4.S1.SS3.p2" class="ltx_para"> | <div id='Ch4.S1.SS3.p2' class='ltx_para'> |
<p class="ltx_p">The first with-loop in lines 6–10 | <p class='ltx_p'>The first with-loop in lines 6–10 |
shows a typical scenario. | shows a typical scenario. |
The function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">divmod</span> returns two values rather than just one. | The function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>divmod</span> returns two values rather than just one. |
Rather than defining an explicit mapping function that passes | Rather than defining an explicit mapping function that passes |
on the desired return value, we can specify this selection | on the desired return value, we can specify this selection |
directly.</p> | directly.</p> |
</div> | </div> |
<div id="Ch4.S1.SS3.p3" class="ltx_para"> | <div id='Ch4.S1.SS3.p3' class='ltx_para'> |
<p class="ltx_p">The with-loop in lines 13–15 | <p class='ltx_p'>The with-loop in lines 13–15 |
demonstrates how non-trivial expressions | demonstrates how non-trivial expressions |
can be used even without necessitating the introduction of an | can be used even without necessitating the introduction of an |
assignment block.</p> | assignment block.</p> |
</div> | </div> |
<div id="Ch4.S1.SS3.p4" class="ltx_para"> | <div id='Ch4.S1.SS3.p4' class='ltx_para'> |
<p class="ltx_p">The scope of variables that are defined in such an assignment block is | <p class='ltx_p'>The scope of variables that are defined in such an assignment block is |
strictly local | strictly local |
to that block. Such a variable can neither be referenced within other generators | to that block. Such a variable can neither be referenced within other generators |
of the examples above.</p> | of the examples above.</p> |
</div> | </div> |
<div id="Thmtheorem28" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem28' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 28. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 28. </h6> |
<div id="Thmtheorem28.p1" class="ltx_para"> | <div id='Thmtheorem28.p1' class='ltx_para'> |
<p class="ltx_p">What do you expect to happen, if a variable that is defined | <p class='ltx_p'>What do you expect to happen, if a variable that is defined |
in such an assignment block has the same name as the index variable? | in such an assignment block has the same name as the index variable? |
Where is the “modified” version observable?</p> | Where is the “modified” version observable?</p> |
</div> | </div> |
<div id="Thmtheorem28.p2" class="ltx_para"> | <div id='Thmtheorem28.p2' class='ltx_para'> |
<p class="ltx_p">Why can the variable <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">mval</span> in the example above be safely replaced by | <p class='ltx_p'>Why can the variable <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>mval</span> in the example above be safely replaced by |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">i</span>?</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>i</span>?</p> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
<section id="Ch4.S1.SS4" class="ltx_subsection"> | <section id='Ch4.S1.SS4' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">4.1.4 </span>Reductions and further with-loop Operations</h5> | <span class='ltx_tag ltx_tag_subsection'>4.1.4 </span>Reductions and further with-loop Operations</h5> |
| |
<div id="Ch4.S1.SS4.p1" class="ltx_para"> | <div id='Ch4.S1.SS4.p1' class='ltx_para'> |
<p class="ltx_p">Besides the genarray with-loop operator described so far, <span class="ltx_text ltx_font_smallcaps">SaC</span> supports | <p class='ltx_p'>Besides the genarray with-loop operator described so far, <span class='ltx_text ltx_font_smallcaps'>SaC</span> supports |
a few more. These are: | a few more. These are: |
</p> | </p> |
</div> | </div> |
<div id="Ch4.S1.SS4.p2" class="ltx_para"> | <div id='Ch4.S1.SS4.p2' class='ltx_para'> |
<ul id="Ch4.I4" class="ltx_itemize"> | <ul id='Ch4.I4' class='ltx_itemize'> |
<li id="Ch4.I4.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I4.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I4.i1.p1" class="ltx_para"> | <div id='Ch4.I4.i1.p1' class='ltx_para'> |
<p class="ltx_p">a <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">modarray</span> operator which “modifies” an existing array, and</p> | <p class='ltx_p'>a <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>modarray</span> operator which “modifies” an existing array, and</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch4.I4.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch4.I4.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch4.I4.i2.p1" class="ltx_para"> | <div id='Ch4.I4.i2.p1' class='ltx_para'> |
<p class="ltx_p">two <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">fold</span> operators that enable the specification of reduction | <p class='ltx_p'>two <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>fold</span> operators that enable the specification of reduction |
operations</p> | operations</p> |
</div> | </div> |
</ul> | </ul> |
</div> | </div> |
<div id="Ch4.S1.SS4.p3" class="ltx_para"> | <div id='Ch4.S1.SS4.p3' class='ltx_para'> |
<p class="ltx_p">The modarray variant is very similar to the genarray variant. | <p class='ltx_p'>The modarray variant is very similar to the genarray variant. |
The only difference is that neither the shape of the result | The only difference is that neither the shape of the result |
nor a default element for unspecified index positions | nor a default element for unspecified index positions |
lines 11–13 | lines 11–13 |
of the example below demonstrates this. | of the example below demonstrates this. |
Here, a new array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">b</span> is computed from the array <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> | Here, a new array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>b</span> is computed from the array <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> |
by negating each second element of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span>. | by negating each second element of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span>. |
As in lesson <a href="#Ch2.S1" title="2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.1</span></a> on arrays as data, printing | As in lesson <a href='#Ch2.S1' title='2.1 Lesson 1: Arrays as Data ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.1</span></a> on arrays as data, printing |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">a</span> in line 15 shows that in fact two different arrays have | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>a</span> in line 15 shows that in fact two different arrays have |
been created.</p> | been created.</p> |
</div> | </div> |
<figure id="LST33" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST33' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 33: </span>Further with-loop operators</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 33: </span>Further with-loop operators</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgICguIDw9IFtpXSA8PSAuKTogaTsKICAgICAgfTogZ2VuYXJyYXkoIFs2XSwgMCk7%0ACiAgcHJpbnQoYSk7CgogIGIgPSB3aXRoIHsKICAgICAgICAoLiA8PSBpdiA8PSAuIHN0ZXAgWzJd%0AKTogLWFbaXZdOwogICAgICB9OiBtb2RhcnJheShhKTsKICBwcmludChiKTsKICBwcmludChhKTsK%0ACiAgYyA9IHdpdGggewogICAgICAgKFswXSA8PSBpdiA8PSBbNV0pOiBhW2l2XTsKICAgICAgfTog%0AZm9sZCgqLCAxKTsKICBwcmludChjKTsKCiAgZCA9IHdpdGggewogICAgICAgKFswXSA8PSBpdiA8%0APSBbNV0pOiBhW2l2XTsKICAgICAgfTogZm9sZGZpeCgqLCAxLCAwKTsKICBwcmludChkKTsKCiAg%0AcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CnVzZSBBcnJheTogYWxsOwoKaW50IG1haW4oKQp7CiAgYSA9IHdpdGgg%0AewogICAgICAgICguIDw9IFtpXSA8PSAuKTogaTsKICAgICAgfTogZ2VuYXJyYXkoIFs2XSwgMCk7%0ACiAgcHJpbnQoYSk7CgogIGIgPSB3aXRoIHsKICAgICAgICAoLiA8PSBpdiA8PSAuIHN0ZXAgWzJd%0AKTogLWFbaXZdOwogICAgICB9OiBtb2RhcnJheShhKTsKICBwcmludChiKTsKICBwcmludChhKTsK%0ACiAgYyA9IHdpdGggewogICAgICAgKFswXSA8PSBpdiA8PSBbNV0pOiBhW2l2XTsKICAgICAgfTog%0AZm9sZCgqLCAxKTsKICBwcmludChjKTsKCiAgZCA9IHdpdGggewogICAgICAgKFswXSA8PSBpdiA8%0APSBbNV0pOiBhW2l2XTsKICAgICAgfTogZm9sZGZpeCgqLCAxLCAwKTsKICBwcmludChkKTsKCiAg%0AcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Array</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Array</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[<span class="ltx_text ltx_lst_identifier">i</span>]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.):<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">i</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[<span class='ltx_text ltx_lst_identifier'>i</span>]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.):<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>i</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">genarray</span>(<span class="ltx_text ltx_lst_space"> </span>[6],<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>genarray</span>(<span class='ltx_text ltx_lst_space'> </span>[6],<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">b</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>b</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span>(.<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>.<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">step</span><span class="ltx_text ltx_lst_space"> </span>[2]):<span class="ltx_text ltx_lst_space"> </span>-<span class="ltx_text ltx_lst_identifier">a</span>[<span class="ltx_text ltx_lst_identifier">iv</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span>(.<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>.<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>step</span><span class='ltx_text ltx_lst_space'> </span>[2]):<span class='ltx_text ltx_lst_space'> </span>-<span class='ltx_text ltx_lst_identifier'>a</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">modarray</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>modarray</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">b</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>b</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">a</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>a</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span>([0]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[5]):<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>[<span class="ltx_text ltx_lst_identifier">iv</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span>([0]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[5]):<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fold</span>(*,<span class="ltx_text ltx_lst_space"> </span>1); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fold</span>(*,<span class='ltx_text ltx_lst_space'> </span>1); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">c</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>c</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">d</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">with</span><span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>d</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>with</span><span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span>([0]<span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">iv</span><span class="ltx_text ltx_lst_space"> </span><=<span class="ltx_text ltx_lst_space"> </span>[5]):<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">a</span>[<span class="ltx_text ltx_lst_identifier">iv</span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span>([0]<span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>iv</span><span class='ltx_text ltx_lst_space'> </span><=<span class='ltx_text ltx_lst_space'> </span>[5]):<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>a</span>[<span class='ltx_text ltx_lst_identifier'>iv</span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space"> </span>}:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foldfix</span>(*,<span class="ltx_text ltx_lst_space"> </span>1,<span class="ltx_text ltx_lst_space"> </span>0); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space'> </span>}:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foldfix</span>(*,<span class='ltx_text ltx_lst_space'> </span>1,<span class='ltx_text ltx_lst_space'> </span>0); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">print</span>(<span class="ltx_text ltx_lst_identifier">d</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>print</span>(<span class='ltx_text ltx_lst_identifier'>d</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch4.S1.SS4.p4" class="ltx_para"> | <div id='Ch4.S1.SS4.p4' class='ltx_para'> |
<p class="ltx_p">The two final examples demonstrate how reduction operations can be specified | <p class='ltx_p'>The two final examples demonstrate how reduction operations can be specified |
in <span class="ltx_text ltx_font_smallcaps">SaC</span>. | in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. |
The first variant (lines 17–19) | The first variant (lines 17–19) |
is the standard variant for reductions. | is the standard variant for reductions. |
It requires the specification of a folding function (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">*</span> in this case) | It requires the specification of a folding function (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>*</span> in this case) |
and of a neutral element (<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">1</span> here). | and of a neutral element (<span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>1</span> here). |
As with the earlier variants, all index vectors from the generator range are mapped | As with the earlier variants, all index vectors from the generator range are mapped |
according to the generator expression. Subsequently all computed | according to the generator expression. Subsequently all computed |
associative and commutative.</p> | associative and commutative.</p> |
</div> | </div> |
<div id="Ch4.S1.SS4.p5" class="ltx_para"> | <div id='Ch4.S1.SS4.p5' class='ltx_para'> |
<p class="ltx_p">The final with-loop in lines 22–24 | <p class='ltx_p'>The final with-loop in lines 22–24 |
is a slight variant of the fold version. | is a slight variant of the fold version. |
It stems from the observation that some reductions can be shortcut | It stems from the observation that some reductions can be shortcut |
when a certain fixpoint value has been met. In the given example of | when a certain fixpoint value has been met. In the given example of |
multiplication this is the value <span class="ltx_text ltx_lstlisting"></span>. | multiplication this is the value <span class='ltx_text ltx_lstlisting'></span>. |
Whether the underlying implementation makes use of this extra information | Whether the underlying implementation makes use of this extra information |
or not is not specified. The computational result of both, the fold | or not is not specified. The computational result of both, the fold |
</section> | </section> |
</section> | </section> |
<section id="Ch5" class="ltx_chapter"> | <section id='Ch5' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 5 </span>Working with Modules</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 5 </span>Working with Modules</h3> |
| |
<div id="Ch5.p1" class="ltx_para"> | <div id='Ch5.p1' class='ltx_para'> |
<p class="ltx_p">This chapter explains the basic principles of using modules in <span class="ltx_text ltx_font_smallcaps">SaC</span>. Prior to | <p class='ltx_p'>This chapter explains the basic principles of using modules in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. Prior to |
modules, a short introduction into <span class="ltx_text ltx_font_smallcaps">SaC</span> name spaces is given.</p> | modules, a short introduction into <span class='ltx_text ltx_font_smallcaps'>SaC</span> name spaces is given.</p> |
</div> | </div> |
<section id="Ch5.S1" class="ltx_section"> | <section id='Ch5.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">5.1 </span>Name Spaces</h4> | <span class='ltx_tag ltx_tag_section'>5.1 </span>Name Spaces</h4> |
| |
<div id="Ch5.S1.p1" class="ltx_para"> | <div id='Ch5.S1.p1' class='ltx_para'> |
<p class="ltx_p">In general, name spaces are used to extend the set of possible identifiers and | <p class='ltx_p'>In general, name spaces are used to extend the set of possible identifiers and |
thus inhibit potential name clashes. <span class="ltx_text ltx_font_smallcaps">SaC</span> supports multiple name spaces, although | thus inhibit potential name clashes. <span class='ltx_text ltx_font_smallcaps'>SaC</span> supports multiple name spaces, although |
these are not explicitly defined by the programmer. Instead, every module and | these are not explicitly defined by the programmer. Instead, every module and |
program has its own name space. The name space of a module is denoted by its | program has its own name space. The name space of a module is denoted by its |
name, a program uses <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span> as its name space identifier. As an example of | name, a program uses <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span> as its name space identifier. As an example of |
using name spaces consider Listing <a href="#LST34" title="34 ‣ 5.1 Name Spaces ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">34</span></a>.</p> | using name spaces consider Listing <a href='#LST34' title='34 ‣ 5.1 Name Spaces ‣ Chapter 5 Working with Modules ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>34</span></a>.</p> |
</div> | </div> |
<figure id="LST34" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST34' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 34: </span>Hello world program with name spaces</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 34: </span>Hello world program with name spaces</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,aW50IG1haW4oKQp7CiAgU3RkSU86OnByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsKICByZXR1cm4g%0AMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,aW50IG1haW4oKQp7CiAgU3RkSU86OnByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsKICByZXR1cm4g%0AMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>::<span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hello<span class="ltx_text ltx_lst_space"> </span>World!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>::<span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hello<span class='ltx_text ltx_lst_space'> </span>World!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S1.p2" class="ltx_para"> | <div id='Ch5.S1.p2' class='ltx_para'> |
<p class="ltx_p">Instead of an import statement, a qualified function name is used. A qualified | <p class='ltx_p'>Instead of an import statement, a qualified function name is used. A qualified |
identifier always consists of a name space identifier, followed by a double | identifier always consists of a name space identifier, followed by a double |
colon and the unqualified identifier, in this case a function identifier. | colon and the unqualified identifier, in this case a function identifier. |
global objects.</p> | global objects.</p> |
</div> | </div> |
<div id="Ch5.S1.p3" class="ltx_para"> | <div id='Ch5.S1.p3' class='ltx_para'> |
<p class="ltx_p">As it would be bothering to precede each identifier with the name space it | <p class='ltx_p'>As it would be bothering to precede each identifier with the name space it |
belongs to, <span class="ltx_text ltx_font_smallcaps">SaC</span> supports multiple ways to automatically decide the right name | belongs to, <span class='ltx_text ltx_font_smallcaps'>SaC</span> supports multiple ways to automatically decide the right name |
space and generate a fully qualified identifier implicitly (or internally).</p> | space and generate a fully qualified identifier implicitly (or internally).</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch5.S2" class="ltx_section"> | <section id='Ch5.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">5.2 </span>Use Statements</h4> | <span class='ltx_tag ltx_tag_section'>5.2 </span>Use Statements</h4> |
| |
<div id="Ch5.S2.p1" class="ltx_para"> | <div id='Ch5.S2.p1' class='ltx_para'> |
<p class="ltx_p">To simplify the use of identifiers from other modules, <span class="ltx_text ltx_font_smallcaps">SaC</span> allows us to specify | <p class='ltx_p'>To simplify the use of identifiers from other modules, <span class='ltx_text ltx_font_smallcaps'>SaC</span> allows us to specify |
a search space whose identifiers can be used in an unqualified fashion. By | a search space whose identifiers can be used in an unqualified fashion. By |
default, this search space contains all identifiers from the current name space. | default, this search space contains all identifiers from the current name space. |
To add a complete name space to the current search space, you may use the | To add a complete name space to the current search space, you may use the |
statement <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><math id="Ch5.S2.p1.m1" class="ltx_Math" alttext="\alpha" display="inline"><mi>α</mi></math>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>;</span> where <math id="Ch5.S2.p1.m2" class="ltx_Math" alttext="\alpha" display="inline"><mi>α</mi></math> gives | statement <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><math id='Ch5.S2.p1.m1' class='ltx_Math' alttext='\alpha' display='inline'><mi>α</mi></math>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>;</span> where <math id='Ch5.S2.p1.m2' class='ltx_Math' alttext='\alpha' display='inline'><mi>α</mi></math> gives |
the name of a name space. Using this technique, the hello world example can as | the name of a name space. Using this technique, the hello world example can as |
well be expressed as follows:</p> | well be expressed as follows:</p> |
</div> | </div> |
<figure id="LST35" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST35' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 35: </span>hello world with use statement</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 35: </span>hello world with use statement</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CgppbnQgbWFpbigpCnsKICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7%0ACiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CgppbnQgbWFpbigpCnsKICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7%0ACiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hello<span class="ltx_text ltx_lst_space"> </span>World!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hello<span class='ltx_text ltx_lst_space'> </span>World!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S2.p2" class="ltx_para"> | <div id='Ch5.S2.p2' class='ltx_para'> |
<p class="ltx_p">However, an identifier is not allowed to have multiple occurrences within the | <p class='ltx_p'>However, an identifier is not allowed to have multiple occurrences within the |
search space as far as types and global objects are concerned. For function | search space as far as types and global objects are concerned. For function |
symbols the same holds modulo overloading based on parameter types.</p> | symbols the same holds modulo overloading based on parameter types.</p> |
</div> | </div> |
<div id="Ch5.S2.p3" class="ltx_para"> | <div id='Ch5.S2.p3' class='ltx_para'> |
<p class="ltx_p">To further avoid name clashes, <span class="ltx_text ltx_font_smallcaps">SaC</span> supports a more specific way to define search | <p class='ltx_p'>To further avoid name clashes, <span class='ltx_text ltx_font_smallcaps'>SaC</span> supports a more specific way to define search |
spaces. Instead of the keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">all</span>, a comma separated list of | spaces. Instead of the keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>all</span>, a comma separated list of |
identifiers can be given. The following version of hello world uses a more | identifiers can be given. The following version of hello world uses a more |
specific use statement:</p> | specific use statement:</p> |
</div> | </div> |
<figure id="LST36" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST36' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 36: </span>hello world with specific use statement</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 36: </span>hello world with specific use statement</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiB7cHJpbnRmfTsKCmludCBtYWluKCkKewogIHByaW50ZigiSGVsbG8gV29ybGQh%0AXG4iKTsKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiB7cHJpbnRmfTsKCmludCBtYWluKCkKewogIHByaW50ZigiSGVsbG8gV29ybGQh%0AXG4iKTsKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hello<span class="ltx_text ltx_lst_space"> </span>World!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hello<span class='ltx_text ltx_lst_space'> </span>World!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S2.p4" class="ltx_para"> | <div id='Ch5.S2.p4' class='ltx_para'> |
<p class="ltx_p">In this example, only <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">printf</span> is made available to the search space | <p class='ltx_p'>In this example, only <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>printf</span> is made available to the search space |
and can thus be used without explicitly specifying its name space. In some | and can thus be used without explicitly specifying its name space. In some |
occasions it can be useful to add all identifiers except a given set to the | occasions it can be useful to add all identifiers except a given set to the |
search space. Consider a module <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">FastIO</span> reimplementing all functions | search space. Consider a module <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>FastIO</span> reimplementing all functions |
of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">StdIO</span>. To use <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">FastIO</span> except the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">printf</span> | of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>StdIO</span>. To use <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>FastIO</span> except the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>printf</span> |
function, but <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">StdIO</span>::<span class="ltx_text ltx_lst_identifier">printf</span></span> one might write:</p> | function, but <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>StdIO</span>::<span class='ltx_text ltx_lst_identifier'>printf</span></span> one might write:</p> |
</div> | </div> |
<figure id="LST37" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST37' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 37: </span>hello world with use all but statement</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 37: </span>hello world with use all but statement</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIEZhc3RJTzogYWxsIGV4Y2VwdCB7cHJpbnRmfTsKdXNlIFN0ZElPOiB7cHJpbnRmfTsKCmlu%0AdCBtYWluKCkKewogIHByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIEZhc3RJTzogYWxsIGV4Y2VwdCB7cHJpbnRmfTsKdXNlIFN0ZElPOiB7cHJpbnRmfTsKCmlu%0AdCBtYWluKCkKewogIHByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">FastIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">except</span><span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>FastIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>except</span><span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hello<span class="ltx_text ltx_lst_space"> </span>World!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hello<span class='ltx_text ltx_lst_space'> </span>World!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S2.p5" class="ltx_para"> | <div id='Ch5.S2.p5' class='ltx_para'> |
<p class="ltx_p">This adds all identifiers from <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">FastIO</span> to the current search space | <p class='ltx_p'>This adds all identifiers from <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>FastIO</span> to the current search space |
except <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">FastIO</span>::<span class="ltx_text ltx_lst_identifier">printf</span></span>. This allows the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">printf</span> | except <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>FastIO</span>::<span class='ltx_text ltx_lst_identifier'>printf</span></span>. This allows the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>printf</span> |
to be imported from module <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">StdIO</span>.</p> | to be imported from module <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>StdIO</span>.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch5.S3" class="ltx_section"> | <section id='Ch5.S3' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">5.3 </span>Import statement</h4> | <span class='ltx_tag ltx_tag_section'>5.3 </span>Import statement</h4> |
| |
<div id="Ch5.S3.p1" class="ltx_para"> | <div id='Ch5.S3.p1' class='ltx_para'> |
<p class="ltx_p">So far, we added identifiers to the search space of the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler to avoid | <p class='ltx_p'>So far, we added identifiers to the search space of the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler to avoid |
explicitly specifying their name spaces each time they are referenced. As | explicitly specifying their name spaces each time they are referenced. As |
function signatures have to differ in number of arguments or their types, the | function signatures have to differ in number of arguments or their types, the |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">use</span> statement prevents overloading of functions by shape across | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>use</span> statement prevents overloading of functions by shape across |
module boundaries. In fact, <span class="ltx_text ltx_font_smallcaps">SaC</span> only supports overloading by shape within a | module boundaries. In fact, <span class='ltx_text ltx_font_smallcaps'>SaC</span> only supports overloading by shape within a |
single name space. Otherwise, the meaning of a fully qualified identifier could | single name space. Otherwise, the meaning of a fully qualified identifier could |
differ when being used in different scopes. To nonetheless allow for successive | differ when being used in different scopes. To nonetheless allow for successive |
overloading in separate modules, <span class="ltx_text ltx_font_smallcaps">SaC</span> provides a mechanism for cloning functions | overloading in separate modules, <span class='ltx_text ltx_font_smallcaps'>SaC</span> provides a mechanism for cloning functions |
using the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">import</span> statement.</p> | using the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>import</span> statement.</p> |
</div> | </div> |
<figure id="LST38" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST38' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 38: </span>hello world with import statement</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 38: </span>hello world with import statement</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,aW1wb3J0IFN0ZElPOiB7cHJpbnRmfTsKCmludCBtYWluKCkKewogIG1haW46OnByaW50ZigiSGVs%0AbG8gV29ybGQhXG4iKTsKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,aW1wb3J0IFN0ZElPOiB7cHJpbnRmfTsKCmludCBtYWluKCkKewogIG1haW46OnByaW50ZigiSGVs%0AbG8gV29ybGQhXG4iKTsKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">import</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>import</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>::<span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hello<span class="ltx_text ltx_lst_space"> </span>World!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>::<span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hello<span class='ltx_text ltx_lst_space'> </span>World!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S3.p2" class="ltx_para"> | <div id='Ch5.S3.p2' class='ltx_para'> |
<p class="ltx_p">In this example, the statement <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">import</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}</span> creates a | <p class='ltx_p'>In this example, the statement <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>import</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}</span> creates a |
(conceptual) copy of the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">printf</span> in the current name space | (conceptual) copy of the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>printf</span> in the current name space |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span>. Consider a module <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">foo</span> containing a function | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span>. Consider a module <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>foo</span> containing a function |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*])</span>. This function can now be overloaded as follows:</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*])</span>. This function can now be overloaded as follows:</p> |
</div> | </div> |
<figure id="LST39" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST39' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 39: </span>bar overloading</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 39: </span>bar overloading</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,aW1wb3J0IGZvbzoge2Jhcn07CgppbnRbK10gYmFyKGludFsrXSB4KQp7CiAgLyogLi4uICAqLwp9%0ACgppbnQgbWFpbigpCnsKICAvKiAuLi4gICovCgogIHkgPSBiYXIoeCk7CgogIC8qIC4uLiAgKi8K%0AfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,aW1wb3J0IGZvbzoge2Jhcn07CgppbnRbK10gYmFyKGludFsrXSB4KQp7CiAgLyogLi4uICAqLwp9%0ACgppbnQgbWFpbigpCnsKICAvKiAuLi4gICovCgogIHkgPSBiYXIoeCk7CgogIC8qIC4uLiAgKi8K%0AfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">import</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foo</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">bar</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>import</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foo</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>bar</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[+]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[+]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[+]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[+]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(<span class="ltx_text ltx_lst_identifier">x</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(<span class='ltx_text ltx_lst_identifier'>x</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S3.p3" class="ltx_para"> | <div id='Ch5.S3.p3' class='ltx_para'> |
<p class="ltx_p">Within the name space <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span> there are two instances of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">bar</span>, the | <p class='ltx_p'>Within the name space <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span> there are two instances of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>bar</span>, the |
one imported from <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">foo</span> and the one defined within <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span> | one imported from <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>foo</span> and the one defined within <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span> |
itself. Keep in mind, that there is a conceptual copy in <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span>, so | itself. Keep in mind, that there is a conceptual copy in <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span>, so |
both are defined in <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span> and so overloading can take place.</p> | both are defined in <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span> and so overloading can take place.</p> |
</div> | </div> |
<div id="Ch5.S3.p4" class="ltx_para"> | <div id='Ch5.S3.p4' class='ltx_para'> |
<p class="ltx_p">Be careful when importing types, as an imported type is regarded as different to | <p class='ltx_p'>Be careful when importing types, as an imported type is regarded as different to |
its origin type by the type system as they were defined in different name | its origin type by the type system as they were defined in different name |
spaces. However, you might still exchanges values between both types by means of | spaces. However, you might still exchanges values between both types by means of |
</div> | </div> |
</section> | </section> |
<section id="Ch5.S4" class="ltx_section"> | <section id='Ch5.S4' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">5.4 </span>Putting It Together</h4> | <span class='ltx_tag ltx_tag_section'>5.4 </span>Putting It Together</h4> |
| |
<div id="Ch5.S4.p1" class="ltx_para"> | <div id='Ch5.S4.p1' class='ltx_para'> |
<p class="ltx_p">Both types of module statements can be mixed in any possible way, as long as no | <p class='ltx_p'>Both types of module statements can be mixed in any possible way, as long as no |
name clash is introduced by them. Always keep in mind that an <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">import</span> | name clash is introduced by them. Always keep in mind that an <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>import</span> |
statement adds all identifiers to the current name space and thus to the current | statement adds all identifiers to the current name space and thus to the current |
search space, as well. The following example creates a name clash by using and | search space, as well. The following example creates a name clash by using and |
importing the same identifier:</p> | importing the same identifier:</p> |
</div> | </div> |
<figure id="LST40" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST40' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 40: </span>name clash example</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 40: </span>name clash example</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CmltcG9ydCBTdGRJTzoge3ByaW50Zn07CgppbnQgbWFpbigpCnsKICBw%0AcmludGYoIk5ldmVyIHNlZSB0aGlzIVxuIik7CgogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGw7CmltcG9ydCBTdGRJTzoge3ByaW50Zn07CgppbnQgbWFpbigpCnsKICBw%0AcmludGYoIk5ldmVyIHNlZSB0aGlzIVxuIik7CgogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">import</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>import</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Never<span class="ltx_text ltx_lst_space"> </span>see<span class="ltx_text ltx_lst_space"> </span>this!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Never<span class='ltx_text ltx_lst_space'> </span>see<span class='ltx_text ltx_lst_space'> </span>this!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S4.p2" class="ltx_para"> | <div id='Ch5.S4.p2' class='ltx_para'> |
<p class="ltx_p">Here, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">printf</span> is imported to the current name space, so there is an | <p class='ltx_p'>Here, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>printf</span> is imported to the current name space, so there is an |
identifier <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">main</span>::<span class="ltx_text ltx_lst_identifier">printf</span></span>, which is part of the compiler search space. | identifier <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>main</span>::<span class='ltx_text ltx_lst_identifier'>printf</span></span>, which is part of the compiler search space. |
Furthermore, the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">use</span> statement adds the complete name space of | Furthermore, the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>use</span> statement adds the complete name space of |
module <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">StdIO</span> to the current name space, especially the identifier | module <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>StdIO</span> to the current name space, especially the identifier |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">StdIO</span>::<span class="ltx_text ltx_lst_identifier">printf</span></span>. Thus there are two identifiers with the same | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>StdIO</span>::<span class='ltx_text ltx_lst_identifier'>printf</span></span>. Thus there are two identifiers with the same |
unqualified name within the search space. To solve this, a restriction to the | unqualified name within the search space. To solve this, a restriction to the |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">use</span> statement can be used.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>use</span> statement can be used.</p> |
</div> | </div> |
<figure id="LST41" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST41' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 41: </span>name clash example</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 41: </span>name clash example</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0ZElPOiBhbGwgZXhjZXB0IHtwcmludGZ9OwppbXBvcnQgU3RkSU86IHtwcmludGZ9OwoK%0AaW50IG1haW4oKQp7CiAgcHJpbnRmKCJIZXksIGl0IHdvcmtzIVxuIik7CgogIHJldHVybiAwOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0ZElPOiBhbGwgZXhjZXB0IHtwcmludGZ9OwppbXBvcnQgU3RkSU86IHtwcmludGZ9OwoK%0AaW50IG1haW4oKQp7CiAgcHJpbnRmKCJIZXksIGl0IHdvcmtzIVxuIik7CgogIHJldHVybiAwOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">except</span><span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>except</span><span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">import</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">printf</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>import</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>printf</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”Hey,<span class="ltx_text ltx_lst_space"> </span>it<span class="ltx_text ltx_lst_space"> </span>works!\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”Hey,<span class='ltx_text ltx_lst_space'> </span>it<span class='ltx_text ltx_lst_space'> </span>works!\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S4.p3" class="ltx_para"> | <div id='Ch5.S4.p3' class='ltx_para'> |
<p class="ltx_p">In this example, the identifier <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">StdIO</span>::<span class="ltx_text ltx_lst_identifier">printf</span></span> is no longer added to | <p class='ltx_p'>In this example, the identifier <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>StdIO</span>::<span class='ltx_text ltx_lst_identifier'>printf</span></span> is no longer added to |
the compiler search space and thus no name clash originates.</p> | the compiler search space and thus no name clash originates.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch5.S5" class="ltx_section"> | <section id='Ch5.S5' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">5.5 </span>Implementing Modules</h4> | <span class='ltx_tag ltx_tag_section'>5.5 </span>Implementing Modules</h4> |
| |
<div id="Ch5.S5.p1" class="ltx_para"> | <div id='Ch5.S5.p1' class='ltx_para'> |
<p class="ltx_p">A <span class="ltx_text ltx_font_smallcaps">SaC</span> module implementation essentially looks just like a program, being a | <p class='ltx_p'>A <span class='ltx_text ltx_font_smallcaps'>SaC</span> module implementation essentially looks just like a program, being a |
collection of type, global object and function definitions. Unlike a program, a | collection of type, global object and function definitions. Unlike a program, a |
module starts with the key word <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">module</span> followed by the module name, | module starts with the key word <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>module</span> followed by the module name, |
i.e. the name space, and a semicolon. | i.e. the name space, and a semicolon. |
</p> | </p> |
</div> | </div> |
<figure id="LST42" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST42' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 42: </span>module implementation example</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 42: </span>module implementation example</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,bW9kdWxlIG15bW9kOwoKcHJvdmlkZSBhbGwgZXhjZXB0IHtmb299OwpleHBvcnQge2Zvb307Cgpp%0AbnQgZm9vKGludCB4KQp7CiAgcmV0dXJuIC8qIC4uLiAgKi87Cn0KCmludCBiYXIoeCBpbnQgeCkK%0AewogIHJldHVybiAvKiAuLi4gICovOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,bW9kdWxlIG15bW9kOwoKcHJvdmlkZSBhbGwgZXhjZXB0IHtmb299OwpleHBvcnQge2Zvb307Cgpp%0AbnQgZm9vKGludCB4KQp7CiAgcmV0dXJuIC8qIC4uLiAgKi87Cn0KCmludCBiYXIoeCBpbnQgeCkK%0AewogIHJldHVybiAvKiAuLi4gICovOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_identifier">module</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mymod</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_identifier'>module</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mymod</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">provide</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">except</span><span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">foo</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>provide</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>except</span><span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>foo</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_identifier">export</span><span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">foo</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_identifier'>export</span><span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>foo</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">foo</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>foo</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">bar</span>(<span class="ltx_text ltx_lst_identifier">x</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>bar</span>(<span class='ltx_text ltx_lst_identifier'>x</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch5.S5.p2" class="ltx_para"> | <div id='Ch5.S5.p2' class='ltx_para'> |
<p class="ltx_p">The more interesting aspect of a module (name space) is the question which | <p class='ltx_p'>The more interesting aspect of a module (name space) is the question which |
symbols (types, global objects and functions) are made available outside the | symbols (types, global objects and functions) are made available outside the |
module and which are merely accessible internally within the module itself. Two | module and which are merely accessible internally within the module itself. Two |
kinds of statements using the key words <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">provide</span> and | kinds of statements using the key words <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>provide</span> and |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">export</span> provide fine-grained control over the availability of symbols | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>export</span> provide fine-grained control over the availability of symbols |
outside the current module. By default any symbol defined in a module is only | outside the current module. By default any symbol defined in a module is only |
accessible in the module itself. Using the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">provide</span> statement all or | accessible in the module itself. Using the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>provide</span> statement all or |
selected symbols can be made available to be “used” by other modules or | selected symbols can be made available to be “used” by other modules or |
programs. With the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">export</span> statement symbols are made available for | programs. With the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>export</span> statement symbols are made available for |
either <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">use</span> or <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">import</span> by other modules or programs. The | either <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>use</span> or <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>import</span> by other modules or programs. The |
syntax of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">provide</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">export</span> statements is very similar | syntax of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>provide</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>export</span> statements is very similar |
to that of the corresponding <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">use</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">import</span> statements. | to that of the corresponding <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>use</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>import</span> statements. |
Either all symbols are provided/exported uniformly, or a specific list of | Either all symbols are provided/exported uniformly, or a specific list of |
symbols is concerned, or all but a given list of symbols.</p> | symbols is concerned, or all but a given list of symbols.</p> |
</section> | </section> |
</section> | </section> |
<section id="Ch6" class="ltx_chapter"> | <section id='Ch6' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 6 </span>Case Studies</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 6 </span>Case Studies</h3> |
| |
<div id="Ch6.p1" class="ltx_para"> | <div id='Ch6.p1' class='ltx_para'> |
<p class="ltx_p">This trail will illustrate how to use <span class="ltx_text ltx_font_smallcaps">SaC</span> for real-world applications. The | <p class='ltx_p'>This trail will illustrate how to use <span class='ltx_text ltx_font_smallcaps'>SaC</span> for real-world applications. The |
following exercises make use of the techniques introduced in this tutorial so | following exercises make use of the techniques introduced in this tutorial so |
far. Working through this trail shall give you some more hands-on experience | far. Working through this trail shall give you some more hands-on experience |
with the language itself and at the same time show you how to employ <span class="ltx_text ltx_font_smallcaps">SaC</span> to | with the language itself and at the same time show you how to employ <span class='ltx_text ltx_font_smallcaps'>SaC</span> to |
solve your every-day problems in an efficient way.</p> | solve your every-day problems in an efficient way.</p> |
</div> | </div> |
<section id="Ch6.S1" class="ltx_section"> | <section id='Ch6.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">6.1 </span>Lesson 7: Image Processing</h4> | <span class='ltx_tag ltx_tag_section'>6.1 </span>Lesson 7: Image Processing</h4> |
| |
<div id="Ch6.S1.p1" class="ltx_para"> | <div id='Ch6.S1.p1' class='ltx_para'> |
<p class="ltx_p">Digital image processing spans across a vast area of applications. Ranging from | <p class='ltx_p'>Digital image processing spans across a vast area of applications. Ranging from |
digital photography over astronomy to surgery-assisting medical imaging, most | digital photography over astronomy to surgery-assisting medical imaging, most |
applications still share as their underlying theory some sort of basic signal | applications still share as their underlying theory some sort of basic signal |
originally analogue, continuous version of the signal.</p> | originally analogue, continuous version of the signal.</p> |
</div> | </div> |
<div id="Ch6.S1.p2" class="ltx_para"> | <div id='Ch6.S1.p2' class='ltx_para'> |
<p class="ltx_p">In this exercise we will focus on two basic image filters on static, | <p class='ltx_p'>In this exercise we will focus on two basic image filters on static, |
two-dimensional, 8-bit gray-scale images with a resolution of <math id="Ch6.S1.p2.m1" class="ltx_Math" alttext="x_{\text{max}}\times y_{\text{max}}" display="inline"><mrow><msub><mi>x</mi><mtext>max</mtext></msub><mo>×</mo><msub><mi>y</mi><mtext>max</mtext></msub></mrow></math>, such that an image is a 2D function</p> | two-dimensional, 8-bit gray-scale images with a resolution of <math id='Ch6.S1.p2.m1' class='ltx_Math' alttext='x_{\text{max}}\times y_{\text{max}}' display='inline'><mrow><msub><mi>x</mi><mtext>max</mtext></msub><mo>×</mo><msub><mi>y</mi><mtext>max</mtext></msub></mrow></math>, such that an image is a 2D function</p> |
<table id="Ch10.S4.EGx1" class="ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table"> | <table id='Ch10.S4.EGx1' class='ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table'> |
| |
<tr id="Ch6.Ex1" class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr id='Ch6.Ex1' class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_td ltx_align_right ltx_eqn_cell"><math id="Ch6.Ex1.m1" class="ltx_Math" alttext="\displaystyle S:\mathbb{N}\times\mathbb{N}" display="inline"><mrow><mi>S</mi><mo>:</mo><mrow><mi>ℕ</mi><mo>×</mo><mi>ℕ</mi></mrow></mrow></math></td> | <td class='ltx_td ltx_align_right ltx_eqn_cell'><math id='Ch6.Ex1.m1' class='ltx_Math' alttext='\displaystyle S:\mathbb{N}\times\mathbb{N}' display='inline'><mrow><mi>S</mi><mo>:</mo><mrow><mi>ℕ</mi><mo>×</mo><mi>ℕ</mi></mrow></mrow></math></td> |
<td class="ltx_td ltx_align_center ltx_eqn_cell"><math id="Ch6.Ex1.m2" class="ltx_Math" alttext="\displaystyle\rightarrow" display="inline"><mo>→</mo></math></td> | <td class='ltx_td ltx_align_center ltx_eqn_cell'><math id='Ch6.Ex1.m2' class='ltx_Math' alttext='\displaystyle\rightarrow' display='inline'><mo>→</mo></math></td> |
<td class="ltx_td ltx_align_left ltx_eqn_cell"><math id="Ch6.Ex1.m3" class="ltx_Math" alttext="\displaystyle\mathbb{N}" display="inline"><mi>ℕ</mi></math></td> | <td class='ltx_td ltx_align_left ltx_eqn_cell'><math id='Ch6.Ex1.m3' class='ltx_Math' alttext='\displaystyle\mathbb{N}' display='inline'><mi>ℕ</mi></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
<tr id="Ch6.Ex2" class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr id='Ch6.Ex2' class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_td ltx_align_right ltx_eqn_cell"><math id="Ch6.Ex2.m1" class="ltx_Math" alttext="\displaystyle S(x,y)" display="inline"><mrow><mi>S</mi><mo></mo><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow></mrow></math></td> | <td class='ltx_td ltx_align_right ltx_eqn_cell'><math id='Ch6.Ex2.m1' class='ltx_Math' alttext='\displaystyle S(x,y)' display='inline'><mrow><mi>S</mi><mo></mo><mrow><mo stretchy='false'>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo stretchy='false'>)</mo></mrow></mrow></math></td> |
<td class="ltx_td ltx_align_center ltx_eqn_cell"><math id="Ch6.Ex2.m2" class="ltx_Math" alttext="\displaystyle=" display="inline"><mo>=</mo></math></td> | <td class='ltx_td ltx_align_center ltx_eqn_cell'><math id='Ch6.Ex2.m2' class='ltx_Math' alttext='\displaystyle=' display='inline'><mo>=</mo></math></td> |
<td class="ltx_td ltx_align_left ltx_eqn_cell"><math id="Ch6.Ex2.m3" class="ltx_Math" alttext="\displaystyle\begin{cases}v_{xy},&\mbox{if }x<x_{\text{max}}\wedge y<y_{\text{% | <td class='ltx_td ltx_align_left ltx_eqn_cell'><math id='Ch6.Ex2.m3' class='ltx_Math' alttext='\displaystyle\begin{cases}v_{xy},&\mbox{if }x<x_{\text{max}}\wedge y<y_{\text{% |
max}}\\ | max}}\\ |
0,&\mbox{otherwise}\end{cases}" display="inline"><mrow><mo>{</mo><mtable columnspacing="5pt" rowspacing="0pt"><mtr><mtd columnalign="left"><mrow><msub><mi>v</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub><mo>,</mo></mrow></mtd><mtd columnalign="left"><mrow><mrow><mtext>if </mtext><mo></mo><mi>x</mi></mrow><mo><</mo><mrow><msub><mi>x</mi><mtext>max</mtext></msub><mo>∧</mo><mi>y</mi></mrow><mo><</mo><msub><mi>y</mi><mtext>max</mtext></msub></mrow></mtd></mtr><mtr><mtd columnalign="left"><mrow><mn>0</mn><mo>,</mo></mrow></mtd><mtd columnalign="left"><mtext>otherwise</mtext></mtd></mtr></mtable></mrow></math></td> | 0,&\mbox{otherwise}\end{cases}' display='inline'><mrow><mo>{</mo><mtable columnspacing='5pt' rowspacing='0pt'><mtr><mtd columnalign='left'><mrow><msub><mi>v</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub><mo>,</mo></mrow></mtd><mtd columnalign='left'><mrow><mrow><mtext>if </mtext><mo></mo><mi>x</mi></mrow><mo><</mo><mrow><msub><mi>x</mi><mtext>max</mtext></msub><mo>∧</mo><mi>y</mi></mrow><mo><</mo><msub><mi>y</mi><mtext>max</mtext></msub></mrow></mtd></mtr><mtr><mtd columnalign='left'><mrow><mn>0</mn><mo>,</mo></mrow></mtd><mtd columnalign='left'><mtext>otherwise</mtext></mtd></mtr></mtable></mrow></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
</table> | </table> |
<p class="ltx_p">where <math id="Ch6.S1.p2.m2" class="ltx_Math" alttext="\forall x,y:0\leq v_{xy}\leq 255" display="inline"><mrow><mrow><mrow><mo>∀</mo><mi>x</mi></mrow><mo>,</mo><mi>y</mi></mrow><mo>:</mo><mrow><mn>0</mn><mo>≤</mo><msub><mi>v</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub><mo>≤</mo><mn>255</mn></mrow></mrow></math>. Informally speaking, the parameters | <p class='ltx_p'>where <math id='Ch6.S1.p2.m2' class='ltx_Math' alttext='\forall x,y:0\leq v_{xy}\leq 255' display='inline'><mrow><mrow><mrow><mo>∀</mo><mi>x</mi></mrow><mo>,</mo><mi>y</mi></mrow><mo>:</mo><mrow><mn>0</mn><mo>≤</mo><msub><mi>v</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub><mo>≤</mo><mn>255</mn></mrow></mrow></math>. Informally speaking, the parameters |
<math id="Ch6.S1.p2.m3" class="ltx_Math" alttext="x" display="inline"><mi>x</mi></math> and <math id="Ch6.S1.p2.m4" class="ltx_Math" alttext="y" display="inline"><mi>y</mi></math> determine the position within the image and <math id="Ch6.S1.p2.m5" class="ltx_Math" alttext="v_{xy}" display="inline"><msub><mi>v</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub></math> determines the | <math id='Ch6.S1.p2.m3' class='ltx_Math' alttext='x' display='inline'><mi>x</mi></math> and <math id='Ch6.S1.p2.m4' class='ltx_Math' alttext='y' display='inline'><mi>y</mi></math> determine the position within the image and <math id='Ch6.S1.p2.m5' class='ltx_Math' alttext='v_{xy}' display='inline'><msub><mi>v</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub></math> determines the |
gray-scale value of the <span class="ltx_text ltx_font_italic">pixel</span> at this position. | gray-scale value of the <span class='ltx_text ltx_font_italic'>pixel</span> at this position. |
</p> | </p> |
</div> | </div> |
<div id="Ch6.S1.p3" class="ltx_para"> | <div id='Ch6.S1.p3' class='ltx_para'> |
<p class="ltx_p">A common technique to modify an image is to apply a <span class="ltx_text ltx_font_italic">filter</span> of desired | <p class='ltx_p'>A common technique to modify an image is to apply a <span class='ltx_text ltx_font_italic'>filter</span> of desired |
properties to it. In many cases, an image filter <math id="Ch6.S1.p3.m1" class="ltx_Math" alttext="F" display="inline"><mi>F</mi></math> again is a two dimensional | properties to it. In many cases, an image filter <math id='Ch6.S1.p3.m1' class='ltx_Math' alttext='F' display='inline'><mi>F</mi></math> again is a two dimensional |
signal as the one described above. The application of a filter to an image is | signal as the one described above. The application of a filter to an image is |
expressed by the 2D (discrete) <span class="ltx_text ltx_font_italic">convolution</span> <math id="Ch6.S1.p3.m2" class="ltx_Math" alttext="F\otimes S" display="inline"><mrow><mi>F</mi><mo>⊗</mo><mi>S</mi></mrow></math> of these two | expressed by the 2D (discrete) <span class='ltx_text ltx_font_italic'>convolution</span> <math id='Ch6.S1.p3.m2' class='ltx_Math' alttext='F\otimes S' display='inline'><mrow><mi>F</mi><mo>⊗</mo><mi>S</mi></mrow></math> of these two |
signals:</p> | signals:</p> |
<table id="Ch10.S4.EGx2" class="ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table"> | <table id='Ch10.S4.EGx2' class='ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table'> |
| |
<tr id="Ch6.Ex3" class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr id='Ch6.Ex3' class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_td ltx_align_right ltx_eqn_cell"><math id="Ch6.Ex3.m1" class="ltx_Math" alttext="\displaystyle F(x,y)\otimes S(x,y)" display="inline"><mrow><mrow><mrow><mi>F</mi><mo></mo><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow></mrow><mo>⊗</mo><mi>S</mi></mrow><mo></mo><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow></mrow></math></td> | <td class='ltx_td ltx_align_right ltx_eqn_cell'><math id='Ch6.Ex3.m1' class='ltx_Math' alttext='\displaystyle F(x,y)\otimes S(x,y)' display='inline'><mrow><mrow><mrow><mi>F</mi><mo></mo><mrow><mo stretchy='false'>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo stretchy='false'>)</mo></mrow></mrow><mo>⊗</mo><mi>S</mi></mrow><mo></mo><mrow><mo stretchy='false'>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo stretchy='false'>)</mo></mrow></mrow></math></td> |
<td class="ltx_td ltx_align_center ltx_eqn_cell"><math id="Ch6.Ex3.m2" class="ltx_Math" alttext="\displaystyle=" display="inline"><mo>=</mo></math></td> | <td class='ltx_td ltx_align_center ltx_eqn_cell'><math id='Ch6.Ex3.m2' class='ltx_Math' alttext='\displaystyle=' display='inline'><mo>=</mo></math></td> |
<td class="ltx_td ltx_align_left ltx_eqn_cell"><math id="Ch6.Ex3.m3" class="ltx_Math" alttext="\displaystyle\sum_{j=-\infty}^{\infty}\sum_{k=-\infty}^{\infty}F(j,k)S(x-j,y-k)" display="inline"><mrow><mstyle displaystyle="true"><munderover><mo largeop="true" movablelimits="false" symmetric="true">∑</mo><mrow><mi>j</mi><mo>=</mo><mrow><mo>-</mo><mi mathvariant="normal">∞</mi></mrow></mrow><mi mathvariant="normal">∞</mi></munderover></mstyle><mrow><mstyle displaystyle="true"><munderover><mo largeop="true" movablelimits="false" symmetric="true">∑</mo><mrow><mi>k</mi><mo>=</mo><mrow><mo>-</mo><mi mathvariant="normal">∞</mi></mrow></mrow><mi mathvariant="normal">∞</mi></munderover></mstyle><mrow><mi>F</mi><mo></mo><mrow><mo stretchy="false">(</mo><mi>j</mi><mo>,</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><mo></mo><mi>S</mi><mo></mo><mrow><mo stretchy="false">(</mo><mrow><mi>x</mi><mo>-</mo><mi>j</mi></mrow><mo>,</mo><mrow><mi>y</mi><mo>-</mo><mi>k</mi></mrow><mo stretchy="false">)</mo></mrow></mrow></mrow></mrow></math></td> | <td class='ltx_td ltx_align_left ltx_eqn_cell'><math id='Ch6.Ex3.m3' class='ltx_Math' alttext='\displaystyle\sum_{j=-\infty}^{\infty}\sum_{k=-\infty}^{\infty}F(j,k)S(x-j,y-k)' display='inline'><mrow><mstyle displaystyle='true'><munderover><mo largeop='true' movablelimits='false' symmetric='true'>∑</mo><mrow><mi>j</mi><mo>=</mo><mrow><mo>-</mo><mi mathvariant='normal'>∞</mi></mrow></mrow><mi mathvariant='normal'>∞</mi></munderover></mstyle><mrow><mstyle displaystyle='true'><munderover><mo largeop='true' movablelimits='false' symmetric='true'>∑</mo><mrow><mi>k</mi><mo>=</mo><mrow><mo>-</mo><mi mathvariant='normal'>∞</mi></mrow></mrow><mi mathvariant='normal'>∞</mi></munderover></mstyle><mrow><mi>F</mi><mo></mo><mrow><mo stretchy='false'>(</mo><mi>j</mi><mo>,</mo><mi>k</mi><mo stretchy='false'>)</mo></mrow><mo></mo><mi>S</mi><mo></mo><mrow><mo stretchy='false'>(</mo><mrow><mi>x</mi><mo>-</mo><mi>j</mi></mrow><mo>,</mo><mrow><mi>y</mi><mo>-</mo><mi>k</mi></mrow><mo stretchy='false'>)</mo></mrow></mrow></mrow></mrow></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
</table> | </table> |
<p class="ltx_p">With this simple form of filtering, a wealth of image modifications are | <p class='ltx_p'>With this simple form of filtering, a wealth of image modifications are |
expressible. Depending on the choice of the filter mask we can achieve effects | expressible. Depending on the choice of the filter mask we can achieve effects |
such as smoothing, sharpening, edge detection, embossing and many more.</p> | such as smoothing, sharpening, edge detection, embossing and many more.</p> |
</div> | </div> |
<div id="Ch6.S1.p4" class="ltx_para"> | <div id='Ch6.S1.p4' class='ltx_para'> |
<p class="ltx_p">In <span class="ltx_text ltx_font_smallcaps">SaC</span> we can represent these signals as 2D arrays where <math id="Ch6.S1.p4.m1" class="ltx_Math" alttext="x" display="inline"><mi>x</mi></math> and <math id="Ch6.S1.p4.m2" class="ltx_Math" alttext="y" display="inline"><mi>y</mi></math> are the | <p class='ltx_p'>In <span class='ltx_text ltx_font_smallcaps'>SaC</span> we can represent these signals as 2D arrays where <math id='Ch6.S1.p4.m1' class='ltx_Math' alttext='x' display='inline'><mi>x</mi></math> and <math id='Ch6.S1.p4.m2' class='ltx_Math' alttext='y' display='inline'><mi>y</mi></math> are the |
column and row indices and each element corresponds to one pixel. The | column and row indices and each element corresponds to one pixel. The |
application of a filter to an image may then be expressed using a stencil | application of a filter to an image may then be expressed using a stencil |
operation as it was introduced in an earlier part of this tutorial | operation as it was introduced in an earlier part of this tutorial |
(Section <a href="#Ch2.S2" title="2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">2.2</span></a>): The filter mask is positioned with its center point over | (Section <a href='#Ch2.S2' title='2.2 Lesson 2: Shape-Invariant Programming ‣ Chapter 2 Array Programming Basics ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>2.2</span></a>): The filter mask is positioned with its center point over |
each pixel of the original image. At each position, the pixel value of the | each pixel of the original image. At each position, the pixel value of the |
image and its corresponding value of the filter mask are multiplied. The pixel | image and its corresponding value of the filter mask are multiplied. The pixel |
</p> | </p> |
</div> | </div> |
<div id="Thmtheorem29" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem29' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 29. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 29. </h6> |
<div id="Thmtheorem29.p1" class="ltx_para"> | <div id='Thmtheorem29.p1' class='ltx_para'> |
<p class="ltx_p">The <span class="ltx_text ltx_font_italic">Sobel operator</span> is an edge-detection filter that computes the | <p class='ltx_p'>The <span class='ltx_text ltx_font_italic'>Sobel operator</span> is an edge-detection filter that computes the |
gradient image from an input signal. The filtering process consists of three | gradient image from an input signal. The filtering process consists of three |
steps: In the first step, horizontal edges are detected, in the second step | steps: In the first step, horizontal edges are detected, in the second step |
combined to the resulting gradient image. The first two steps are in fact two | combined to the resulting gradient image. The first two steps are in fact two |
independent operations, each of which requires its own individual filter mask:</p> | independent operations, each of which requires its own individual filter mask:</p> |
<table id="Ch10.S4.EGx3" class="ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table"> | <table id='Ch10.S4.EGx3' class='ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table'> |
| |
<tr id="Ch6.Ex4" class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr id='Ch6.Ex4' class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_td ltx_align_right ltx_eqn_cell"><math id="Ch6.Ex4.m1" class="ltx_Math" alttext="\displaystyle F_{x}=\begin{pmatrix}1&0&-1\\ | <td class='ltx_td ltx_align_right ltx_eqn_cell'><math id='Ch6.Ex4.m1' class='ltx_Math' alttext='\displaystyle F_{x}=\begin{pmatrix}1&0&-1\\ |
2&0&-2\\ | 2&0&-2\\ |
1&0&-1\end{pmatrix}" display="inline"><mrow><msub><mi>F</mi><mi>x</mi></msub><mo>=</mo><mrow><mo>(</mo><mtable columnspacing="5pt" rowspacing="0pt"><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>0</mn></mtd><mtd columnalign="center"><mrow><mo>-</mo><mn>1</mn></mrow></mtd></mtr><mtr><mtd columnalign="center"><mn>2</mn></mtd><mtd columnalign="center"><mn>0</mn></mtd><mtd columnalign="center"><mrow><mo>-</mo><mn>2</mn></mrow></mtd></mtr><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>0</mn></mtd><mtd columnalign="center"><mrow><mo>-</mo><mn>1</mn></mrow></mtd></mtr></mtable><mo>)</mo></mrow></mrow></math></td> | 1&0&-1\end{pmatrix}' display='inline'><mrow><msub><mi>F</mi><mi>x</mi></msub><mo>=</mo><mrow><mo>(</mo><mtable columnspacing='5pt' rowspacing='0pt'><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>0</mn></mtd><mtd columnalign='center'><mrow><mo>-</mo><mn>1</mn></mrow></mtd></mtr><mtr><mtd columnalign='center'><mn>2</mn></mtd><mtd columnalign='center'><mn>0</mn></mtd><mtd columnalign='center'><mrow><mo>-</mo><mn>2</mn></mrow></mtd></mtr><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>0</mn></mtd><mtd columnalign='center'><mrow><mo>-</mo><mn>1</mn></mrow></mtd></mtr></mtable><mo>)</mo></mrow></mrow></math></td> |
<td class="ltx_td ltx_align_center ltx_eqn_cell"></td> | <td class='ltx_td ltx_align_center ltx_eqn_cell'></td> |
<td class="ltx_td ltx_align_left ltx_eqn_cell"><math id="Ch6.Ex4.m3" class="ltx_Math" alttext="\displaystyle F_{y}=\begin{pmatrix}1&2&1\\ | <td class='ltx_td ltx_align_left ltx_eqn_cell'><math id='Ch6.Ex4.m3' class='ltx_Math' alttext='\displaystyle F_{y}=\begin{pmatrix}1&2&1\\ |
0&0&0\\ | 0&0&0\\ |
-1&-2&-1\end{pmatrix}" display="inline"><mrow><msub><mi>F</mi><mi>y</mi></msub><mo>=</mo><mrow><mo>(</mo><mtable columnspacing="5pt" rowspacing="0pt"><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>2</mn></mtd><mtd columnalign="center"><mn>1</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>0</mn></mtd><mtd columnalign="center"><mn>0</mn></mtd><mtd columnalign="center"><mn>0</mn></mtd></mtr><mtr><mtd columnalign="center"><mrow><mo>-</mo><mn>1</mn></mrow></mtd><mtd columnalign="center"><mrow><mo>-</mo><mn>2</mn></mrow></mtd><mtd columnalign="center"><mrow><mo>-</mo><mn>1</mn></mrow></mtd></mtr></mtable><mo>)</mo></mrow></mrow></math></td> | -1&-2&-1\end{pmatrix}' display='inline'><mrow><msub><mi>F</mi><mi>y</mi></msub><mo>=</mo><mrow><mo>(</mo><mtable columnspacing='5pt' rowspacing='0pt'><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>2</mn></mtd><mtd columnalign='center'><mn>1</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>0</mn></mtd><mtd columnalign='center'><mn>0</mn></mtd><mtd columnalign='center'><mn>0</mn></mtd></mtr><mtr><mtd columnalign='center'><mrow><mo>-</mo><mn>1</mn></mrow></mtd><mtd columnalign='center'><mrow><mo>-</mo><mn>2</mn></mrow></mtd><mtd columnalign='center'><mrow><mo>-</mo><mn>1</mn></mrow></mtd></mtr></mtable><mo>)</mo></mrow></mrow></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
</table> | </table> |
<p class="ltx_p">Applying these two masks to an input image <math id="Thmtheorem29.p1.m1" class="ltx_Math" alttext="S" display="inline"><mi>S</mi></math> yields two sub-results, one | <p class='ltx_p'>Applying these two masks to an input image <math id='Thmtheorem29.p1.m1' class='ltx_Math' alttext='S' display='inline'><mi>S</mi></math> yields two sub-results, one |
highlighting horizontal edges (<math id="Thmtheorem29.p1.m2" class="ltx_Math" alttext="S_{x}=F_{x}\otimes S" display="inline"><mrow><msub><mi>S</mi><mi>x</mi></msub><mo>=</mo><mrow><msub><mi>F</mi><mi>x</mi></msub><mo>⊗</mo><mi>S</mi></mrow></mrow></math>), the other highlighting | highlighting horizontal edges (<math id='Thmtheorem29.p1.m2' class='ltx_Math' alttext='S_{x}=F_{x}\otimes S' display='inline'><mrow><msub><mi>S</mi><mi>x</mi></msub><mo>=</mo><mrow><msub><mi>F</mi><mi>x</mi></msub><mo>⊗</mo><mi>S</mi></mrow></mrow></math>), the other highlighting |
vertical edges (<math id="Thmtheorem29.p1.m3" class="ltx_Math" alttext="S_{y}=F_{y}\otimes S" display="inline"><mrow><msub><mi>S</mi><mi>y</mi></msub><mo>=</mo><mrow><msub><mi>F</mi><mi>y</mi></msub><mo>⊗</mo><mi>S</mi></mrow></mrow></math>). We compute the final gradient image by | vertical edges (<math id='Thmtheorem29.p1.m3' class='ltx_Math' alttext='S_{y}=F_{y}\otimes S' display='inline'><mrow><msub><mi>S</mi><mi>y</mi></msub><mo>=</mo><mrow><msub><mi>F</mi><mi>y</mi></msub><mo>⊗</mo><mi>S</mi></mrow></mrow></math>). We compute the final gradient image by |
adding the two sub-results <math id="Thmtheorem29.p1.m4" class="ltx_Math" alttext="S_{xy}=S_{x}+S_{y}" display="inline"><mrow><msub><mi>S</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub><mo>=</mo><mrow><msub><mi>S</mi><mi>x</mi></msub><mo>+</mo><msub><mi>S</mi><mi>y</mi></msub></mrow></mrow></math>. As <math id="Thmtheorem29.p1.m5" class="ltx_Math" alttext="S_{xy}" display="inline"><msub><mi>S</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub></math> may contain | adding the two sub-results <math id='Thmtheorem29.p1.m4' class='ltx_Math' alttext='S_{xy}=S_{x}+S_{y}' display='inline'><mrow><msub><mi>S</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub><mo>=</mo><mrow><msub><mi>S</mi><mi>x</mi></msub><mo>+</mo><msub><mi>S</mi><mi>y</mi></msub></mrow></mrow></math>. As <math id='Thmtheorem29.p1.m5' class='ltx_Math' alttext='S_{xy}' display='inline'><msub><mi>S</mi><mrow><mi>x</mi><mo></mo><mi>y</mi></mrow></msub></math> may contain |
elements with a value greater than <math id="Thmtheorem29.p1.m6" class="ltx_Math" alttext="255" display="inline"><mn>255</mn></math>, we need to cap each pixel value at | elements with a value greater than <math id='Thmtheorem29.p1.m6' class='ltx_Math' alttext='255' display='inline'><mn>255</mn></math>, we need to cap each pixel value at |
the maximum allowed value of <math id="Thmtheorem29.p1.m7" class="ltx_Math" alttext="255" display="inline"><mn>255</mn></math>. See Fig. <a href="#Ch6.F1" title="Figure 6.1 ‣ 6.1 Lesson 7: Image Processing ‣ Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC" class="ltx_ref"><span class="ltx_text ltx_ref_tag">6.1</span></a> for an example of | the maximum allowed value of <math id='Thmtheorem29.p1.m7' class='ltx_Math' alttext='255' display='inline'><mn>255</mn></math>. See Fig. <a href='#Ch6.F1' title='Figure 6.1 ‣ 6.1 Lesson 7: Image Processing ‣ Chapter 6 Case Studies ‣ Part I Trails Covering the Basics of SaC' class='ltx_ref'><span class='ltx_text ltx_ref_tag'>6.1</span></a> for an example of |
how an image and its gradient image may look like.</p> | how an image and its gradient image may look like.</p> |
</div> | </div> |
<div id="Thmtheorem29.p2" class="ltx_para"> | <div id='Thmtheorem29.p2' class='ltx_para'> |
<p class="ltx_p">Quite the opposite to edge detection, a smoothing or blurring filter is used to | <p class='ltx_p'>Quite the opposite to edge detection, a smoothing or blurring filter is used to |
make edges appear less prominent. Commonly applied filters of such kind | make edges appear less prominent. Commonly applied filters of such kind |
are the <math id="Thmtheorem29.p2.m1" class="ltx_Math" alttext="3\times 3" display="inline"><mrow><mn>3</mn><mo>×</mo><mn>3</mn></mrow></math> and <math id="Thmtheorem29.p2.m2" class="ltx_Math" alttext="25\times 25" display="inline"><mrow><mn>25</mn><mo>×</mo><mn>25</mn></mrow></math> <span class="ltx_text ltx_font_italic">Gaussian blurring</span> stencils:</p> | are the <math id='Thmtheorem29.p2.m1' class='ltx_Math' alttext='3\times 3' display='inline'><mrow><mn>3</mn><mo>×</mo><mn>3</mn></mrow></math> and <math id='Thmtheorem29.p2.m2' class='ltx_Math' alttext='25\times 25' display='inline'><mrow><mn>25</mn><mo>×</mo><mn>25</mn></mrow></math> <span class='ltx_text ltx_font_italic'>Gaussian blurring</span> stencils:</p> |
<table id="Ch10.S4.EGx4" class="ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table"> | <table id='Ch10.S4.EGx4' class='ltx_equationgroup ltx_eqn_eqnarray ltx_eqn_table'> |
| |
<tr id="Ch6.Ex5" class="ltx_equation ltx_eqn_row ltx_align_baseline"> | <tr id='Ch6.Ex5' class='ltx_equation ltx_eqn_row ltx_align_baseline'> |
<td class="ltx_eqn_cell ltx_eqn_center_padleft"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padleft'></td> |
<td class="ltx_td ltx_align_right ltx_eqn_cell"><math id="Ch6.Ex5.m1" class="ltx_Math" alttext="\displaystyle G_{9}=\frac{1}{15}\cdot\begin{pmatrix}1&2&1\\ | <td class='ltx_td ltx_align_right ltx_eqn_cell'><math id='Ch6.Ex5.m1' class='ltx_Math' alttext='\displaystyle G_{9}=\frac{1}{15}\cdot\begin{pmatrix}1&2&1\\ |
2&3&2\\ | 2&3&2\\ |
1&2&1\par | 1&2&1\par |
\end{pmatrix}" display="inline"><mrow><msub><mi>G</mi><mn>9</mn></msub><mo>=</mo><mrow><mstyle displaystyle="true"><mfrac><mn>1</mn><mn>15</mn></mfrac></mstyle><mo>⋅</mo><mrow><mo>(</mo><mtable columnspacing="5pt" rowspacing="0pt"><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>2</mn></mtd><mtd columnalign="center"><mn>1</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>2</mn></mtd><mtd columnalign="center"><mn>3</mn></mtd><mtd columnalign="center"><mn>2</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>2</mn></mtd><mtd columnalign="center"><mn>1</mn></mtd></mtr></mtable><mo>)</mo></mrow></mrow></mrow></math></td> | \end{pmatrix}' display='inline'><mrow><msub><mi>G</mi><mn>9</mn></msub><mo>=</mo><mrow><mstyle displaystyle='true'><mfrac><mn>1</mn><mn>15</mn></mfrac></mstyle><mo>⋅</mo><mrow><mo>(</mo><mtable columnspacing='5pt' rowspacing='0pt'><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>2</mn></mtd><mtd columnalign='center'><mn>1</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>2</mn></mtd><mtd columnalign='center'><mn>3</mn></mtd><mtd columnalign='center'><mn>2</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>2</mn></mtd><mtd columnalign='center'><mn>1</mn></mtd></mtr></mtable><mo>)</mo></mrow></mrow></mrow></math></td> |
<td class="ltx_td ltx_align_center ltx_eqn_cell"></td> | <td class='ltx_td ltx_align_center ltx_eqn_cell'></td> |
<td class="ltx_td ltx_align_left ltx_eqn_cell"><math id="Ch6.Ex5.m3" class="ltx_Math" alttext="\displaystyle G_{25}=\frac{1}{331}\begin{pmatrix}1&4&7&4&1\\ | <td class='ltx_td ltx_align_left ltx_eqn_cell'><math id='Ch6.Ex5.m3' class='ltx_Math' alttext='\displaystyle G_{25}=\frac{1}{331}\begin{pmatrix}1&4&7&4&1\\ |
4&20&33&20&4\\ | 4&20&33&20&4\\ |
7&33&55&33&7\\ | 7&33&55&33&7\\ |
4&20&33&20&4\\ | 4&20&33&20&4\\ |
1&4&7&4&1\end{pmatrix}" display="inline"><mrow><msub><mi>G</mi><mn>25</mn></msub><mo>=</mo><mrow><mstyle displaystyle="true"><mfrac><mn>1</mn><mn>331</mn></mfrac></mstyle><mo></mo><mrow><mo>(</mo><mtable columnspacing="5pt" rowspacing="0pt"><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>4</mn></mtd><mtd columnalign="center"><mn>7</mn></mtd><mtd columnalign="center"><mn>4</mn></mtd><mtd columnalign="center"><mn>1</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>4</mn></mtd><mtd columnalign="center"><mn>20</mn></mtd><mtd columnalign="center"><mn>33</mn></mtd><mtd columnalign="center"><mn>20</mn></mtd><mtd columnalign="center"><mn>4</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>7</mn></mtd><mtd columnalign="center"><mn>33</mn></mtd><mtd columnalign="center"><mn>55</mn></mtd><mtd columnalign="center"><mn>33</mn></mtd><mtd columnalign="center"><mn>7</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>4</mn></mtd><mtd columnalign="center"><mn>20</mn></mtd><mtd columnalign="center"><mn>33</mn></mtd><mtd columnalign="center"><mn>20</mn></mtd><mtd columnalign="center"><mn>4</mn></mtd></mtr><mtr><mtd columnalign="center"><mn>1</mn></mtd><mtd columnalign="center"><mn>4</mn></mtd><mtd columnalign="center"><mn>7</mn></mtd><mtd columnalign="center"><mn>4</mn></mtd><mtd columnalign="center"><mn>1</mn></mtd></mtr></mtable><mo>)</mo></mrow></mrow></mrow></math></td> | 1&4&7&4&1\end{pmatrix}' display='inline'><mrow><msub><mi>G</mi><mn>25</mn></msub><mo>=</mo><mrow><mstyle displaystyle='true'><mfrac><mn>1</mn><mn>331</mn></mfrac></mstyle><mo></mo><mrow><mo>(</mo><mtable columnspacing='5pt' rowspacing='0pt'><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>4</mn></mtd><mtd columnalign='center'><mn>7</mn></mtd><mtd columnalign='center'><mn>4</mn></mtd><mtd columnalign='center'><mn>1</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>4</mn></mtd><mtd columnalign='center'><mn>20</mn></mtd><mtd columnalign='center'><mn>33</mn></mtd><mtd columnalign='center'><mn>20</mn></mtd><mtd columnalign='center'><mn>4</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>7</mn></mtd><mtd columnalign='center'><mn>33</mn></mtd><mtd columnalign='center'><mn>55</mn></mtd><mtd columnalign='center'><mn>33</mn></mtd><mtd columnalign='center'><mn>7</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>4</mn></mtd><mtd columnalign='center'><mn>20</mn></mtd><mtd columnalign='center'><mn>33</mn></mtd><mtd columnalign='center'><mn>20</mn></mtd><mtd columnalign='center'><mn>4</mn></mtd></mtr><mtr><mtd columnalign='center'><mn>1</mn></mtd><mtd columnalign='center'><mn>4</mn></mtd><mtd columnalign='center'><mn>7</mn></mtd><mtd columnalign='center'><mn>4</mn></mtd><mtd columnalign='center'><mn>1</mn></mtd></mtr></mtable><mo>)</mo></mrow></mrow></mrow></math></td> |
<td class="ltx_eqn_cell ltx_eqn_center_padright"></td> | <td class='ltx_eqn_cell ltx_eqn_center_padright'></td> |
</tr> | </tr> |
</table> | </table> |
</div> | </div> |
<div id="Thmtheorem29.p3" class="ltx_para"> | <div id='Thmtheorem29.p3' class='ltx_para'> |
<p class="ltx_p">Write a program that applies these operators to a given image and outputs | <p class='ltx_p'>Write a program that applies these operators to a given image and outputs |
the result for later use:</p> | the result for later use:</p> |
<ul id="Ch6.I1" class="ltx_itemize"> | <ul id='Ch6.I1' class='ltx_itemize'> |
<li id="Ch6.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch6.I1.i1.p1" class="ltx_para"> | <div id='Ch6.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p">Write a function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">apply</span> that takes an image and a filter mask | <p class='ltx_p'>Write a function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>apply</span> that takes an image and a filter mask |
as input and returns the convolution of the two. Use either with-loops | as input and returns the convolution of the two. Use either with-loops |
or axis-control notation to achieve this. Take care of boundary | or axis-control notation to achieve this. Take care of boundary |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch6.I1.i2.p1" class="ltx_para"> | <div id='Ch6.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p">Write a function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sobel</span> that takes an image as input and | <p class='ltx_p'>Write a function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sobel</span> that takes an image as input and |
applies <math id="Ch6.I1.i2.p1.m1" class="ltx_Math" alttext="F_{x}" display="inline"><msub><mi>F</mi><mi>x</mi></msub></math> and <math id="Ch6.I1.i2.p1.m2" class="ltx_Math" alttext="F_{y}" display="inline"><msub><mi>F</mi><mi>y</mi></msub></math> to the image. Furthermore, add <math id="Ch6.I1.i2.p1.m3" class="ltx_Math" alttext="S_{x}" display="inline"><msub><mi>S</mi><mi>x</mi></msub></math> and <math id="Ch6.I1.i2.p1.m4" class="ltx_Math" alttext="S_{y}" display="inline"><msub><mi>S</mi><mi>y</mi></msub></math> | applies <math id='Ch6.I1.i2.p1.m1' class='ltx_Math' alttext='F_{x}' display='inline'><msub><mi>F</mi><mi>x</mi></msub></math> and <math id='Ch6.I1.i2.p1.m2' class='ltx_Math' alttext='F_{y}' display='inline'><msub><mi>F</mi><mi>y</mi></msub></math> to the image. Furthermore, add <math id='Ch6.I1.i2.p1.m3' class='ltx_Math' alttext='S_{x}' display='inline'><msub><mi>S</mi><mi>x</mi></msub></math> and <math id='Ch6.I1.i2.p1.m4' class='ltx_Math' alttext='S_{y}' display='inline'><msub><mi>S</mi><mi>y</mi></msub></math> |
with capping so that this function returns the final result of the Sobel | with capping so that this function returns the final result of the Sobel |
operation.</p> | operation.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I1.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I1.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch6.I1.i3.p1" class="ltx_para"> | <div id='Ch6.I1.i3.p1' class='ltx_para'> |
<p class="ltx_p">Write functions <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">gauss9</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">gauss25</span> that take an | <p class='ltx_p'>Write functions <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>gauss9</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>gauss25</span> that take an |
image as input and apply <math id="Ch6.I1.i3.p1.m1" class="ltx_Math" alttext="G_{9}" display="inline"><msub><mi>G</mi><mn>9</mn></msub></math> and <math id="Ch6.I1.i3.p1.m2" class="ltx_Math" alttext="G_{25}" display="inline"><msub><mi>G</mi><mn>25</mn></msub></math> to the image.</p> | image as input and apply <math id='Ch6.I1.i3.p1.m1' class='ltx_Math' alttext='G_{9}' display='inline'><msub><mi>G</mi><mn>9</mn></msub></math> and <math id='Ch6.I1.i3.p1.m2' class='ltx_Math' alttext='G_{25}' display='inline'><msub><mi>G</mi><mn>25</mn></msub></math> to the image.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I1.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I1.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize">•</span> | <span class='ltx_tag ltx_tag_itemize'>•</span> |
<div id="Ch6.I1.i4.p1" class="ltx_para"> | <div id='Ch6.I1.i4.p1' class='ltx_para'> |
<p class="ltx_p">Write a <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span> function that reads in an image from | <p class='ltx_p'>Write a <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span> function that reads in an image from |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">stdin</span>, calls <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sobel</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">gaussBlur9</span> and | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>stdin</span>, calls <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sobel</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>gaussBlur9</span> and |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">gaussBlur25</span> on this image and then write the results back to | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>gaussBlur25</span> on this image and then write the results back to |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">stdout</span>.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>stdout</span>.</p> |
</div> | </div> |
</li> | </li> |
</ul> | </ul> |
<p class="ltx_p">You may want to use the following skeleton for your program:</p> | <p class='ltx_p'>You may want to use the following skeleton for your program:</p> |
</div> | </div> |
<figure id="LST43" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST43' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 43: </span>Skeleton of sobel.sac</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 43: </span>Skeleton of sobel.sac</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFN0cnVjdHVyZXM6IGFsbDsKdXNlIFN0ZElPOiBhbGw7CnVzZSBDbG9jazoge3RpbWUsIGdl%0AdHRpbWUsIGRpZmZ0aW1lfTsKCi8qIEhlbHBlciB0byB3cml0ZSBtYXRyaXggdG8gc3Rkb3V0IGlu%0AIHBsYWluIG1hdHJpeCBmb3JtYXQuCiAgIFRoZSBwcm9kdWNlZCBvdXRwdXQgKGxldCdzIHNheSBt%0ALmRhdCkgY2FuIGJlIHVzZWQgd2l0aCBnbnVwbG90CiAgIGxpa2Ugc286CiAgICAgICAgZ251cGxv%0AdD4gcGxvdCAibS5kYXQiIG1hdHJpeCB3aXRoIGltYWdlICAqLwp2b2lkIHdyaXRlTWF0cml4KCBp%0AbnRbLiwuXSBtKQp7CiAgZm9yICh5PTA7IHk8c2hhcGUobSlbMV07IHkrKykgewogICAgZm9yICh4%0APTA7IHg8c2hhcGUobSlbMF07IHgrKykgewogICAgICBwcmludGYoIiVkICIsIG1bW3gseV1dKTsK%0AICAgIH0KICAgIHByaW50ZigiXG4iKTsKICB9Cn0KCi8qIENvbnZvbHV0aW9uIHdpdGggZ2l2ZW4g%0AbWFzay4gICovCmlubGluZSBpbnRbLiwuXSBhcHBseShpbnRbLiwuXSBtYXNrLCBpbnRbLiwuXSBp%0AbWcpCnsKICAvKiBJbXBsZW1lbnQgY29udm9sdXRpb24gaGVyZS4gICovCn0KCmludFsuLC5dIHNv%0AYmVsKGludFsuLC5dIGltZykKewogIFNZID0gWwogICAgICAgICBbMSwgMiwgMV0sIFswLCAwLCAw%0AXSwgWy0xLCAtMiwgLTFdCiAgICAgICBdOwogIC8qIENvbXBsZXRlIHRoaXMgZnVuY3Rpb24gaGVy%0AZS4gICovCn0KCmludFsuLC5dIGdhdXNzQmx1cjkoaW50Wy4sLl0gaW1nKQp7CiAgLyogQ29tcGxl%0AdGUgdGhpcyBmdW5jdGlvbiBoZXJlLiAgKi8KfQoKaW50Wy4sLl0gZ2F1c3NCbHVyMjUoaW50Wy4s%0ALl0gaW1nKQp7CiAgLyogQ29tcGxldGUgdGhpcyBmdW5jdGlvbiBoZXJlLiAgKi8KfQoKaW50Wypd%0ALCB0aW1lIHRpbWVzdGFtcChpbnRbKl0gaW1nKQp7CiAgcmV0dXJuIChpbWcsIGdldHRpbWUoKSk7%0ACn0KCmludCBtYWluKCkKewogIGZwcmludGYoc3RkZXJyLCAiXG5SZWFkaW5nIGltYWdlIGluIEZp%0AYnJlIGZvcm1hdC4uLlxuIik7CiAgaW1nID0gRmlicmVTY2FuSW50QXJyYXkoc3RkaW4pOwoKICBm%0AcHJpbnRmKHN0ZGVyciwgIlxuQXBwbHlpbmcgZmlsdGVyIC4uLlxuIik7CiAgaW1nLCBzdGFydCA9%0AIHRpbWVzdGFtcChpbWcpOwogIGltZyA9IHNvYmVsKGltZyk7CiAgaW1nLCBlbmQgPSB0aW1lc3Rh%0AbXAoaW1nKTsKCiAgLyogQ2FsbCB0aGUgb3RoZXIgZmlsdGVycyBoZXJlLiAgKi8KCiAgZnByaW50%0AZihzdGRlcnIsICJcbkZpbmlzaGVkIGZpbHRlcmluZyBhZnRlciAlZnNcbiIsIGRpZmZ0aW1lKGVu%0AZCwgc3RhcnQpKTsKICBmcHJpbnRmKHN0ZGVyciwgIlxuV3JpdGluZyByZXN1bHQgaW1hZ2UgLi4u%0AXG4iKTsKICB3cml0ZU1hdHJpeChpbWcpOwoKICByZXR1cm4gMDsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFN0cnVjdHVyZXM6IGFsbDsKdXNlIFN0ZElPOiBhbGw7CnVzZSBDbG9jazoge3RpbWUsIGdl%0AdHRpbWUsIGRpZmZ0aW1lfTsKCi8qIEhlbHBlciB0byB3cml0ZSBtYXRyaXggdG8gc3Rkb3V0IGlu%0AIHBsYWluIG1hdHJpeCBmb3JtYXQuCiAgIFRoZSBwcm9kdWNlZCBvdXRwdXQgKGxldCdzIHNheSBt%0ALmRhdCkgY2FuIGJlIHVzZWQgd2l0aCBnbnVwbG90CiAgIGxpa2Ugc286CiAgICAgICAgZ251cGxv%0AdD4gcGxvdCAibS5kYXQiIG1hdHJpeCB3aXRoIGltYWdlICAqLwp2b2lkIHdyaXRlTWF0cml4KCBp%0AbnRbLiwuXSBtKQp7CiAgZm9yICh5PTA7IHk8c2hhcGUobSlbMV07IHkrKykgewogICAgZm9yICh4%0APTA7IHg8c2hhcGUobSlbMF07IHgrKykgewogICAgICBwcmludGYoIiVkICIsIG1bW3gseV1dKTsK%0AICAgIH0KICAgIHByaW50ZigiXG4iKTsKICB9Cn0KCi8qIENvbnZvbHV0aW9uIHdpdGggZ2l2ZW4g%0AbWFzay4gICovCmlubGluZSBpbnRbLiwuXSBhcHBseShpbnRbLiwuXSBtYXNrLCBpbnRbLiwuXSBp%0AbWcpCnsKICAvKiBJbXBsZW1lbnQgY29udm9sdXRpb24gaGVyZS4gICovCn0KCmludFsuLC5dIHNv%0AYmVsKGludFsuLC5dIGltZykKewogIFNZID0gWwogICAgICAgICBbMSwgMiwgMV0sIFswLCAwLCAw%0AXSwgWy0xLCAtMiwgLTFdCiAgICAgICBdOwogIC8qIENvbXBsZXRlIHRoaXMgZnVuY3Rpb24gaGVy%0AZS4gICovCn0KCmludFsuLC5dIGdhdXNzQmx1cjkoaW50Wy4sLl0gaW1nKQp7CiAgLyogQ29tcGxl%0AdGUgdGhpcyBmdW5jdGlvbiBoZXJlLiAgKi8KfQoKaW50Wy4sLl0gZ2F1c3NCbHVyMjUoaW50Wy4s%0ALl0gaW1nKQp7CiAgLyogQ29tcGxldGUgdGhpcyBmdW5jdGlvbiBoZXJlLiAgKi8KfQoKaW50Wypd%0ALCB0aW1lIHRpbWVzdGFtcChpbnRbKl0gaW1nKQp7CiAgcmV0dXJuIChpbWcsIGdldHRpbWUoKSk7%0ACn0KCmludCBtYWluKCkKewogIGZwcmludGYoc3RkZXJyLCAiXG5SZWFkaW5nIGltYWdlIGluIEZp%0AYnJlIGZvcm1hdC4uLlxuIik7CiAgaW1nID0gRmlicmVTY2FuSW50QXJyYXkoc3RkaW4pOwoKICBm%0AcHJpbnRmKHN0ZGVyciwgIlxuQXBwbHlpbmcgZmlsdGVyIC4uLlxuIik7CiAgaW1nLCBzdGFydCA9%0AIHRpbWVzdGFtcChpbWcpOwogIGltZyA9IHNvYmVsKGltZyk7CiAgaW1nLCBlbmQgPSB0aW1lc3Rh%0AbXAoaW1nKTsKCiAgLyogQ2FsbCB0aGUgb3RoZXIgZmlsdGVycyBoZXJlLiAgKi8KCiAgZnByaW50%0AZihzdGRlcnIsICJcbkZpbmlzaGVkIGZpbHRlcmluZyBhZnRlciAlZnNcbiIsIGRpZmZ0aW1lKGVu%0AZCwgc3RhcnQpKTsKICBmcHJpbnRmKHN0ZGVyciwgIlxuV3JpdGluZyByZXN1bHQgaW1hZ2UgLi4u%0AXG4iKTsKICB3cml0ZU1hdHJpeChpbWcpOwoKICByZXR1cm4gMDsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Structures</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Structures</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Clock</span>:<span class="ltx_text ltx_lst_space"> </span>{<span class="ltx_text ltx_lst_identifier">time</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">gettime</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">difftime</span>}; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Clock</span>:<span class='ltx_text ltx_lst_space'> </span>{<span class='ltx_text ltx_lst_identifier'>time</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>gettime</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>difftime</span>}; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Helper<span class="ltx_text ltx_lst_space"> </span>to<span class="ltx_text ltx_lst_space"> </span>write<span class="ltx_text ltx_lst_space"> </span>matrix<span class="ltx_text ltx_lst_space"> </span>to<span class="ltx_text ltx_lst_space"> </span>stdout<span class="ltx_text ltx_lst_space"> </span>in<span class="ltx_text ltx_lst_space"> </span>plain<span class="ltx_text ltx_lst_space"> </span>matrix<span class="ltx_text ltx_lst_space"> </span>format.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Helper<span class='ltx_text ltx_lst_space'> </span>to<span class='ltx_text ltx_lst_space'> </span>write<span class='ltx_text ltx_lst_space'> </span>matrix<span class='ltx_text ltx_lst_space'> </span>to<span class='ltx_text ltx_lst_space'> </span>stdout<span class='ltx_text ltx_lst_space'> </span>in<span class='ltx_text ltx_lst_space'> </span>plain<span class='ltx_text ltx_lst_space'> </span>matrix<span class='ltx_text ltx_lst_space'> </span>format.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">The</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">produced</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">output</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">(let’s</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">say</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">m.dat)</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">can</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">used</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">with</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">gnuplot</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>The</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>produced</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>output</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>(let’s</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>say</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>m.dat)</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>can</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>used</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>with</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>gnuplot</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">like</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">so:</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>like</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>so:</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">gnuplot></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">plot</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">”m.dat”</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">matrix</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">with</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">image</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>gnuplot></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>plot</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>”m.dat”</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>matrix</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>with</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>image</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">writeMatrix</span>(<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">m</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>writeMatrix</span>(<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>m</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">for</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">y</span>=0;<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span><<span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">m</span>)[1];<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>++)<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>for</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>y</span>=0;<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span><<span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>m</span>)[1];<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>++)<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">for</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">x</span>=0;<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span><<span class="ltx_text ltx_lst_identifier">shape</span>(<span class="ltx_text ltx_lst_identifier">m</span>)[0];<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>++)<span class="ltx_text ltx_lst_space"> </span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>for</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>x</span>=0;<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span><<span class='ltx_text ltx_lst_identifier'>shape</span>(<span class='ltx_text ltx_lst_identifier'>m</span>)[0];<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>++)<span class='ltx_text ltx_lst_space'> </span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”%d<span class="ltx_text ltx_lst_space"> </span>”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">m</span>[[<span class="ltx_text ltx_lst_identifier">x</span>,<span class="ltx_text ltx_lst_identifier">y</span>]]); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”%d<span class='ltx_text ltx_lst_space'> </span>”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>m</span>[[<span class='ltx_text ltx_lst_identifier'>x</span>,<span class='ltx_text ltx_lst_identifier'>y</span>]]); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Convolution<span class="ltx_text ltx_lst_space"> </span>with<span class="ltx_text ltx_lst_space"> </span>given<span class="ltx_text ltx_lst_space"> </span>mask.<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Convolution<span class='ltx_text ltx_lst_space'> </span>with<span class='ltx_text ltx_lst_space'> </span>given<span class='ltx_text ltx_lst_space'> </span>mask.<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_identifier">inline</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">apply</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">mask</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_identifier'>inline</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>apply</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>mask</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Implement<span class="ltx_text ltx_lst_space"> </span>convolution<span class="ltx_text ltx_lst_space"> </span>here.<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Implement<span class='ltx_text ltx_lst_space'> </span>convolution<span class='ltx_text ltx_lst_space'> </span>here.<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">24</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>24</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sobel</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sobel</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">26</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>26</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">SY</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>[ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>SY</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>[ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span><span class="ltx_text ltx_lst_space"> </span>[1,<span class="ltx_text ltx_lst_space"> </span>2,<span class="ltx_text ltx_lst_space"> </span>1],<span class="ltx_text ltx_lst_space"> </span>[0,<span class="ltx_text ltx_lst_space"> </span>0,<span class="ltx_text ltx_lst_space"> </span>0],<span class="ltx_text ltx_lst_space"> </span>[-1,<span class="ltx_text ltx_lst_space"> </span>-2,<span class="ltx_text ltx_lst_space"> </span>-1] | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span><span class='ltx_text ltx_lst_space'> </span>[1,<span class='ltx_text ltx_lst_space'> </span>2,<span class='ltx_text ltx_lst_space'> </span>1],<span class='ltx_text ltx_lst_space'> </span>[0,<span class='ltx_text ltx_lst_space'> </span>0,<span class='ltx_text ltx_lst_space'> </span>0],<span class='ltx_text ltx_lst_space'> </span>[-1,<span class='ltx_text ltx_lst_space'> </span>-2,<span class='ltx_text ltx_lst_space'> </span>-1] |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span><span class="ltx_text ltx_lst_space"> </span>]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span><span class='ltx_text ltx_lst_space'> </span>]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">30</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Complete<span class="ltx_text ltx_lst_space"> </span>this<span class="ltx_text ltx_lst_space"> </span>function<span class="ltx_text ltx_lst_space"> </span>here.<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>30</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Complete<span class='ltx_text ltx_lst_space'> </span>this<span class='ltx_text ltx_lst_space'> </span>function<span class='ltx_text ltx_lst_space'> </span>here.<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">31</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>31</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">32</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>32</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">33</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">gaussBlur9</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>33</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>gaussBlur9</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">34</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>34</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">35</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Complete<span class="ltx_text ltx_lst_space"> </span>this<span class="ltx_text ltx_lst_space"> </span>function<span class="ltx_text ltx_lst_space"> </span>here.<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>35</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Complete<span class='ltx_text ltx_lst_space'> </span>this<span class='ltx_text ltx_lst_space'> </span>function<span class='ltx_text ltx_lst_space'> </span>here.<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">36</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>36</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">37</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>37</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">38</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">gaussBlur25</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[.,.]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>38</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>gaussBlur25</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[.,.]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">39</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>39</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">40</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Complete<span class="ltx_text ltx_lst_space"> </span>this<span class="ltx_text ltx_lst_space"> </span>function<span class="ltx_text ltx_lst_space"> </span>here.<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>40</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Complete<span class='ltx_text ltx_lst_space'> </span>this<span class='ltx_text ltx_lst_space'> </span>function<span class='ltx_text ltx_lst_space'> </span>here.<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">41</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>41</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">42</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>42</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">43</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*],<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">time</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">timestamp</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[*]<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>43</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*],<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>time</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>timestamp</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[*]<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">44</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>44</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">45</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">img</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">gettime</span>()); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>45</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>img</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>gettime</span>()); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">46</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>46</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">47</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>47</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">48</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>48</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">49</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>49</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">50</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fprintf</span>(<span class="ltx_text ltx_lst_identifier">stderr</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”\nReading<span class="ltx_text ltx_lst_space"> </span>image<span class="ltx_text ltx_lst_space"> </span>in<span class="ltx_text ltx_lst_space"> </span>Fibre<span class="ltx_text ltx_lst_space"> </span>format…\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>50</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fprintf</span>(<span class='ltx_text ltx_lst_identifier'>stderr</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”\nReading<span class='ltx_text ltx_lst_space'> </span>image<span class='ltx_text ltx_lst_space'> </span>in<span class='ltx_text ltx_lst_space'> </span>Fibre<span class='ltx_text ltx_lst_space'> </span>format…\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">51</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">FibreScanIntArray</span>(<span class="ltx_text ltx_lst_identifier">stdin</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>51</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>FibreScanIntArray</span>(<span class='ltx_text ltx_lst_identifier'>stdin</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">52</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>52</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">53</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fprintf</span>(<span class="ltx_text ltx_lst_identifier">stderr</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”\nApplying<span class="ltx_text ltx_lst_space"> </span>filter<span class="ltx_text ltx_lst_space"> </span>…\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>53</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fprintf</span>(<span class='ltx_text ltx_lst_identifier'>stderr</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”\nApplying<span class='ltx_text ltx_lst_space'> </span>filter<span class='ltx_text ltx_lst_space'> </span>…\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">54</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">start</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">timestamp</span>(<span class="ltx_text ltx_lst_identifier">img</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>54</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>start</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>timestamp</span>(<span class='ltx_text ltx_lst_identifier'>img</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">55</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">sobel</span>(<span class="ltx_text ltx_lst_identifier">img</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>55</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>sobel</span>(<span class='ltx_text ltx_lst_identifier'>img</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">56</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">img</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">end</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">timestamp</span>(<span class="ltx_text ltx_lst_identifier">img</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>56</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>img</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>end</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>timestamp</span>(<span class='ltx_text ltx_lst_identifier'>img</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">57</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>57</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">58</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>Call<span class="ltx_text ltx_lst_space"> </span>the<span class="ltx_text ltx_lst_space"> </span>other<span class="ltx_text ltx_lst_space"> </span>filters<span class="ltx_text ltx_lst_space"> </span>here.<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>58</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>Call<span class='ltx_text ltx_lst_space'> </span>the<span class='ltx_text ltx_lst_space'> </span>other<span class='ltx_text ltx_lst_space'> </span>filters<span class='ltx_text ltx_lst_space'> </span>here.<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">59</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>59</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">60</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fprintf</span>(<span class="ltx_text ltx_lst_identifier">stderr</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”\nFinished<span class="ltx_text ltx_lst_space"> </span>filtering<span class="ltx_text ltx_lst_space"> </span>after<span class="ltx_text ltx_lst_space"> </span>%fs\n”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">difftime</span>(<span class="ltx_text ltx_lst_identifier">end</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">start</span>)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>60</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fprintf</span>(<span class='ltx_text ltx_lst_identifier'>stderr</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”\nFinished<span class='ltx_text ltx_lst_space'> </span>filtering<span class='ltx_text ltx_lst_space'> </span>after<span class='ltx_text ltx_lst_space'> </span>%fs\n”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>difftime</span>(<span class='ltx_text ltx_lst_identifier'>end</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>start</span>)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">61</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fprintf</span>(<span class="ltx_text ltx_lst_identifier">stderr</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”\nWriting<span class="ltx_text ltx_lst_space"> </span>result<span class="ltx_text ltx_lst_space"> </span>image<span class="ltx_text ltx_lst_space"> </span>…\n”</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>61</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fprintf</span>(<span class='ltx_text ltx_lst_identifier'>stderr</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”\nWriting<span class='ltx_text ltx_lst_space'> </span>result<span class='ltx_text ltx_lst_space'> </span>image<span class='ltx_text ltx_lst_space'> </span>…\n”</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">62</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">writeMatrix</span>(<span class="ltx_text ltx_lst_identifier">img</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>62</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>writeMatrix</span>(<span class='ltx_text ltx_lst_identifier'>img</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">63</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>63</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">64</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>64</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">65</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>65</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Thmtheorem29.p4" class="ltx_para"> | <div id='Thmtheorem29.p4' class='ltx_para'> |
<p class="ltx_p">Compile your source code with and without the <span class="ltx_text ltx_font_typewriter">-mt</span> option for | <p class='ltx_p'>Compile your source code with and without the <span class='ltx_text ltx_font_typewriter'>-mt</span> option for |
multi-threaded execution and experiment with various thread counts. On faster | multi-threaded execution and experiment with various thread counts. On faster |
machines it might be necessary to apply the filter multiple times (copy and | machines it might be necessary to apply the filter multiple times (copy and |
paste line 55 a couple of times) to see measurable speed-ups.</p> | paste line 55 a couple of times) to see measurable speed-ups.</p> |
</div> | </div> |
<div id="Thmtheorem29.p5" class="ltx_para"> | <div id='Thmtheorem29.p5' class='ltx_para'> |
<p class="ltx_p">NB: The Fibre format encodes, in addition to the raw data, shape information. | <p class='ltx_p'>NB: The Fibre format encodes, in addition to the raw data, shape information. |
By using <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">FibreScanIntArray</span> this program is able process 2D images of any | By using <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>FibreScanIntArray</span> this program is able process 2D images of any |
size and it is not fixed to statically known input sizes.</p> | size and it is not fixed to statically known input sizes.</p> |
</div> | </div> |
</div> | </div> |
<figure id="Ch6.F1" class="ltx_figure"> | <figure id='Ch6.F1' class='ltx_figure'> |
<table style="width:100%;"> | <table style='width:100%;'> |
<tr> | <tr> |
<td class="ltx_subgraphics"><img src="x2.png" id="Ch6.F1.g1" class="ltx_graphics ltx_centering" width="298" height="421" alt=""></td> | <td class='ltx_subgraphics'><img src='x2.png' id='Ch6.F1.g1' class='ltx_graphics ltx_centering' width='298' height='421' alt=''></td> |
<td class="ltx_subgraphics"><img src="x3.png" id="Ch6.F1.g2" class="ltx_graphics ltx_centering" width="298" height="421" alt=""></td> | <td class='ltx_subgraphics'><img src='x3.png' id='Ch6.F1.g2' class='ltx_graphics ltx_centering' width='298' height='421' alt=''></td> |
</tr> | </tr> |
</table> | </table> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_figure">Figure 6.1: </span>The <span class="ltx_text ltx_font_smallcaps">SaC</span> logo before (left) and after (right) edge detection</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_figure'>Figure 6.1: </span>The <span class='ltx_text ltx_font_smallcaps'>SaC</span> logo before (left) and after (right) edge detection</figcaption> |
</figure> | </figure> |
</section> | </section> |
<section id="Ch6.S2" class="ltx_section"> | <section id='Ch6.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">6.2 </span>Lesson 8: Computing Mandelbrot Images</h4> | <span class='ltx_tag ltx_tag_section'>6.2 </span>Lesson 8: Computing Mandelbrot Images</h4> |
| |
<div id="Thmtheorem30" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem30' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 30. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 30. </h6> |
<div id="Thmtheorem30.p1" class="ltx_para"> | <div id='Thmtheorem30.p1' class='ltx_para'> |
<p class="ltx_p">This exercise is about creating a basic implementation for computing mandelbrot | <p class='ltx_p'>This exercise is about creating a basic implementation for computing mandelbrot |
images.</p> | images.</p> |
</div> | </div> |
<div id="Thmtheorem30.p2" class="ltx_para"> | <div id='Thmtheorem30.p2' class='ltx_para'> |
<ol id="Ch6.I2" class="ltx_enumerate"> | <ol id='Ch6.I2' class='ltx_enumerate'> |
<li id="Ch6.I2.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">1.</span> | <span class='ltx_tag ltx_tag_enumerate'>1.</span> |
<div id="Ch6.I2.i1.p1" class="ltx_para"> | <div id='Ch6.I2.i1.p1' class='ltx_para'> |
<p class="ltx_p">To get started, you may want to use the files | <p class='ltx_p'>To get started, you may want to use the files |
<span class="ltx_text ltx_font_typewriter">mandelbrot_start.sac</span> and <span class="ltx_text ltx_font_typewriter">Fractal_tier1.sac</span> which, in | <span class='ltx_text ltx_font_typewriter'>mandelbrot_start.sac</span> and <span class='ltx_text ltx_font_typewriter'>Fractal_tier1.sac</span> which, in |
essence, contain the IO-code for visualising the mandelbrot pictures. A | essence, contain the IO-code for visualising the mandelbrot pictures. A |
first running version can be obtained by implementing the missing | first running version can be obtained by implementing the missing |
function bodies in <span class="ltx_text ltx_font_typewriter">Fractal_tier1_empty.sac</span>:</p> | function bodies in <span class='ltx_text ltx_font_typewriter'>Fractal_tier1_empty.sac</span>:</p> |
<ul id="Ch6.I2.I1" class="ltx_itemize"> | <ul id='Ch6.I2.I1' class='ltx_itemize'> |
<li id="Ch6.I2.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch6.I2.I1.i1.p1" class="ltx_para"> | <div id='Ch6.I2.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">escapeTime</span> which implements the iteration on | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>escapeTime</span> which implements the iteration on |
arrays of complex numbers, and</p> | arrays of complex numbers, and</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I2.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch6.I2.I1.i2.p1" class="ltx_para"> | <div id='Ch6.I2.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">genComplexArray</span> which computes a two-dimensional | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>genComplexArray</span> which computes a two-dimensional |
array of complex numbers that represent a descritisation of | array of complex numbers that represent a descritisation of |
<math id="Ch6.I2.I1.i2.p1.m1" class="ltx_Math" alttext="\mathbb{C}^{2}" display="inline"><msup><mi>ℂ</mi><mn>2</mn></msup></math>.</p> | <math id='Ch6.I2.I1.i2.p1.m1' class='ltx_Math' alttext='\mathbb{C}^{2}' display='inline'><msup><mi>ℂ</mi><mn>2</mn></msup></math>.</p> |
</div> | </div> |
</li> | </li> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I2.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">2.</span> | <span class='ltx_tag ltx_tag_enumerate'>2.</span> |
<div id="Ch6.I2.i2.p1" class="ltx_para"> | <div id='Ch6.I2.i2.p1' class='ltx_para'> |
<p class="ltx_p">Waiting for the final picture can be rather unpleasant if it is not | <p class='ltx_p'>Waiting for the final picture can be rather unpleasant if it is not |
clear whether the chosen fraction of <math id="Ch6.I2.i2.p1.m1" class="ltx_Math" alttext="\mathbb{C}^{2}" display="inline"><msup><mi>ℂ</mi><mn>2</mn></msup></math> yields an | clear whether the chosen fraction of <math id='Ch6.I2.i2.p1.m1' class='ltx_Math' alttext='\mathbb{C}^{2}' display='inline'><msup><mi>ℂ</mi><mn>2</mn></msup></math> yields an |
interesting picture and the iteration limit is high. therefore, as a | interesting picture and the iteration limit is high. therefore, as a |
first extension, try to modify the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">main</span> function in | first extension, try to modify the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>main</span> function in |
<span class="ltx_text ltx_font_typewriter">mandelbrot_start.sac</span> so that it computes the mandelbrot picture | <span class='ltx_text ltx_font_typewriter'>mandelbrot_start.sac</span> so that it computes the mandelbrot picture |
with increasing resolution without changing the overall size of the | with increasing resolution without changing the overall size of the |
picture.</p> | picture.</p> |
</div> | </div> |
<div id="Ch6.I2.i2.p2" class="ltx_para"> | <div id='Ch6.I2.i2.p2' class='ltx_para'> |
<p class="ltx_p">Compute resolutions <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[5,5]</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[10,10]</span>,…, | <p class='ltx_p'>Compute resolutions <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[5,5]</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[10,10]</span>,…, |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[320,320]</span> and display them consecutively in a | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[320,320]</span> and display them consecutively in a |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[320,320]</span> display by replicating the found values | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[320,320]</span> display by replicating the found values |
accordingly.</p> | accordingly.</p> |
</div> | </div> |
<div id="Ch6.I2.i2.p3" class="ltx_para"> | <div id='Ch6.I2.i2.p3' class='ltx_para'> |
<p class="ltx_p">Hint: define a function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">stretchRgb</span> which takes an array of | <p class='ltx_p'>Hint: define a function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>stretchRgb</span> which takes an array of |
type <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_identifier">color</span>[.,.]</span> and an integer stretching factor | type <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_identifier'>color</span>[.,.]</span> and an integer stretching factor |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">stretch</span> and replicates each element of the array into a | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>stretch</span> and replicates each element of the array into a |
square of shape <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">[<span class="ltx_text ltx_lst_identifier">stretch</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stretch</span>]</span>.</p> | square of shape <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>[<span class='ltx_text ltx_lst_identifier'>stretch</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stretch</span>]</span>.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I2.i3" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.i3' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">3.</span> | <span class='ltx_tag ltx_tag_enumerate'>3.</span> |
<div id="Ch6.I2.i3.p1" class="ltx_para"> | <div id='Ch6.I2.i3.p1' class='ltx_para'> |
<p class="ltx_p">The function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">intArrayToMonochrome</span> maps all escape values | <p class='ltx_p'>The function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>intArrayToMonochrome</span> maps all escape values |
into a color by means of a clut. Can you express this operation without | into a color by means of a clut. Can you express this operation without |
a with-loop?</p> | a with-loop?</p> |
</div> | </div> |
<div id="Ch6.I2.i3.p2" class="ltx_para"> | <div id='Ch6.I2.i3.p2' class='ltx_para'> |
<p class="ltx_p">Hint: You may find inspiration in one of the earlier tasks!</p> | <p class='ltx_p'>Hint: You may find inspiration in one of the earlier tasks!</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I2.i4" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.i4' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">4.</span> | <span class='ltx_tag ltx_tag_enumerate'>4.</span> |
<div id="Ch6.I2.i4.p1" class="ltx_para"> | <div id='Ch6.I2.i4.p1' class='ltx_para'> |
<p class="ltx_p">Try using the compiler option <span class="ltx_text ltx_font_typewriter">-mt</span> to experiment with multi-core | <p class='ltx_p'>Try using the compiler option <span class='ltx_text ltx_font_typewriter'>-mt</span> to experiment with multi-core |
machines!</p> | machines!</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I2.i5" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.i5' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">5.</span> | <span class='ltx_tag ltx_tag_enumerate'>5.</span> |
<div id="Ch6.I2.i5.p1" class="ltx_para"> | <div id='Ch6.I2.i5.p1' class='ltx_para'> |
<p class="ltx_p">Try using the compiler option <span class="ltx_text ltx_font_typewriter">-cuda</span> to experiment with graphics | <p class='ltx_p'>Try using the compiler option <span class='ltx_text ltx_font_typewriter'>-cuda</span> to experiment with graphics |
cards!</p> | cards!</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I2.i6" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I2.i6' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">6.</span> | <span class='ltx_tag ltx_tag_enumerate'>6.</span> |
<div id="Ch6.I2.i6.p1" class="ltx_para"> | <div id='Ch6.I2.i6.p1' class='ltx_para'> |
<p class="ltx_p">Try using the compiler option <span class="ltx_text ltx_font_typewriter">-b11:cyc</span> to inspect the | <p class='ltx_p'>Try using the compiler option <span class='ltx_text ltx_font_typewriter'>-b11:cyc</span> to inspect the |
high-level, optimised intermediate code.</p> | high-level, optimised intermediate code.</p> |
</div> | </div> |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem31" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem31' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 31. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 31. </h6> |
<div id="Thmtheorem31.p1" class="ltx_para"> | <div id='Thmtheorem31.p1' class='ltx_para'> |
<p class="ltx_p">In this exercise, we improve the way the colours are chosen in order to obtain | <p class='ltx_p'>In this exercise, we improve the way the colours are chosen in order to obtain |
smoother transitions. We will use a common approach referred to as | smoother transitions. We will use a common approach referred to as |
<em class="ltx_emph">normalized iteration counts</em>. A normalized iteration count for a point in | <em class='ltx_emph'>normalized iteration counts</em>. A normalized iteration count for a point in |
the complex plane <math id="Thmtheorem31.p1.m1" class="ltx_Math" alttext="z" display="inline"><mi>z</mi></math> is computed by using the iteration count <math id="Thmtheorem31.p1.m2" class="ltx_Math" alttext="t" display="inline"><mi>t</mi></math> and the value | the complex plane <math id='Thmtheorem31.p1.m1' class='ltx_Math' alttext='z' display='inline'><mi>z</mi></math> is computed by using the iteration count <math id='Thmtheorem31.p1.m2' class='ltx_Math' alttext='t' display='inline'><mi>t</mi></math> and the value |
at that position <math id="Thmtheorem31.p1.m3" class="ltx_Math" alttext="z_{t}" display="inline"><msub><mi>z</mi><mi>t</mi></msub></math> during the final iteration. Using these two values, the | at that position <math id='Thmtheorem31.p1.m3' class='ltx_Math' alttext='z_{t}' display='inline'><msub><mi>z</mi><mi>t</mi></msub></math> during the final iteration. Using these two values, the |
normalized iteration count is defined as <math id="Thmtheorem31.p1.m4" class="ltx_Math" alttext="t_{n}:=(t+1)-\log_{2}(\log_{2}(|z_{t}|))" display="inline"><mrow><msub><mi>t</mi><mi>n</mi></msub><mo>:=</mo><mrow><mrow><mo stretchy="false">(</mo><mrow><mi>t</mi><mo>+</mo><mn>1</mn></mrow><mo stretchy="false">)</mo></mrow><mo>-</mo><mrow><msub><mi>log</mi><mn>2</mn></msub><mo></mo><mrow><mo stretchy="false">(</mo><mrow><msub><mi>log</mi><mn>2</mn></msub><mo></mo><mrow><mo stretchy="false">(</mo><mrow><mo stretchy="false">|</mo><msub><mi>z</mi><mi>t</mi></msub><mo stretchy="false">|</mo></mrow><mo stretchy="false">)</mo></mrow></mrow><mo stretchy="false">)</mo></mrow></mrow></mrow></mrow></math> | normalized iteration count is defined as <math id='Thmtheorem31.p1.m4' class='ltx_Math' alttext='t_{n}:=(t+1)-\log_{2}(\log_{2}(|z_{t}|))' display='inline'><mrow><msub><mi>t</mi><mi>n</mi></msub><mo>:=</mo><mrow><mrow><mo stretchy='false'>(</mo><mrow><mi>t</mi><mo>+</mo><mn>1</mn></mrow><mo stretchy='false'>)</mo></mrow><mo>-</mo><mrow><msub><mi>log</mi><mn>2</mn></msub><mo></mo><mrow><mo stretchy='false'>(</mo><mrow><msub><mi>log</mi><mn>2</mn></msub><mo></mo><mrow><mo stretchy='false'>(</mo><mrow><mo stretchy='false'>|</mo><msub><mi>z</mi><mi>t</mi></msub><mo stretchy='false'>|</mo></mrow><mo stretchy='false'>)</mo></mrow></mrow><mo stretchy='false'>)</mo></mrow></mrow></mrow></mrow></math> |
for those values that escape and as <math id="Thmtheorem31.p1.m5" class="ltx_Math" alttext="0" display="inline"><mn>0</mn></math> otherwise.</p> | for those values that escape and as <math id='Thmtheorem31.p1.m5' class='ltx_Math' alttext='0' display='inline'><mn>0</mn></math> otherwise.</p> |
</div> | </div> |
<div id="Thmtheorem31.p2" class="ltx_para"> | <div id='Thmtheorem31.p2' class='ltx_para'> |
<ol id="Ch6.I3" class="ltx_enumerate"> | <ol id='Ch6.I3' class='ltx_enumerate'> |
<li id="Ch6.I3.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I3.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">1.</span> | <span class='ltx_tag ltx_tag_enumerate'>1.</span> |
<div id="Ch6.I3.i1.p1" class="ltx_para"> | <div id='Ch6.I3.i1.p1' class='ltx_para'> |
<p class="ltx_p">The module <span class="ltx_text ltx_font_typewriter">Fractal_tier2.sac</span> contains stubs for the missing | <p class='ltx_p'>The module <span class='ltx_text ltx_font_typewriter'>Fractal_tier2.sac</span> contains stubs for the missing |
functionality required in this exercise:</p> | functionality required in this exercise:</p> |
<ul id="Ch6.I3.I1" class="ltx_itemize"> | <ul id='Ch6.I3.I1' class='ltx_itemize'> |
<li id="Ch6.I3.I1.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I3.I1.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch6.I3.I1.i1.p1" class="ltx_para"> | <div id='Ch6.I3.I1.i1.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">normalizedIterationCount</span> which implements the | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>normalizedIterationCount</span> which implements the |
normalisation of iteration counts by taking the final computed | normalisation of iteration counts by taking the final computed |
value into account.</p> | value into account.</p> |
</div> | </div> |
<div id="Ch6.I3.I1.i1.p2" class="ltx_para"> | <div id='Ch6.I3.I1.i1.p2' class='ltx_para'> |
<p class="ltx_p">Hint: The function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">escapeTime</span> only computes the | <p class='ltx_p'>Hint: The function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>escapeTime</span> only computes the |
number of iterations before the value at a given position | number of iterations before the value at a given position |
escapes. To normalize these, the final value at that position is | escapes. To normalize these, the final value at that position is |
required, as well. For this, we have provided a function | required, as well. For this, we have provided a function |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">escapeValue</span>.</p> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>escapeValue</span>.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I3.I1.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I3.I1.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_itemize"><span class="ltx_text ltx_font_bold">–</span></span> | <span class='ltx_tag ltx_tag_itemize'><span class='ltx_text ltx_font_bold'>–</span></span> |
<div id="Ch6.I3.I1.i2.p1" class="ltx_para"> | <div id='Ch6.I3.I1.i2.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">doubleArrayToRGB</span> maps the normalized iteration | <p class='ltx_p'><span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>doubleArrayToRGB</span> maps the normalized iteration |
counts, which are double values, to an RGB colour-triple. To | counts, which are double values, to an RGB colour-triple. To |
derive an RGB value, first scale all values such that they are | derive an RGB value, first scale all values such that they are |
in the interval <math id="Ch6.I3.I1.i2.p1.m1" class="ltx_Math" alttext="0\leq x<360" display="inline"><mrow><mn>0</mn><mo>≤</mo><mi>x</mi><mo><</mo><mn>360</mn></mrow></math>. This value can then be used as the | in the interval <math id='Ch6.I3.I1.i2.p1.m1' class='ltx_Math' alttext='0\leq x<360' display='inline'><mrow><mn>0</mn><mo>≤</mo><mi>x</mi><mo><</mo><mn>360</mn></mrow></math>. This value can then be used as the |
hue in the HSB model.</p> | hue in the HSB model.</p> |
</div> | </div> |
<div id="Ch6.I3.I1.i2.p2" class="ltx_para"> | <div id='Ch6.I3.I1.i2.p2' class='ltx_para'> |
<p class="ltx_p">Hint: The module <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Color8</span> defines a function | <p class='ltx_p'>Hint: The module <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Color8</span> defines a function |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Hsb2Rgb</span> that converts a HSB color description into | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Hsb2Rgb</span> that converts a HSB color description into |
its corresponding RGB representation.</p> | its corresponding RGB representation.</p> |
</div> | </div> |
</div> | </div> |
</div> | </div> |
<div id="Thmtheorem32" class="ltx_theorem ltx_theorem_theorem"> | <div id='Thmtheorem32' class='ltx_theorem ltx_theorem_theorem'> |
<h6 class="ltx_title ltx_runin ltx_font_bold ltx_title_theorem">Exercise 32. </h6> | <h6 class='ltx_title ltx_runin ltx_font_bold ltx_title_theorem'>Exercise 32. </h6> |
<div id="Thmtheorem32.p1" class="ltx_para"> | <div id='Thmtheorem32.p1' class='ltx_para'> |
<p class="ltx_p">In this exercise, we apply the filters from the previous case study to the | <p class='ltx_p'>In this exercise, we apply the filters from the previous case study to the |
mandelbrot pictures. As before, we have provided stubs for the missing | mandelbrot pictures. As before, we have provided stubs for the missing |
functionality. For this exercise these can be found in the file | functionality. For this exercise these can be found in the file |
<span class="ltx_text ltx_font_typewriter">Stencil_tier3.sac</span>.</p> | <span class='ltx_text ltx_font_typewriter'>Stencil_tier3.sac</span>.</p> |
</div> | </div> |
<div id="Thmtheorem32.p2" class="ltx_para"> | <div id='Thmtheorem32.p2' class='ltx_para'> |
<ol id="Ch6.I4" class="ltx_enumerate"> | <ol id='Ch6.I4' class='ltx_enumerate'> |
<li id="Ch6.I4.i1" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I4.i1' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">1.</span> | <span class='ltx_tag ltx_tag_enumerate'>1.</span> |
<div id="Ch6.I4.i1.p1" class="ltx_para"> | <div id='Ch6.I4.i1.p1' class='ltx_para'> |
<p class="ltx_p">Implement the functions <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">apply</span>, <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">sobelEdges</span>, | <p class='ltx_p'>Implement the functions <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>apply</span>, <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>sobelEdges</span>, |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">gaussBlur</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">gaussBlur25</span> as described in the | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>gaussBlur</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>gaussBlur25</span> as described in the |
previous case study.</p> | previous case study.</p> |
</div> | </div> |
</li> | </li> |
<li id="Ch6.I4.i2" class="ltx_item" style="list-style-type:none;"> | <li id='Ch6.I4.i2' class='ltx_item' style='list-style-type:none;'> |
<span class="ltx_tag ltx_tag_enumerate">2.</span> | <span class='ltx_tag ltx_tag_enumerate'>2.</span> |
<div id="Ch6.I4.i2.p1" class="ltx_para"> | <div id='Ch6.I4.i2.p1' class='ltx_para'> |
<p class="ltx_p">The three filters described above only operate on a single channel, | <p class='ltx_p'>The three filters described above only operate on a single channel, |
e.g. a gray-scale image. To lift these to colour images, implement a | e.g. a gray-scale image. To lift these to colour images, implement a |
corresponding function for each filter that applies the filter to each | corresponding function for each filter that applies the filter to each |
</section> | </section> |
</section> | </section> |
<section id="Pt2" class="ltx_part"> | <section id='Pt2' class='ltx_part'> |
<h2 class="ltx_title ltx_title_part"> | <h2 class='ltx_title ltx_title_part'> |
<span class="ltx_tag ltx_tag_part">Part II </span>Trails Covering More Advanced Features of <span class="ltx_text ltx_font_smallcaps">SaC</span> | <span class='ltx_tag ltx_tag_part'>Part II </span>Trails Covering More Advanced Features of <span class='ltx_text ltx_font_smallcaps'>SaC</span> |
</h2> | </h2> |
| |
<section id="Ch7" class="ltx_chapter"> | <section id='Ch7' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 7 </span>Treasures in the Standard Library</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 7 </span>Treasures in the Standard Library</h3> |
| |
<div id="Ch7.p1" class="ltx_para"> | <div id='Ch7.p1' class='ltx_para'> |
<p class="ltx_p">This trail gives the reader a tour through the main components of the standard | <p class='ltx_p'>This trail gives the reader a tour through the main components of the standard |
library. For the time being, it is merely a collection of points of interest. | library. For the time being, it is merely a collection of points of interest. |
We hope that this will evolve over time.</p> | We hope that this will evolve over time.</p> |
</div> | </div> |
<div id="Ch7.p2" class="ltx_para"> | <div id='Ch7.p2' class='ltx_para'> |
<p class="ltx_p">So far, we only have one lesson on <em class="ltx_emph">benchmarking</em> in <span class="ltx_text ltx_font_smallcaps">SaC</span>.</p> | <p class='ltx_p'>So far, we only have one lesson on <em class='ltx_emph'>benchmarking</em> in <span class='ltx_text ltx_font_smallcaps'>SaC</span>.</p> |
</div> | </div> |
<section id="Ch7.S1" class="ltx_section"> | <section id='Ch7.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">7.1 </span>Lesson: Benchmarking <span class="ltx_text ltx_font_smallcaps">SaC</span> Programs</h4> | <span class='ltx_tag ltx_tag_section'>7.1 </span>Lesson: Benchmarking <span class='ltx_text ltx_font_smallcaps'>SaC</span> Programs</h4> |
| |
<div id="Ch7.S1.p1" class="ltx_para"> | <div id='Ch7.S1.p1' class='ltx_para'> |
<p class="ltx_p">Following the case studies in the previous section, the question | <p class='ltx_p'>Following the case studies in the previous section, the question |
arises what the best technique for benchmarking <span class="ltx_text ltx_font_smallcaps">SaC</span> programs | arises what the best technique for benchmarking <span class='ltx_text ltx_font_smallcaps'>SaC</span> programs |
might be. | might be. |
The easiest way, of course, is by utilising the <span class="ltx_text ltx_font_smallcaps">Unix</span> <span class="ltx_text ltx_font_typewriter">time</span> | The easiest way, of course, is by utilising the <span class='ltx_text ltx_font_smallcaps'>Unix</span> <span class='ltx_text ltx_font_typewriter'>time</span> |
(or <span class="ltx_text ltx_font_typewriter">timex</span>) command when starting the to be benchmarked | (or <span class='ltx_text ltx_font_typewriter'>timex</span>) command when starting the to be benchmarked |
program on the command line of the system shell. | program on the command line of the system shell. |
The disadvantage of this technique is that the whole program is benchmarked, | The disadvantage of this technique is that the whole program is benchmarked, |
from time spent in the more relevant parts of a program.</p> | from time spent in the more relevant parts of a program.</p> |
</div> | </div> |
<div id="Ch7.S1.p2" class="ltx_para"> | <div id='Ch7.S1.p2' class='ltx_para'> |
<p class="ltx_p">For many program codes exposing in one way or another an iterative nature, | <p class='ltx_p'>For many program codes exposing in one way or another an iterative nature, |
this is often still the technique of choice. | this is often still the technique of choice. |
One simply measures whole program runtime for <span class="ltx_text ltx_font_typewriter">x</span> iterations and for | One simply measures whole program runtime for <span class='ltx_text ltx_font_typewriter'>x</span> iterations and for |
<span class="ltx_text ltx_font_typewriter">y</span> iterations and then derives the average time per iteration by | <span class='ltx_text ltx_font_typewriter'>y</span> iterations and then derives the average time per iteration by |
dividing the difference in runtimes by the difference in iterations computed. | dividing the difference in runtimes by the difference in iterations computed. |
Under the (likely) assumption that setup and shutdown overhead is constant | Under the (likely) assumption that setup and shutdown overhead is constant |
benchmarking without augmenting the source code for benchmarking.</p> | benchmarking without augmenting the source code for benchmarking.</p> |
</div> | </div> |
<div id="Ch7.S1.p3" class="ltx_para"> | <div id='Ch7.S1.p3' class='ltx_para'> |
<p class="ltx_p">If the above technique for one or another reason is insufficient, the <span class="ltx_text ltx_font_smallcaps">SaC</span> | <p class='ltx_p'>If the above technique for one or another reason is insufficient, the <span class='ltx_text ltx_font_smallcaps'>SaC</span> |
standard library provides access to the system real time clock via the classes | standard library provides access to the system real time clock via the classes |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">RTClock</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">RTimer</span>. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>RTClock</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>RTimer</span>. |
The code example below illustrates how this works.</p> | The code example below illustrates how this works.</p> |
</div> | </div> |
<figure id="LST44" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST44' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 44: </span>Benchmarking with the real time clock</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 44: </span>Benchmarking with the real time clock</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,dXNlIFJUQ2xvY2s6IGFsbDsKdXNlIFJUaW1lcjogYWxsOwoKaW50IG1haW4oKQp7CiAgaW50IHNl%0AY3M7CiAgaW50IG5zZWNzOwogIGRvdWJsZSB0aW1lOwoKICB0aW1lciA9IGNyZWF0ZVJUaW1lcigp%0AOwoKICBzdGFydFJUaW1lcih0aW1lcik7CgogIGRvUmVsZXZhbnRDb21wdXRhdGlvbigvKiAuLi4g%0AICovKTsKCiAgc3RvcFJUaW1lcih0aW1lcik7CgogIHNlY3MsIG5zZWNzID0gZ2V0UlRpbWVySW50%0Acyh0aW1lcik7CiAgdGltZSA9IGdldFJUaW1lckRibCh0aW1lcik7CgogIGRlc3Ryb3lSVGltZXIo%0AdGltZXIpOwp9%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,dXNlIFJUQ2xvY2s6IGFsbDsKdXNlIFJUaW1lcjogYWxsOwoKaW50IG1haW4oKQp7CiAgaW50IHNl%0AY3M7CiAgaW50IG5zZWNzOwogIGRvdWJsZSB0aW1lOwoKICB0aW1lciA9IGNyZWF0ZVJUaW1lcigp%0AOwoKICBzdGFydFJUaW1lcih0aW1lcik7CgogIGRvUmVsZXZhbnRDb21wdXRhdGlvbigvKiAuLi4g%0AICovKTsKCiAgc3RvcFJUaW1lcih0aW1lcik7CgogIHNlY3MsIG5zZWNzID0gZ2V0UlRpbWVySW50%0Acyh0aW1lcik7CiAgdGltZSA9IGdldFJUaW1lckRibCh0aW1lcik7CgogIGRlc3Ryb3lSVGltZXIo%0AdGltZXIpOwp9%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">RTClock</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>RTClock</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">RTimer</span>:<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">all</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>RTimer</span>:<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>all</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">secs</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>secs</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">nsecs</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>nsecs</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">double</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">time</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>double</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>time</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">timer</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">createRTimer</span>(); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>timer</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>createRTimer</span>(); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">startRTimer</span>(<span class="ltx_text ltx_lst_identifier">timer</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>startRTimer</span>(<span class='ltx_text ltx_lst_identifier'>timer</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">doRelevantComputation</span>(<span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>doRelevantComputation</span>(<span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stopRTimer</span>(<span class="ltx_text ltx_lst_identifier">timer</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stopRTimer</span>(<span class='ltx_text ltx_lst_identifier'>timer</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">secs</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">nsecs</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">getRTimerInts</span>(<span class="ltx_text ltx_lst_identifier">timer</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>secs</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>nsecs</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>getRTimerInts</span>(<span class='ltx_text ltx_lst_identifier'>timer</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">time</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">getRTimerDbl</span>(<span class="ltx_text ltx_lst_identifier">timer</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>time</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>getRTimerDbl</span>(<span class='ltx_text ltx_lst_identifier'>timer</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">destroyRTimer</span>(<span class="ltx_text ltx_lst_identifier">timer</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>destroyRTimer</span>(<span class='ltx_text ltx_lst_identifier'>timer</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch7.S1.p4" class="ltx_para"> | <div id='Ch7.S1.p4' class='ltx_para'> |
<p class="ltx_p">First, we make all symbols from the name spaces <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">RTClock</span> and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">RTimer</span> | <p class='ltx_p'>First, we make all symbols from the name spaces <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>RTClock</span> and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>RTimer</span> |
available to our program via the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">use</span> statements in | available to our program via the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>use</span> statements in |
lines 1 and 2. | lines 1 and 2. |
Access to the real time clock is indirect through the creation of one or more | Access to the real time clock is indirect through the creation of one or more |
<span class="ltx_text ltx_font_italic">real clock timers</span>. | <span class='ltx_text ltx_font_italic'>real clock timers</span>. |
Such a timer comes into existance through execution of the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">createRTimer</span> | Such a timer comes into existance through execution of the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>createRTimer</span> |
function. | function. |
Timers can (repeatedly) be started and stopped using the functions <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">startRTimer</span> | Timers can (repeatedly) be started and stopped using the functions <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>startRTimer</span> |
and <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">stopRTimer</span>, respectively. | and <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>stopRTimer</span>, respectively. |
If a timer is started and stopped multiple times, elapsed times are accumulated. | If a timer is started and stopped multiple times, elapsed times are accumulated. |
Where this is not desirable, a real clock timer can be reset using the | Where this is not desirable, a real clock timer can be reset using the |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">resetRTimer</span> function. | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>resetRTimer</span> function. |
While the real timers keep their information in an opaque format, two functions | While the real timers keep their information in an opaque format, two functions |
support the conversion of timer information into standard <span class="ltx_text ltx_font_smallcaps">SaC</span> values. | support the conversion of timer information into standard <span class='ltx_text ltx_font_smallcaps'>SaC</span> values. |
The function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">getRTimerInts</span> yields two integer values, specifying elapsed | The function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>getRTimerInts</span> yields two integer values, specifying elapsed |
seconds and nanoseconds, respectively; | seconds and nanoseconds, respectively; |
the function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">getRTimerDbl</span> yields elapsed time in seconds as a double | the function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>getRTimerDbl</span> yields elapsed time in seconds as a double |
precision floating point value.</p> | precision floating point value.</p> |
</div> | </div> |
<div id="Ch7.S1.p5" class="ltx_para"> | <div id='Ch7.S1.p5' class='ltx_para'> |
<p class="ltx_p">Note that starting an already running timer has no effect. | <p class='ltx_p'>Note that starting an already running timer has no effect. |
Likewise stopping a non-running timer has no effect either. | Likewise stopping a non-running timer has no effect either. |
Enquiring the state of a running timer yields the timer’s value | Enquiring the state of a running timer yields the timer’s value |
when it was started. | when it was started. |
Last not least, a timer should be removed when it is no longer used or needed | Last not least, a timer should be removed when it is no longer used or needed |
by calling the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">destroyRTimer</span> function.</p> | by calling the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>destroyRTimer</span> function.</p> |
</div> | </div> |
<div id="Ch7.S1.p6" class="ltx_para"> | <div id='Ch7.S1.p6' class='ltx_para'> |
<p class="ltx_p">Benchmarking <em class="ltx_emph">functional</em> programs through starting, stopping and | <p class='ltx_p'>Benchmarking <em class='ltx_emph'>functional</em> programs through starting, stopping and |
enquiring timers is not without a conceptual problem: | enquiring timers is not without a conceptual problem: |
In the absence of any data dependency between the starting and the stopping of | In the absence of any data dependency between the starting and the stopping of |
other side, the compiler is free to change the order of these three parts of | other side, the compiler is free to change the order of these three parts of |
the computation. | the computation. |
And, an aggressively optimising compiler like <span class="ltx_text ltx_font_typewriter">sac2c</span> may actually do this, | And, an aggressively optimising compiler like <span class='ltx_text ltx_font_typewriter'>sac2c</span> may actually do this, |
which, of course, would render the timing completely useless. | which, of course, would render the timing completely useless. |
To safely prevent the compiler from changing the order of computations, we need | To safely prevent the compiler from changing the order of computations, we need |
to apply a little trick:</p> | to apply a little trick:</p> |
</div> | </div> |
<figure id="LST45" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST45' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 45: </span>Binding function to timer</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 45: </span>Binding function to timer</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,LyogcmV0dXJuLXR5cGUgICovIGRvUmVsZXZhbnRDb21wdXRhdGlvbigvKiAuLi4gICovKQp7CiAg%0ALyogLi4uICAqLwogIHRvdWNoKFJUY2xvY2spOwogIC8qIC4uLiAgKi8KfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,LyogcmV0dXJuLXR5cGUgICovIGRvUmVsZXZhbnRDb21wdXRhdGlvbigvKiAuLi4gICovKQp7CiAg%0ALyogLi4uICAqLwogIHRvdWNoKFJUY2xvY2spOwogIC8qIC4uLiAgKi8KfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>return-type<span class="ltx_text ltx_lst_space"> </span>*/</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">doRelevantComputation</span>(<span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>return-type<span class='ltx_text ltx_lst_space'> </span>*/</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>doRelevantComputation</span>(<span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">touch</span>(<span class="ltx_text ltx_lst_identifier">RTclock</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>touch</span>(<span class='ltx_text ltx_lst_identifier'>RTclock</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span>*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch7.S1.p7" class="ltx_para"> | <div id='Ch7.S1.p7' class='ltx_para'> |
<p class="ltx_p">Somewhere in the definition of the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">doRelevantComputation</span> you need | <p class='ltx_p'>Somewhere in the definition of the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>doRelevantComputation</span> you need |
to <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">touch</span> the real time clock as shown above. | to <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>touch</span> the real time clock as shown above. |
And, you must not declare the work function as an inline function.</p> | And, you must not declare the work function as an inline function.</p> |
</div> | </div> |
<div id="Ch7.S1.p8" class="ltx_para"> | <div id='Ch7.S1.p8' class='ltx_para'> |
<p class="ltx_p">Why this helps warrants further explanation; it is deeply connected to | <p class='ltx_p'>Why this helps warrants further explanation; it is deeply connected to |
the <span class="ltx_text ltx_font_smallcaps">SaC</span> I/O concept, which is based on a variant of uniqueness typing.</p> | the <span class='ltx_text ltx_font_smallcaps'>SaC</span> I/O concept, which is based on a variant of uniqueness typing.</p> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch8" class="ltx_chapter"> | <section id='Ch8' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 8 </span>User Defined Types</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 8 </span>User Defined Types</h3> |
| |
<div id="Ch8.p1" class="ltx_para"> | <div id='Ch8.p1' class='ltx_para'> |
<p class="ltx_p">In this trail covers the definition and use of user-defined types in <span class="ltx_text ltx_font_smallcaps">SaC</span>.</p> | <p class='ltx_p'>In this trail covers the definition and use of user-defined types in <span class='ltx_text ltx_font_smallcaps'>SaC</span>.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch9" class="ltx_chapter"> | <section id='Ch9' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 9 </span>Dealing with I/O and State in General</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 9 </span>Dealing with I/O and State in General</h3> |
| |
<div id="Ch9.p1" class="ltx_para"> | <div id='Ch9.p1' class='ltx_para'> |
<p class="ltx_p"><span class="ltx_text ltx_font_smallcaps">SaC</span> supports states through objects that are passed implicitly around. This | <p class='ltx_p'><span class='ltx_text ltx_font_smallcaps'>SaC</span> supports states through objects that are passed implicitly around. This |
allows the programmer to specify stateful expressions as sequences while | allows the programmer to specify stateful expressions as sequences while |
maintaining the sideeffect free functional semantics of the <span class="ltx_text ltx_font_smallcaps">SaC</span> language. The | maintaining the sideeffect free functional semantics of the <span class='ltx_text ltx_font_smallcaps'>SaC</span> language. The |
underlying idea is called <em class="ltx_emph">global objects</em> and will be discussed through out | underlying idea is called <em class='ltx_emph'>global objects</em> and will be discussed through out |
this chapter.</p> | this chapter.</p> |
</div> | </div> |
<section id="Ch9.S1" class="ltx_section"> | <section id='Ch9.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">9.1 </span>Lesson: States and Objects — the basics</h4> | <span class='ltx_tag ltx_tag_section'>9.1 </span>Lesson: States and Objects — the basics</h4> |
| |
<div id="Ch9.S1.p1" class="ltx_para"> | <div id='Ch9.S1.p1' class='ltx_para'> |
<p class="ltx_p">In most languages, classes are based on special record types containing instance | <p class='ltx_p'>In most languages, classes are based on special record types containing instance |
variables and methods. In <span class="ltx_text ltx_font_smallcaps">SaC</span>, classes are based on modules, as they serve | variables and methods. In <span class='ltx_text ltx_font_smallcaps'>SaC</span>, classes are based on modules, as they serve |
the same need: A module pairs functions and types to a group. Instead of | the same need: A module pairs functions and types to a group. Instead of |
instance variables, classes in <span class="ltx_text ltx_font_smallcaps">SaC</span> have a special class type that builds up | instance variables, classes in <span class='ltx_text ltx_font_smallcaps'>SaC</span> have a special class type that builds up |
an instance of a class. As this type always is implicit, direct access to it is | an instance of a class. As this type always is implicit, direct access to it is |
only possible from within the same namespace. The following example shows the | only possible from within the same namespace. The following example shows the |
class <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span>:</p> | class <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span>:</p> |
</div> | </div> |
<figure id="LST46" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST46' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 46: </span>class Counter</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 46: </span>class Counter</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,Y2xhc3MgQ291bnRlcjsKCmNsYXNzdHlwZSBpbnRbXTsKCnB1YmxpYyBDb3VudGVyIGNyZWF0ZV9D%0Ab3VudGVyKCkKewogIHJldHVybiAoQ291bnRlcikwOwp9CgpwdWJsaWMgdm9pZCBpbmNyZW1lbnQo%0AQ291bnRlciAmYykKewogIGMgPSAoQ291bnRlcikoKGludCljICsgMSk7Cn0KCnB1YmxpYyBpbnQg%0AZ2V0VmFsdWUoQ291bnRlciBjKQp7CiAgcmV0dXJuIChpbnQpYzsKfQoKcHVibGljIHZvaWQgZGVz%0AdHJveV9Db3VudGVyKENvdW50ZXIgJmMpCnsKfQ==%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,Y2xhc3MgQ291bnRlcjsKCmNsYXNzdHlwZSBpbnRbXTsKCnB1YmxpYyBDb3VudGVyIGNyZWF0ZV9D%0Ab3VudGVyKCkKewogIHJldHVybiAoQ291bnRlcikwOwp9CgpwdWJsaWMgdm9pZCBpbmNyZW1lbnQo%0AQ291bnRlciAmYykKewogIGMgPSAoQ291bnRlcikoKGludCljICsgMSk7Cn0KCnB1YmxpYyBpbnQg%0AZ2V0VmFsdWUoQ291bnRlciBjKQp7CiAgcmV0dXJuIChpbnQpYzsKfQoKcHVibGljIHZvaWQgZGVz%0AdHJveV9Db3VudGVyKENvdW50ZXIgJmMpCnsKfQ==%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">class</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Counter</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>class</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Counter</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">classtype</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[]; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>classtype</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[]; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_identifier">public</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Counter</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">create_Counter</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_identifier'>public</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Counter</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>create_Counter</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">Counter</span>)0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>Counter</span>)0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_identifier">public</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">increment</span>(<span class="ltx_text ltx_lst_identifier">Counter</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">c</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_identifier'>public</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>increment</span>(<span class='ltx_text ltx_lst_identifier'>Counter</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>c</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">Counter</span>)((<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>)<span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span>1); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>Counter</span>)((<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>)<span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span>1); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_identifier">public</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">getValue</span>(<span class="ltx_text ltx_lst_identifier">Counter</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_identifier'>public</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>getValue</span>(<span class='ltx_text ltx_lst_identifier'>Counter</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>)<span class="ltx_text ltx_lst_identifier">c</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>)<span class='ltx_text ltx_lst_identifier'>c</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span>} |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_identifier">public</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">destroy_Counter</span>(<span class="ltx_text ltx_lst_identifier">Counter</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">c</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_identifier'>public</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>destroy_Counter</span>(<span class='ltx_text ltx_lst_identifier'>Counter</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>c</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch9.S1.p2" class="ltx_para"> | <div id='Ch9.S1.p2' class='ltx_para'> |
<p class="ltx_p">A class file starts with the <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">class</span> keyword, followed by the name of the | <p class='ltx_p'>A class file starts with the <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>class</span> keyword, followed by the name of the |
class. Another keyword unique to classes is <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">classtype</span>. The statement in | class. Another keyword unique to classes is <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>classtype</span>. The statement in |
line 3 defines <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[]</span> as the classtype of class <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span>. All | line 3 defines <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[]</span> as the classtype of class <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span>. All |
functions within the class expect an instance of <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span>, e.g. a | functions within the class expect an instance of <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span>, e.g. a |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting"><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>[]</span> value, as their argument. By using the <span class="ltx_text ltx_font_smallcaps">SaC</span> <span class="ltx_text ltx_font_italic">call by reference</span> | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>[]</span> value, as their argument. By using the <span class='ltx_text ltx_font_smallcaps'>SaC</span> <span class='ltx_text ltx_font_italic'>call by reference</span> |
technique, these functions are able to destructively modify an instance and thus | technique, these functions are able to destructively modify an instance and thus |
its state.</p> | its state.</p> |
</div> | </div> |
<div id="Ch9.S1.p3" class="ltx_para"> | <div id='Ch9.S1.p3' class='ltx_para'> |
<p class="ltx_p">The function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">increment</span> increments the value of Counter instance | <p class='ltx_p'>The function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>increment</span> increments the value of Counter instance |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">c</span> and returns the new, modified version. A special function is | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>c</span> and returns the new, modified version. A special function is |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">create_Counter</span> as it can be used as a constructor function for class | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>create_Counter</span> as it can be used as a constructor function for class |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span>. The counterpart is the destructor function | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span>. The counterpart is the destructor function |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">destroy_Counter</span>. All class implementations <span class="ltx_text ltx_font_bold">must</span> at least have | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>destroy_Counter</span>. All class implementations <span class='ltx_text ltx_font_bold'>must</span> at least have |
one constructor function and a destructor function. However, the destructor | one constructor function and a destructor function. However, the destructor |
function can be empty like in the example above.</p> | function can be empty like in the example above.</p> |
</div> | </div> |
<section id="Ch9.S1.SS1" class="ltx_subsection"> | <section id='Ch9.S1.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">9.1.1 </span>Extending Classes</h5> | <span class='ltx_tag ltx_tag_subsection'>9.1.1 </span>Extending Classes</h5> |
| |
<div id="Ch9.S1.SS1.p1" class="ltx_para"> | <div id='Ch9.S1.SS1.p1' class='ltx_para'> |
<p class="ltx_p">Like modules, it is possible to extend classes by new functions. However, a | <p class='ltx_p'>Like modules, it is possible to extend classes by new functions. However, a |
class can only be the derivative of one single other class. There is no support | class can only be the derivative of one single other class. There is no support |
for multiple derivation. Furthermore, there is no possibility to extend the | for multiple derivation. Furthermore, there is no possibility to extend the |
class type — extension is limited to functions. The following listing shows how | class type — extension is limited to functions. The following listing shows how |
to extend our <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span> example to a new class capable of decrementing | to extend our <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span> example to a new class capable of decrementing |
its value:</p> | its value:</p> |
</div> | </div> |
<figure id="LST47" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST47' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 47: </span>DecCounter class</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 47: </span>DecCounter class</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,Y2xhc3MgRGVjQ291bnRlciBleHRlbmRzIENvdW50ZXI7CgpwdWJsaWMgdm9pZCBkZWNyZW1lbnQo%0AQ291bnRlciAmYykKewogIGMgPSAoQ291bnRlcikoKGludCljIC0gMSk7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,Y2xhc3MgRGVjQ291bnRlciBleHRlbmRzIENvdW50ZXI7CgpwdWJsaWMgdm9pZCBkZWNyZW1lbnQo%0AQ291bnRlciAmYykKewogIGMgPSAoQ291bnRlcikoKGludCljIC0gMSk7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">class</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">DecCounter</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extends</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Counter</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>class</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>DecCounter</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extends</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Counter</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_identifier">public</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">decrement</span>(<span class="ltx_text ltx_lst_identifier">Counter</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">c</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_identifier'>public</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>decrement</span>(<span class='ltx_text ltx_lst_identifier'>Counter</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>c</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span>=<span class="ltx_text ltx_lst_space"> </span>(<span class="ltx_text ltx_lst_identifier">Counter</span>)((<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>)<span class="ltx_text ltx_lst_identifier">c</span><span class="ltx_text ltx_lst_space"> </span>-<span class="ltx_text ltx_lst_space"> </span>1); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span>=<span class='ltx_text ltx_lst_space'> </span>(<span class='ltx_text ltx_lst_identifier'>Counter</span>)((<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>)<span class='ltx_text ltx_lst_identifier'>c</span><span class='ltx_text ltx_lst_space'> </span>-<span class='ltx_text ltx_lst_space'> </span>1); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch9.S1.SS1.p2" class="ltx_para"> | <div id='Ch9.S1.SS1.p2' class='ltx_para'> |
<p class="ltx_p">The keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">extends</span> in line 1 signals that the class | <p class='ltx_p'>The keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>extends</span> in line 1 signals that the class |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">DecCounter</span> is derived from <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span>. Furthermore, there | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>DecCounter</span> is derived from <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span>. Furthermore, there |
is no class type definition as the class type is as well derived from class | is no class type definition as the class type is as well derived from class |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">Counter</span>. However, the class type can be accessed as if it had been | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>Counter</span>. However, the class type can be accessed as if it had been |
defined within the current class. | defined within the current class. |
</p> | </p> |
</div> | </div> |
</section> | </section> |
<section id="Ch9.S1.SS2" class="ltx_subsection"> | <section id='Ch9.S1.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">9.1.2 </span>States using Classes</h5> | <span class='ltx_tag ltx_tag_subsection'>9.1.2 </span>States using Classes</h5> |
| |
</section> | </section> |
<section id="Ch9.S1.SS3" class="ltx_subsection"> | <section id='Ch9.S1.SS3' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">9.1.3 </span>Global Objects</h5> | <span class='ltx_tag ltx_tag_subsection'>9.1.3 </span>Global Objects</h5> |
| |
</section> | </section> |
</section> | </section> |
<section id="Ch9.S2" class="ltx_section"> | <section id='Ch9.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">9.2 </span>Lesson: Nondeterminism through Shared State in Wihth-Loops</h4> | <span class='ltx_tag ltx_tag_section'>9.2 </span>Lesson: Nondeterminism through Shared State in Wihth-Loops</h4> |
| |
</section> | </section> |
</section> | </section> |
<section id="Ch10" class="ltx_chapter"> | <section id='Ch10' class='ltx_chapter'> |
<h3 class="ltx_title ltx_title_chapter"> | <h3 class='ltx_title ltx_title_chapter'> |
<span class="ltx_tag ltx_tag_chapter">Chapter 10 </span>Interfacing with Other Languages</h3> | <span class='ltx_tag ltx_tag_chapter'>Chapter 10 </span>Interfacing with Other Languages</h3> |
| |
<div id="Ch10.p1" class="ltx_para"> | <div id='Ch10.p1' class='ltx_para'> |
<p class="ltx_p">This trail explains on how to use <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from other languages | <p class='ltx_p'>This trail explains on how to use <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from other languages |
and how to integrate foreign libraries into <span class="ltx_text ltx_font_smallcaps">SaC</span> programs.</p> | and how to integrate foreign libraries into <span class='ltx_text ltx_font_smallcaps'>SaC</span> programs.</p> |
</div> | </div> |
<div id="Ch10.p2" class="ltx_para"> | <div id='Ch10.p2' class='ltx_para'> |
<p class="ltx_p">So far, we have four lessons. One that explains how to utilise | <p class='ltx_p'>So far, we have four lessons. One that explains how to utilise |
<em class="ltx_emph"><span class="ltx_text ltx_font_smallcaps">C</span> functions and libraries in <span class="ltx_text ltx_font_smallcaps">SaC</span></em> and three more lessons that explain how | <em class='ltx_emph'><span class='ltx_text ltx_font_smallcaps'>C</span> functions and libraries in <span class='ltx_text ltx_font_smallcaps'>SaC</span></em> and three more lessons that explain how |
to call <span class="ltx_text ltx_font_smallcaps">SaC</span> from the languages <span class="ltx_text ltx_font_smallcaps">C</span>, <span class="ltx_text ltx_font_smallcaps">C++</span>, and <span class="ltx_text ltx_font_smallcaps">Fortran</span>, respectively.</p> | to call <span class='ltx_text ltx_font_smallcaps'>SaC</span> from the languages <span class='ltx_text ltx_font_smallcaps'>C</span>, <span class='ltx_text ltx_font_smallcaps'>C++</span>, and <span class='ltx_text ltx_font_smallcaps'>Fortran</span>, respectively.</p> |
</div> | </div> |
<section id="Ch10.S1" class="ltx_section"> | <section id='Ch10.S1' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">10.1 </span>Lesson: Calling <span class="ltx_text ltx_font_smallcaps">C</span> from <span class="ltx_text ltx_font_smallcaps">SaC</span> | <span class='ltx_tag ltx_tag_section'>10.1 </span>Lesson: Calling <span class='ltx_text ltx_font_smallcaps'>C</span> from <span class='ltx_text ltx_font_smallcaps'>SaC</span> |
</h4> | </h4> |
| |
<section id="Ch10.S1.SS1" class="ltx_subsection"> | <section id='Ch10.S1.SS1' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">10.1.1 </span>Using <span class="ltx_text ltx_font_smallcaps">C</span> in the Small</h5> | <span class='ltx_tag ltx_tag_subsection'>10.1.1 </span>Using <span class='ltx_text ltx_font_smallcaps'>C</span> in the Small</h5> |
| |
<div id="Ch10.S1.SS1.p1" class="ltx_para"> | <div id='Ch10.S1.SS1.p1' class='ltx_para'> |
<p class="ltx_p">To make use of an external <span class="ltx_text ltx_font_smallcaps">C</span> function from within <span class="ltx_text ltx_font_smallcaps">SaC</span>, a prototype of the | <p class='ltx_p'>To make use of an external <span class='ltx_text ltx_font_smallcaps'>C</span> function from within <span class='ltx_text ltx_font_smallcaps'>SaC</span>, a prototype of the |
function must be defined in <span class="ltx_text ltx_font_smallcaps">SaC</span>. This is done by prefixing the function | function must be defined in <span class='ltx_text ltx_font_smallcaps'>SaC</span>. This is done by prefixing the function |
definition by the keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">extern</span> and leaving out the function body. Assume | definition by the keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>extern</span> and leaving out the function body. Assume |
having a function adding two integers specified in <span class="ltx_text ltx_font_smallcaps">C</span> as follows:</p> | having a function adding two integers specified in <span class='ltx_text ltx_font_smallcaps'>C</span> as follows:</p> |
</div> | </div> |
<figure id="LST48" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST48' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 48: </span>add function in C</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 48: </span>add function in C</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,aW50IGFkZChpbnQgeCwgaW50IHkpCnsKICByZXR1cm4geCArIHk7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,aW50IGFkZChpbnQgeCwgaW50IHkpCnsKICByZXR1cm4geCArIHk7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">add</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>) | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>add</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>) |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span><span class="ltx_text ltx_lst_space"> </span>+<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span><span class='ltx_text ltx_lst_space'> </span>+<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch10.S1.SS1.p2" class="ltx_para"> | <div id='Ch10.S1.SS1.p2' class='ltx_para'> |
<p class="ltx_p">Save the listing to file <span class="ltx_text ltx_font_typewriter">addfun.c</span> and compile it by <span class="ltx_text ltx_font_typewriter">gcc -c addfun.c</span> | <p class='ltx_p'>Save the listing to file <span class='ltx_text ltx_font_typewriter'>addfun.c</span> and compile it by <span class='ltx_text ltx_font_typewriter'>gcc -c addfun.c</span> |
supposed you are using the GNU compiler collection. This will generate a single | supposed you are using the GNU compiler collection. This will generate a single |
<span class="ltx_text ltx_font_typewriter">addfun.o</span> file. This can now be used from within <span class="ltx_text ltx_font_smallcaps">SaC</span>:</p> | <span class='ltx_text ltx_font_typewriter'>addfun.o</span> file. This can now be used from within <span class='ltx_text ltx_font_smallcaps'>SaC</span>:</p> |
</div> | </div> |
<figure id="LST49" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST49' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 49: </span>add function used by SaC</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 49: </span>add function used by SaC</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,ZXh0ZXJuIGludCBhZGQoaW50IHgsIGludCB5KTsKICAjcHJhZ21hIGV4dGVybmFsICJhZGRmdW4u%0AbyIKCmludCBtYWluKCkKewogIFN0ZElPOnByaW50ZigiMSBwbHVzIDEgaXMgJWQiLCBhZGQoIDEs%0AIDEpKTsKCiAgcmV0dXJuIDA7Cn0=%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,ZXh0ZXJuIGludCBhZGQoaW50IHgsIGludCB5KTsKICAjcHJhZ21hIGV4dGVybmFsICJhZGRmdW4u%0AbyIKCmludCBtYWluKCkKewogIFN0ZElPOnByaW50ZigiMSBwbHVzIDEgaXMgJWQiLCBhZGQoIDEs%0AIDEpKTsKCiAgcmV0dXJuIDA7Cn0=%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">add</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">x</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">y</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>add</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>x</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>y</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”addfun.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”addfun.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">main</span>() | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>main</span>() |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span>{ | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span>{ |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">StdIO</span>:<span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_string">”1<span class="ltx_text ltx_lst_space"> </span>plus<span class="ltx_text ltx_lst_space"> </span>1<span class="ltx_text ltx_lst_space"> </span>is<span class="ltx_text ltx_lst_space"> </span>%d”</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">add</span>(<span class="ltx_text ltx_lst_space"> </span>1,<span class="ltx_text ltx_lst_space"> </span>1)); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>StdIO</span>:<span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_string'>”1<span class='ltx_text ltx_lst_space'> </span>plus<span class='ltx_text ltx_lst_space'> </span>1<span class='ltx_text ltx_lst_space'> </span>is<span class='ltx_text ltx_lst_space'> </span>%d”</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>add</span>(<span class='ltx_text ltx_lst_space'> </span>1,<span class='ltx_text ltx_lst_space'> </span>1)); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">return</span><span class="ltx_text ltx_lst_space"> </span>0; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>return</span><span class='ltx_text ltx_lst_space'> </span>0; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span>} | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span>} |
</div> | </div> |
</div> | </div> |
</figure> | </figure> |
<div id="Ch10.S1.SS1.p3" class="ltx_para ltx_noindent"> | <div id='Ch10.S1.SS1.p3' class='ltx_para ltx_noindent'> |
<p class="ltx_p">The keyword <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold">external</span> directs the <span class="ltx_text ltx_font_smallcaps">SaC</span> compiler to assume an | <p class='ltx_p'>The keyword <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_keyword ltx_font_bold'>external</span> directs the <span class='ltx_text ltx_font_smallcaps'>SaC</span> compiler to assume an |
external definition of function <span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier">add</span>. The special directive | external definition of function <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_lst_identifier'>add</span>. The special directive |
<span class="ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting">#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”addfun.o”</span></span> makes the <span class="ltx_text ltx_font_smallcaps">SaC</span> linking process add | <span class='ltx_text ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting'>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”addfun.o”</span></span> makes the <span class='ltx_text ltx_font_smallcaps'>SaC</span> linking process add |
<span class="ltx_text ltx_font_typewriter">addfun.o</span> to the executable or module created.</p> | <span class='ltx_text ltx_font_typewriter'>addfun.o</span> to the executable or module created.</p> |
</div> | </div> |
<div id="Ch10.S1.SS1.p4" class="ltx_para"> | <div id='Ch10.S1.SS1.p4' class='ltx_para'> |
<p class="ltx_p">Save the listing above to a file <span class="ltx_text ltx_font_typewriter">addfun.sac</span> and compile it by using | <p class='ltx_p'>Save the listing above to a file <span class='ltx_text ltx_font_typewriter'>addfun.sac</span> and compile it by using |
<span class="ltx_text ltx_font_typewriter">sac2c -o addfun addfun.sac</span>. The resulting executable will contain both, the | <span class='ltx_text ltx_font_typewriter'>sac2c -o addfun addfun.sac</span>. The resulting executable will contain both, the |
<span class="ltx_text ltx_font_smallcaps">SaC</span> and <span class="ltx_text ltx_font_smallcaps">C</span> part of the program above.</p> | <span class='ltx_text ltx_font_smallcaps'>SaC</span> and <span class='ltx_text ltx_font_smallcaps'>C</span> part of the program above.</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch10.S1.SS2" class="ltx_subsection"> | <section id='Ch10.S1.SS2' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">10.1.2 </span>Stateful <span class="ltx_text ltx_font_smallcaps">C</span> functions</h5> | <span class='ltx_tag ltx_tag_subsection'>10.1.2 </span>Stateful <span class='ltx_text ltx_font_smallcaps'>C</span> functions</h5> |
| |
<div id="Ch10.S1.SS2.p1" class="ltx_para"> | <div id='Ch10.S1.SS2.p1' class='ltx_para'> |
<p class="ltx_p">dudu</p> | <p class='ltx_p'>dudu</p> |
</div> | </div> |
</section> | </section> |
<section id="Ch10.S1.SS3" class="ltx_subsection"> | <section id='Ch10.S1.SS3' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">10.1.3 </span>Using pragma directives</h5> | <span class='ltx_tag ltx_tag_subsection'>10.1.3 </span>Using pragma directives</h5> |
| |
<div id="Ch10.S1.SS3.p1" class="ltx_para"> | <div id='Ch10.S1.SS3.p1' class='ltx_para'> |
<p class="ltx_p">dada | <p class='ltx_p'>dada |
</p> | </p> |
</div> | </div> |
</section> | </section> |
<section id="Ch10.S1.SS4" class="ltx_subsection"> | <section id='Ch10.S1.SS4' class='ltx_subsection'> |
<h5 class="ltx_title ltx_title_subsection"> | <h5 class='ltx_title ltx_title_subsection'> |
<span class="ltx_tag ltx_tag_subsection">10.1.4 </span>Example TermFile</h5> | <span class='ltx_tag ltx_tag_subsection'>10.1.4 </span>Example TermFile</h5> |
| |
<figure id="LST50" class="ltx_float ltx_lstlisting ltx_role_listing"> | <figure id='LST50' class='ltx_float ltx_lstlisting ltx_role_listing'> |
<figcaption class="ltx_caption"><span class="ltx_tag ltx_tag_float">Listing 50: </span>class TermFile</figcaption> | <figcaption class='ltx_caption'><span class='ltx_tag ltx_tag_float'>Listing 50: </span>class TermFile</figcaption> |
<div class="ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing"> | <div class='ltx_listing ltx_lst_language_SaC ltx_lst_numbers_left ltx_lstlisting ltx_listing'> |
<div class="ltx_listing_data"><a href="data:text/plain;base64,Y2xhc3MgVGVybUZpbGU7CgpleHRlcm4gY2xhc3N0eXBlOwoKZnJvbSBUZXJtaW5hbCB1c2UgVGhl%0AVGVybWluYWw7CmZyb20gU3RyaW5nIHVzZSBzdHJpbmc7CgpleHRlcm4gb2JqZGVmIFRlcm1GaWxl%0AIHN0ZGluOwogICNwcmFnbWEgZXh0ZXJuYWwgIlNBQ3N0ZGluLm8iCiAgI3ByYWdtYSBsaW5rbmFt%0AZSAiU0FDc3RkaW4iCiAgI3ByYWdtYSBlZmZlY3QgVGhlVGVybWluYWwKCmV4dGVybiBvYmpkZWYg%0AVGVybUZpbGUgc3Rkb3V0OwogICNwcmFnbWEgZXh0ZXJuYWwgIlNBQ3N0ZG91dC5vIgogICNwcmFn%0AbWEgbGlua25hbWUgIlNBQ3N0ZG91dCIKICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbAoKZXh0%0AZXJuIG9iamRlZiBUZXJtRmlsZSBzdGRlcnI7CiAgI3ByYWdtYSBleHRlcm5hbCAiU0FDc3RkZXJy%0ALm8iCiAgI3ByYWdtYSBsaW5rbmFtZSAiU0FDc3RkZXJyIgogICNwcmFnbWEgZWZmZWN0IFRoZVRl%0Acm1pbmFsCgogIC8qCiAgICogIEVhY2ggZnVuY3Rpb24gb2YgY2xhc3MgVGVybUZpbGUgZXhpc3Rz%0AIGluIHR3byB2ZXJzaW9ucy4gT25lIGV4cGVjdHMKICAgKiAgYW4gSS9PIHN0cmVhbSBhcyBhbiBl%0AeHBsaWNpdCBhcmd1bWVudCwgdGhlIG90aGVyIHdyaXRlcyBpbXBsaWNpdGx5CiAgICogIHRvIHN0%0AZG91dCBvciByZWFkcyBpbXBsaWNpdGx5IGZyb20gc3RkaW4sIHJlc3BlY3RpdmVseS4KICAgKi8K%0ACiAgLyoKICAgKiAgRnVuY3Rpb25zIGZvciBsb3ctbGV2ZWwgaW5wdXQgLyBvdXRwdXQgb3BlcmF0%0AaW9ucwogICAqLwoKICAvKgogICAqIFB1dCB0aGUgY2hhcmFjdGVyIEMgdG8gdGhlIG91dHB1dCBz%0AdHJlYW0gU1RSRUFNIHdoaWNoIG11c3QgYmUKICAgKiBlaXRoZXIgc3Rkb3V0IG9yIHN0ZGVyci4K%0AICAgKi8KCiAgZXh0ZXJuIHZvaWQgZnB1dGMoY2hhciBDLCBUZXJtRmlsZSAmU1RSRUFNKTsKICAg%0AICNwcmFnbWEgZXh0ZXJuYWwKICAgICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsCgogIGV4dGVy%0AbiB2b2lkIHB1dGMoY2hhciBDKTsKICAgICNwcmFnbWEgZXh0ZXJuYWwgIlNBQ3B1dGMubyIKICAg%0AICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsLCBzdGRvdXQKICAgICNwcmFnbWEgbGlua25hbWUg%0AIlNBQ3B1dGMiCgogIC8qCiAgICogUHV0IHRoZSBjaGFyYWN0ZXIgQyBiYWNrIHRvIHRoZSBpbnB1%0AdCBzdHJlYW0gU1RSRUFNCiAgICogd2hpY2ggbXVzdCBiZSBzdGRpbiBmb3IgZnVydGhlciByZWFk%0AIG9wZXJhdGlvbnMuCiAgICogT25seSBvbmUgY2hhcmFjdGVyIG1heSBiZSBwdXQgYmFjayBiZXR3%0AZWVuIHR3bwogICAqIGNvbnNlY3V0aXZlIHJlYWQgb3BlcmF0aW9ucywgb3RoZXJ3aXNlIHRoZSBj%0AaGFyYWN0ZXIgcHV0IGJhY2sgZmlyc3QKICAgKiBpcyBvdmVyd3JpdHRlbi4KICAgKi8KCiAgZXh0%0AZXJuIHZvaWQgdW5nZXRjKGNoYXIgQywgVGVybUZpbGUgJlNUUkVBTSk7CiAgICAjcHJhZ21hIGV4%0AdGVybmFsCiAgICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbAogIGV4dGVybiB2b2lkIHVuZ2V0%0AYyhjaGFyIEMpOwogICAgI3ByYWdtYSBleHRlcm5hbCAiU0FDdW5nZXRjLm8iCiAgICAjcHJhZ21h%0AIGVmZmVjdCBUaGVUZXJtaW5hbCwgc3RkaW4KICAgICNwcmFnbWEgbGlua25hbWUgIlNBQ3VuZ2V0%0AYyIKCiAgLyoKICAgKiAgRnVuY3Rpb25zIGZvciBmb3JtYXR0ZWQgaW5wdXQgLyBvdXRwdXQgb3Bl%0AcmF0aW9ucwogICAqLwoKICAvKgogICAqIFByaW50IGZvcm1hdHRlZCBvdXRwdXQgdG8gU1RSRUFN%0AIHdoaWNoIG11c3QgYmUgb3BlbiBmb3Igd3JpdGluZy4KICAgKiBUaGUgc3ludGF4IG9mIGZvcm1h%0AdCBzdHJpbmdzIGlzIGlkZW50aWNhbCB0byB0aGF0IGtub3duIGZyb20gQy4KICAgKiBUaGlzIGZ1%0AbmN0aW9uIG1heSBiZSB1c2VkIHRvIHByaW50IHZhbHVlcyBvZiB0eXBlcwogICAqIGNoYXIsIHN0%0AcmluZywgaW50LCBmbG9hdCwgYW5kIGRvdWJsZS4KICAgKi8KCiAgZXh0ZXJuIHZvaWQgZnByaW50%0AZihUZXJtRmlsZSAmU1RSRUFNLCBzdHJpbmcgRk9STUFULCAuLi4pOwogICAgI3ByYWdtYSBleHRl%0Acm5hbCAiU0FDZnByaW50Zl9URi5vIgogICAgI3ByYWdtYSBlZmZlY3QgVGhlVGVybWluYWwKICAg%0AICNwcmFnbWEgbGlua25hbWUgIlNBQ2ZwcmludGZfVEYiCiAgZXh0ZXJuIHZvaWQgIHByaW50Zihz%0AdHJpbmcgRk9STUFULCAuLi4pOwogICAgI3ByYWdtYSBleHRlcm5hbCAiU0FDcHJpbnRmLm8iCiAg%0AICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbCwgc3Rkb3V0CiAgICAjcHJhZ21hIGxpbmtuYW1l%0AICJTQUNwcmludGYiCgogIC8qCiAgICogU2NhbiB0aGUgZ2l2ZW4gc3RyZWFtIFNUUkVBTSBjb25j%0AZXJuaW5nIHRoZSBmb3JtYXQgc3RyaW5nIEZPUk1BVC4KICAgKiBUaGUgc3ludGF4IG9mIGZvcm1h%0AdCBzdHJpbmdzIGlzIGlkZW50aWNhbCB0byBDIGV4Y2VwdCB0aGF0IHRoZQogICAqIHN0cmluZyBj%0Ab252ZXJzaW9uIHNwZWNpZmllciAlcyBpcyBub3Qgc3VwcG9ydGVkLgogICAqIFRoaXMgZnVuY3Rp%0Ab24gbWF5IGJlIHVzZWQgdG8gc2NhbiB2YWx1ZXMgb2YgdHlwZXMKICAgKiBjaGFyLCBpbnQsIGZs%0Ab2F0LCBhbmQgZG91YmxlLiBUbyBzY2FuIHN0cmluZ3MgdXNlIGVpdGhlciBmc2NhbnMKICAgKiBv%0AciBmc2NhbmwsIHJlc3BlY3RpdmVseS4KICAgKiBUaGUgaW50IHJlc3VsdCBnaXZlcyB0aGUgbnVt%0AYmVyIG9mIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQKICAgKiBjb252ZXJzaW9ucy4KICAgKi8KCiAg%0AZXh0ZXJuIGludCwgLi4uIGZzY2FuZihUZXJtRmlsZSAmU1RSRUFNLCBzdHJpbmcgRk9STUFUKTsK%0AICAgICNwcmFnbWEgZXh0ZXJuYWwKICAgICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsCiAgZXh0%0AZXJuIGludCwgLi4uICBzY2FuZihzdHJpbmcgRk9STUFUKTsKICAgICNwcmFnbWEgZXh0ZXJuYWwK%0AICAgICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsLCBzdGRpbgoKICAgLyoKICAgICogUmVhZCB0%0AaGUgbmV4dCBjaGFyYWN0ZXIgc3RyaW5nIGZyb20gdGhlIGlucHV0IHN0cmVhbSBTVFJFQU0uIFN0%0AcmluZ3MKICAgICogYXJlIGRlbGltaXRlZCBieSBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW5j%0AbHVkaW5nIHRoZQogICAgKiBlbmQtb2YtZmlsZSBzeW1ib2wuIEFsd2F5cyByZWFkIGF0IG1vc3Qg%0ATUFYIGNoYXJhY3RlcnMuCiAgICAqIFVwb24gZmFpbHVyZSBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0%0AdXJuZWQuCiAgICAqLwoKICBleHRlcm4gc3RyaW5nIGZzY2FucyhUZXJtRmlsZSAmU1RSRUFNLCBp%0AbnQgTUFYKTsKICAgICNwcmFnbWEgZXh0ZXJuYWwgInRlcm1fZnNjYW5zLm8iCiAgICAjcHJhZ21h%0AIGVmZmVjdCBUaGVUZXJtaW5hbAogICAgI3ByYWdtYSBsaW5rbmFtZSAidGVybV9mc2NhbnMiCiAg%0AZXh0ZXJuIHN0cmluZyAgc2NhbnMoaW50IE1BWCk7CiAgICAjcHJhZ21hIGV4dGVybmFsICJ0ZXJt%0AX3NjYW5zLm8iCiAgICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbCwgc3RkaW4KICAgICNwcmFn%0AbWEgbGlua25hbWUgInRlcm1fc2NhbnMi%0A">⬇</a></div> | <div class='ltx_listing_data'><a href='data:text/plain;base64,Y2xhc3MgVGVybUZpbGU7CgpleHRlcm4gY2xhc3N0eXBlOwoKZnJvbSBUZXJtaW5hbCB1c2UgVGhl%0AVGVybWluYWw7CmZyb20gU3RyaW5nIHVzZSBzdHJpbmc7CgpleHRlcm4gb2JqZGVmIFRlcm1GaWxl%0AIHN0ZGluOwogICNwcmFnbWEgZXh0ZXJuYWwgIlNBQ3N0ZGluLm8iCiAgI3ByYWdtYSBsaW5rbmFt%0AZSAiU0FDc3RkaW4iCiAgI3ByYWdtYSBlZmZlY3QgVGhlVGVybWluYWwKCmV4dGVybiBvYmpkZWYg%0AVGVybUZpbGUgc3Rkb3V0OwogICNwcmFnbWEgZXh0ZXJuYWwgIlNBQ3N0ZG91dC5vIgogICNwcmFn%0AbWEgbGlua25hbWUgIlNBQ3N0ZG91dCIKICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbAoKZXh0%0AZXJuIG9iamRlZiBUZXJtRmlsZSBzdGRlcnI7CiAgI3ByYWdtYSBleHRlcm5hbCAiU0FDc3RkZXJy%0ALm8iCiAgI3ByYWdtYSBsaW5rbmFtZSAiU0FDc3RkZXJyIgogICNwcmFnbWEgZWZmZWN0IFRoZVRl%0Acm1pbmFsCgogIC8qCiAgICogIEVhY2ggZnVuY3Rpb24gb2YgY2xhc3MgVGVybUZpbGUgZXhpc3Rz%0AIGluIHR3byB2ZXJzaW9ucy4gT25lIGV4cGVjdHMKICAgKiAgYW4gSS9PIHN0cmVhbSBhcyBhbiBl%0AeHBsaWNpdCBhcmd1bWVudCwgdGhlIG90aGVyIHdyaXRlcyBpbXBsaWNpdGx5CiAgICogIHRvIHN0%0AZG91dCBvciByZWFkcyBpbXBsaWNpdGx5IGZyb20gc3RkaW4sIHJlc3BlY3RpdmVseS4KICAgKi8K%0ACiAgLyoKICAgKiAgRnVuY3Rpb25zIGZvciBsb3ctbGV2ZWwgaW5wdXQgLyBvdXRwdXQgb3BlcmF0%0AaW9ucwogICAqLwoKICAvKgogICAqIFB1dCB0aGUgY2hhcmFjdGVyIEMgdG8gdGhlIG91dHB1dCBz%0AdHJlYW0gU1RSRUFNIHdoaWNoIG11c3QgYmUKICAgKiBlaXRoZXIgc3Rkb3V0IG9yIHN0ZGVyci4K%0AICAgKi8KCiAgZXh0ZXJuIHZvaWQgZnB1dGMoY2hhciBDLCBUZXJtRmlsZSAmU1RSRUFNKTsKICAg%0AICNwcmFnbWEgZXh0ZXJuYWwKICAgICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsCgogIGV4dGVy%0AbiB2b2lkIHB1dGMoY2hhciBDKTsKICAgICNwcmFnbWEgZXh0ZXJuYWwgIlNBQ3B1dGMubyIKICAg%0AICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsLCBzdGRvdXQKICAgICNwcmFnbWEgbGlua25hbWUg%0AIlNBQ3B1dGMiCgogIC8qCiAgICogUHV0IHRoZSBjaGFyYWN0ZXIgQyBiYWNrIHRvIHRoZSBpbnB1%0AdCBzdHJlYW0gU1RSRUFNCiAgICogd2hpY2ggbXVzdCBiZSBzdGRpbiBmb3IgZnVydGhlciByZWFk%0AIG9wZXJhdGlvbnMuCiAgICogT25seSBvbmUgY2hhcmFjdGVyIG1heSBiZSBwdXQgYmFjayBiZXR3%0AZWVuIHR3bwogICAqIGNvbnNlY3V0aXZlIHJlYWQgb3BlcmF0aW9ucywgb3RoZXJ3aXNlIHRoZSBj%0AaGFyYWN0ZXIgcHV0IGJhY2sgZmlyc3QKICAgKiBpcyBvdmVyd3JpdHRlbi4KICAgKi8KCiAgZXh0%0AZXJuIHZvaWQgdW5nZXRjKGNoYXIgQywgVGVybUZpbGUgJlNUUkVBTSk7CiAgICAjcHJhZ21hIGV4%0AdGVybmFsCiAgICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbAogIGV4dGVybiB2b2lkIHVuZ2V0%0AYyhjaGFyIEMpOwogICAgI3ByYWdtYSBleHRlcm5hbCAiU0FDdW5nZXRjLm8iCiAgICAjcHJhZ21h%0AIGVmZmVjdCBUaGVUZXJtaW5hbCwgc3RkaW4KICAgICNwcmFnbWEgbGlua25hbWUgIlNBQ3VuZ2V0%0AYyIKCiAgLyoKICAgKiAgRnVuY3Rpb25zIGZvciBmb3JtYXR0ZWQgaW5wdXQgLyBvdXRwdXQgb3Bl%0AcmF0aW9ucwogICAqLwoKICAvKgogICAqIFByaW50IGZvcm1hdHRlZCBvdXRwdXQgdG8gU1RSRUFN%0AIHdoaWNoIG11c3QgYmUgb3BlbiBmb3Igd3JpdGluZy4KICAgKiBUaGUgc3ludGF4IG9mIGZvcm1h%0AdCBzdHJpbmdzIGlzIGlkZW50aWNhbCB0byB0aGF0IGtub3duIGZyb20gQy4KICAgKiBUaGlzIGZ1%0AbmN0aW9uIG1heSBiZSB1c2VkIHRvIHByaW50IHZhbHVlcyBvZiB0eXBlcwogICAqIGNoYXIsIHN0%0AcmluZywgaW50LCBmbG9hdCwgYW5kIGRvdWJsZS4KICAgKi8KCiAgZXh0ZXJuIHZvaWQgZnByaW50%0AZihUZXJtRmlsZSAmU1RSRUFNLCBzdHJpbmcgRk9STUFULCAuLi4pOwogICAgI3ByYWdtYSBleHRl%0Acm5hbCAiU0FDZnByaW50Zl9URi5vIgogICAgI3ByYWdtYSBlZmZlY3QgVGhlVGVybWluYWwKICAg%0AICNwcmFnbWEgbGlua25hbWUgIlNBQ2ZwcmludGZfVEYiCiAgZXh0ZXJuIHZvaWQgIHByaW50Zihz%0AdHJpbmcgRk9STUFULCAuLi4pOwogICAgI3ByYWdtYSBleHRlcm5hbCAiU0FDcHJpbnRmLm8iCiAg%0AICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbCwgc3Rkb3V0CiAgICAjcHJhZ21hIGxpbmtuYW1l%0AICJTQUNwcmludGYiCgogIC8qCiAgICogU2NhbiB0aGUgZ2l2ZW4gc3RyZWFtIFNUUkVBTSBjb25j%0AZXJuaW5nIHRoZSBmb3JtYXQgc3RyaW5nIEZPUk1BVC4KICAgKiBUaGUgc3ludGF4IG9mIGZvcm1h%0AdCBzdHJpbmdzIGlzIGlkZW50aWNhbCB0byBDIGV4Y2VwdCB0aGF0IHRoZQogICAqIHN0cmluZyBj%0Ab252ZXJzaW9uIHNwZWNpZmllciAlcyBpcyBub3Qgc3VwcG9ydGVkLgogICAqIFRoaXMgZnVuY3Rp%0Ab24gbWF5IGJlIHVzZWQgdG8gc2NhbiB2YWx1ZXMgb2YgdHlwZXMKICAgKiBjaGFyLCBpbnQsIGZs%0Ab2F0LCBhbmQgZG91YmxlLiBUbyBzY2FuIHN0cmluZ3MgdXNlIGVpdGhlciBmc2NhbnMKICAgKiBv%0AciBmc2NhbmwsIHJlc3BlY3RpdmVseS4KICAgKiBUaGUgaW50IHJlc3VsdCBnaXZlcyB0aGUgbnVt%0AYmVyIG9mIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQKICAgKiBjb252ZXJzaW9ucy4KICAgKi8KCiAg%0AZXh0ZXJuIGludCwgLi4uIGZzY2FuZihUZXJtRmlsZSAmU1RSRUFNLCBzdHJpbmcgRk9STUFUKTsK%0AICAgICNwcmFnbWEgZXh0ZXJuYWwKICAgICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsCiAgZXh0%0AZXJuIGludCwgLi4uICBzY2FuZihzdHJpbmcgRk9STUFUKTsKICAgICNwcmFnbWEgZXh0ZXJuYWwK%0AICAgICNwcmFnbWEgZWZmZWN0IFRoZVRlcm1pbmFsLCBzdGRpbgoKICAgLyoKICAgICogUmVhZCB0%0AaGUgbmV4dCBjaGFyYWN0ZXIgc3RyaW5nIGZyb20gdGhlIGlucHV0IHN0cmVhbSBTVFJFQU0uIFN0%0AcmluZ3MKICAgICogYXJlIGRlbGltaXRlZCBieSBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW5j%0AbHVkaW5nIHRoZQogICAgKiBlbmQtb2YtZmlsZSBzeW1ib2wuIEFsd2F5cyByZWFkIGF0IG1vc3Qg%0ATUFYIGNoYXJhY3RlcnMuCiAgICAqIFVwb24gZmFpbHVyZSBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0%0AdXJuZWQuCiAgICAqLwoKICBleHRlcm4gc3RyaW5nIGZzY2FucyhUZXJtRmlsZSAmU1RSRUFNLCBp%0AbnQgTUFYKTsKICAgICNwcmFnbWEgZXh0ZXJuYWwgInRlcm1fZnNjYW5zLm8iCiAgICAjcHJhZ21h%0AIGVmZmVjdCBUaGVUZXJtaW5hbAogICAgI3ByYWdtYSBsaW5rbmFtZSAidGVybV9mc2NhbnMiCiAg%0AZXh0ZXJuIHN0cmluZyAgc2NhbnMoaW50IE1BWCk7CiAgICAjcHJhZ21hIGV4dGVybmFsICJ0ZXJt%0AX3NjYW5zLm8iCiAgICAjcHJhZ21hIGVmZmVjdCBUaGVUZXJtaW5hbCwgc3RkaW4KICAgICNwcmFn%0AbWEgbGlua25hbWUgInRlcm1fc2NhbnMi%0A'>⬇</a></div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">1</span></span><span class="ltx_text ltx_lst_keyword ltx_font_bold">class</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TermFile</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>1</span></span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>class</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TermFile</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">2</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>2</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">3</span></span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">classtype</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>3</span></span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>classtype</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">4</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>4</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">5</span></span><span class="ltx_text ltx_lst_identifier">from</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">Terminal</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>5</span></span><span class='ltx_text ltx_lst_identifier'>from</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>Terminal</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">6</span></span><span class="ltx_text ltx_lst_identifier">from</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">String</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">use</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">string</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>6</span></span><span class='ltx_text ltx_lst_identifier'>from</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>String</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>use</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>string</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">7</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>7</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">8</span></span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ob</span>j<span class="ltx_text ltx_lst_identifier">def</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdin</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>8</span></span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ob</span>j<span class='ltx_text ltx_lst_identifier'>def</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdin</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">9</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACstdin.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>9</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACstdin.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">10</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACstdin”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>10</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACstdin”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">11</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>11</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">12</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>12</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">13</span></span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ob</span>j<span class="ltx_text ltx_lst_identifier">def</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdout</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>13</span></span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ob</span>j<span class='ltx_text ltx_lst_identifier'>def</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdout</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">14</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACstdout.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>14</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACstdout.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">15</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACstdout”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>15</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACstdout”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">16</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>16</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">17</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>17</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">18</span></span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ob</span>j<span class="ltx_text ltx_lst_identifier">def</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stderr</span>; | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>18</span></span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ob</span>j<span class='ltx_text ltx_lst_identifier'>def</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stderr</span>; |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">19</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACstderr.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>19</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACstderr.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">20</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACstderr”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>20</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACstderr”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">21</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>21</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">22</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>22</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">23</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>23</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">24</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Each</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">function</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">of</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">class</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">TermFile</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">exists</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">in</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">two</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">versions.</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">One</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">expects</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>24</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Each</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>function</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>of</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>class</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>TermFile</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>exists</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>in</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>two</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>versions.</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>One</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>expects</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">25</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">an</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">I/O</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stream</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">as</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">an</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">explicit</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">argument,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">other</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">writes</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">implicitly</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>25</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>an</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>I/O</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stream</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>as</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>an</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>explicit</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>argument,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>other</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>writes</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>implicitly</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">26</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stdout</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">or</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">reads</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">implicitly</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">from</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stdin,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">respectively.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>26</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stdout</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>or</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>reads</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>implicitly</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>from</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stdin,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>respectively.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">27</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>27</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">28</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>28</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">29</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>29</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">30</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Functions</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">for</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">low-level</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">input</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">/</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">output</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">operations</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>30</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Functions</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>for</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>low-level</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>input</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>/</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>output</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>operations</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">31</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>31</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">32</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>32</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">33</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>33</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">34</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Put</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">character</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">C</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">output</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stream</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">STREAM</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">which</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">must</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>34</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Put</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>character</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>C</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>output</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stream</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>STREAM</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>which</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>must</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">35</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">either</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stdout</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">or</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stderr.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>35</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>either</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stdout</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>or</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stderr.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">36</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>36</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">37</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>37</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">38</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fputc</span>(<span class="ltx_text ltx_lst_identifier">char</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">C</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">STREAM</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>38</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fputc</span>(<span class='ltx_text ltx_lst_identifier'>char</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>C</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>STREAM</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">39</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>39</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">40</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>40</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">41</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>41</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">42</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">putc</span>(<span class="ltx_text ltx_lst_identifier">char</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">C</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>42</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>putc</span>(<span class='ltx_text ltx_lst_identifier'>char</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>C</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">43</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACputc.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>43</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACputc.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">44</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdout</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>44</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdout</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">45</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACputc”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>45</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACputc”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">46</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>46</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">47</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>47</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">48</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Put</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">character</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">C</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">back</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">input</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stream</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">STREAM</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>48</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Put</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>character</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>C</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>back</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>input</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stream</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>STREAM</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">49</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">which</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">must</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stdin</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">for</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">further</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">read</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">operations.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>49</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>which</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>must</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stdin</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>for</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>further</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>read</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>operations.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">50</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Only</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">one</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">character</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">may</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">put</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">back</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">between</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">two</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>50</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Only</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>one</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>character</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>may</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>put</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>back</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>between</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>two</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">51</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">consecutive</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">read</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">operations,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">otherwise</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">character</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">put</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">back</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">first</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>51</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>consecutive</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>read</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>operations,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>otherwise</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>character</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>put</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>back</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>first</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">52</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">is</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">overwritten.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>52</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>is</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>overwritten.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">53</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>53</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">54</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>54</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">55</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ungetc</span>(<span class="ltx_text ltx_lst_identifier">char</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">C</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">STREAM</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>55</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ungetc</span>(<span class='ltx_text ltx_lst_identifier'>char</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>C</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>STREAM</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">56</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>56</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">57</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>57</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">58</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">ungetc</span>(<span class="ltx_text ltx_lst_identifier">char</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">C</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>58</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>ungetc</span>(<span class='ltx_text ltx_lst_identifier'>char</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>C</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">59</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACungetc.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>59</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACungetc.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">60</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdin</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>60</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdin</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">61</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACungetc”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>61</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACungetc”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">62</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>62</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">63</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>63</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">64</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Functions</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">for</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">formatted</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">input</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">/</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">output</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">operations</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>64</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Functions</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>for</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>formatted</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>input</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>/</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>output</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>operations</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">65</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>65</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">66</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>66</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">67</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>67</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">68</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Print</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">formatted</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">output</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">STREAM</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">which</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">must</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">open</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">for</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">writing.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>68</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Print</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>formatted</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>output</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>STREAM</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>which</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>must</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>open</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>for</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>writing.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">69</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">The</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">syntax</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">of</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">format</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">strings</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">is</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">identical</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">that</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">known</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">from</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">C.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>69</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>The</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>syntax</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>of</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>format</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>strings</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>is</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>identical</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>that</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>known</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>from</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>C.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">70</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">This</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">function</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">may</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">used</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">print</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">values</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">of</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">types</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>70</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>This</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>function</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>may</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>used</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>print</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>values</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>of</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>types</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">71</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">char,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">string,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">int,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">float,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">and</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">double.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>71</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>char,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>string,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>int,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>float,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>and</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>double.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">72</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>72</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">73</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>73</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">74</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fprintf</span>(<span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">STREAM</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">string</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">FORMAT</span>,<span class="ltx_text ltx_lst_space"> </span>…); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>74</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fprintf</span>(<span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>STREAM</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>string</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>FORMAT</span>,<span class='ltx_text ltx_lst_space'> </span>…); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">75</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACfprintf_TF.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>75</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACfprintf_TF.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">76</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>76</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">77</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACfprintf_TF”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>77</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACfprintf_TF”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">78</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">void</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">printf</span>(<span class="ltx_text ltx_lst_identifier">string</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">FORMAT</span>,<span class="ltx_text ltx_lst_space"> </span>…); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>78</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>void</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>printf</span>(<span class='ltx_text ltx_lst_identifier'>string</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>FORMAT</span>,<span class='ltx_text ltx_lst_space'> </span>…); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">79</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACprintf.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>79</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACprintf.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">80</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdout</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>80</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdout</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">81</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”SACprintf”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>81</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”SACprintf”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">82</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>82</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">83</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>83</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">84</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Scan</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">given</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stream</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">STREAM</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">concerning</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">format</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">string</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">FORMAT.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>84</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Scan</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>given</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stream</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>STREAM</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>concerning</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>format</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>string</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>FORMAT.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">85</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">The</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">syntax</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">of</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">format</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">strings</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">is</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">identical</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">C</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">except</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">that</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>85</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>The</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>syntax</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>of</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>format</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>strings</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>is</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>identical</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>C</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>except</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>that</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">86</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">string</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">conversion</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">specifier</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">%s</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">is</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">not</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">supported.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>86</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>string</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>conversion</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>specifier</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>%s</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>is</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>not</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>supported.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">87</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">This</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">function</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">may</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">be</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">used</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">to</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">scan</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">values</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">of</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">types</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>87</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>This</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>function</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>may</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>be</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>used</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>to</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>scan</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>values</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>of</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>types</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">88</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">char,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">int,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">float,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">and</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">double.</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">To</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">scan</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">strings</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">use</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">either</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">fscans</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>88</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>char,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>int,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>float,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>and</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>double.</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>To</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>scan</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>strings</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>use</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>either</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>fscans</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">89</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">or</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">fscanl,</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">respectively.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>89</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>or</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>fscanl,</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>respectively.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">90</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">The</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">int</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">result</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">gives</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">number</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">of</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">successfully</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">performed</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>90</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>The</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>int</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>result</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>gives</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>number</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>of</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>successfully</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>performed</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">91</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">conversions.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>91</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>conversions.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">92</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>92</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">93</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>93</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">94</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>,<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fscanf</span>(<span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">STREAM</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">string</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">FORMAT</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>94</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>,<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fscanf</span>(<span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>STREAM</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>string</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>FORMAT</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">95</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>95</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">96</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>96</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">97</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span>,<span class="ltx_text ltx_lst_space"> </span>…<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">scanf</span>(<span class="ltx_text ltx_lst_identifier">string</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">FORMAT</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>97</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span>,<span class='ltx_text ltx_lst_space'> </span>…<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>scanf</span>(<span class='ltx_text ltx_lst_identifier'>string</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>FORMAT</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">98</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>98</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">99</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdin</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>99</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdin</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">100</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>100</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">101</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_comment ltx_font_italic">/*</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>101</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_comment ltx_font_italic'>/*</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">102</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Read</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">next</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">character</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">string</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">from</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">input</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">stream</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">STREAM.</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Strings</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>102</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Read</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>next</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>character</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>string</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>from</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>input</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>stream</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>STREAM.</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Strings</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">103</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">are</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">delimited</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">by</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">any</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">whitespace</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">character</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">including</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">the</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>103</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>are</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>delimited</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>by</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>any</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>whitespace</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>character</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>including</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>the</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">104</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">end-of-file</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">symbol.</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Always</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">read</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">at</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">most</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">MAX</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">characters.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>104</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>end-of-file</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>symbol.</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Always</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>read</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>at</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>most</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>MAX</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>characters.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">105</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">Upon</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">failure</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">an</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">empty</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">string</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">is</span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">returned.</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>105</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>Upon</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>failure</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>an</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>empty</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>string</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>is</span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>returned.</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text ltx_font_italic" style="color:#BFBFBF;">106</span></span><span class="ltx_text ltx_lst_space ltx_font_italic"> </span><span class="ltx_text ltx_font_italic">*/</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text ltx_font_italic' style='color:#BFBFBF;'>106</span></span><span class='ltx_text ltx_lst_space ltx_font_italic'> </span><span class='ltx_text ltx_font_italic'>*/</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">107</span></span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>107</span></span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">108</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">string</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">fscans</span>(<span class="ltx_text ltx_lst_identifier">TermFile</span><span class="ltx_text ltx_lst_space"> </span>&<span class="ltx_text ltx_lst_identifier">STREAM</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">MAX</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>108</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>string</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>fscans</span>(<span class='ltx_text ltx_lst_identifier'>TermFile</span><span class='ltx_text ltx_lst_space'> </span>&<span class='ltx_text ltx_lst_identifier'>STREAM</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>MAX</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">109</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”term_fscans.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>109</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”term_fscans.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">110</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>110</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">111</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”term_fscans”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>111</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”term_fscans”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">112</span></span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">extern</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">string</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">scans</span>(<span class="ltx_text ltx_lst_keyword ltx_font_bold">int</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">MAX</span>); | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>112</span></span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>extern</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>string</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>scans</span>(<span class='ltx_text ltx_lst_keyword ltx_font_bold'>int</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>MAX</span>); |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">113</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_keyword ltx_font_bold">external</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”term_scans.o”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>113</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_keyword ltx_font_bold'>external</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”term_scans.o”</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">114</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">effect</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">TheTerminal</span>,<span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">stdin</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>114</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>effect</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>TheTerminal</span>,<span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>stdin</span> |
</div> | </div> |
<div class="ltx_listingline"> | <div class='ltx_listingline'> |
<span class="ltx_tag ltx_tag_listing"><span class="ltx_text" style="color:#BFBFBF;">115</span></span><span class="ltx_text ltx_lst_space"> </span>#<span class="ltx_text ltx_lst_keyword ltx_font_bold">pragma</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_identifier">linkname</span><span class="ltx_text ltx_lst_space"> </span><span class="ltx_text ltx_lst_string">”term_scans”</span> | <span class='ltx_tag ltx_tag_listing'><span class='ltx_text' style='color:#BFBFBF;'>115</span></span><span class='ltx_text ltx_lst_space'> </span>#<span class='ltx_text ltx_lst_keyword ltx_font_bold'>pragma</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_identifier'>linkname</span><span class='ltx_text ltx_lst_space'> </span><span class='ltx_text ltx_lst_string'>”term_scans”</span> |
</div> | </div> |
</div> | </div> |
</section> | </section> |
</section> | </section> |
<section id="Ch10.S2" class="ltx_section"> | <section id='Ch10.S2' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">10.2 </span>Lesson: Using <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from <span class="ltx_text ltx_font_smallcaps">C</span> | <span class='ltx_tag ltx_tag_section'>10.2 </span>Lesson: Using <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from <span class='ltx_text ltx_font_smallcaps'>C</span> |
</h4> | </h4> |
| |
</section> | </section> |
<section id="Ch10.S3" class="ltx_section"> | <section id='Ch10.S3' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">10.3 </span>Lesson: Using <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from <span class="ltx_text ltx_font_smallcaps">C++</span> | <span class='ltx_tag ltx_tag_section'>10.3 </span>Lesson: Using <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from <span class='ltx_text ltx_font_smallcaps'>C++</span> |
</h4> | </h4> |
| |
</section> | </section> |
<section id="Ch10.S4" class="ltx_section"> | <section id='Ch10.S4' class='ltx_section'> |
<h4 class="ltx_title ltx_title_section"> | <h4 class='ltx_title ltx_title_section'> |
<span class="ltx_tag ltx_tag_section">10.4 </span>Lesson: Using <span class="ltx_text ltx_font_smallcaps">SaC</span> libraries from <span class="ltx_text ltx_font_smallcaps">Fortran</span> | <span class='ltx_tag ltx_tag_section'>10.4 </span>Lesson: Using <span class='ltx_text ltx_font_smallcaps'>SaC</span> libraries from <span class='ltx_text ltx_font_smallcaps'>Fortran</span> |
</h4> | </h4> |
| |
</article> | </article> |
</div> | </div> |
<footer class="ltx_page_footer"> | <footer class='ltx_page_footer'> |
<div class="ltx_page_logo">Generated on Wed Nov 30 11:29:29 2016 by <a href="http://dlmf.nist.gov/LaTeXML/">LaTeXML <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wKExQZLWTEaOUAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAdpJREFUKM9tkL+L2nAARz9fPZNCKFapUn8kyI0e4iRHSR1Kb8ng0lJw6FYHFwv2LwhOpcWxTjeUunYqOmqd6hEoRDhtDWdA8ApRYsSUCDHNt5ul13vz4w0vWCgUnnEc975arX6ORqN3VqtVZbfbTQC4uEHANM3jSqXymFI6yWazP2KxWAXAL9zCUa1Wy2tXVxheKA9YNoR8Pt+aTqe4FVVVvz05O6MBhqUIBGk8Hn8HAOVy+T+XLJfLS4ZhTiRJgqIoVBRFIoric47jPnmeB1mW/9rr9ZpSSn3Lsmir1fJZlqWlUonKsvwWwD8ymc/nXwVBeLjf7xEKhdBut9Hr9WgmkyGEkJwsy5eHG5vN5g0AKIoCAEgkEkin0wQAfN9/cXPdheu6P33fBwB4ngcAcByHJpPJl+fn54mD3Gg0NrquXxeLRQAAwzAYj8cwTZPwPH9/sVg8PXweDAauqqr2cDjEer1GJBLBZDJBs9mE4zjwfZ85lAGg2+06hmGgXq+j3+/DsixYlgVN03a9Xu8jgCNCyIegIAgx13Vfd7vdu+FweG8YRkjXdWy329+dTgeSJD3ieZ7RNO0VAXAPwDEAO5VKndi2fWrb9jWl9Esul6PZbDY9Go1OZ7PZ9z/lyuD3OozU2wAAAABJRU5ErkJggg==" alt="[LOGO]"></a> | <div class='ltx_page_logo'>Generated on Wed Nov 30 17:23:47 2016 by <a href='http://dlmf.nist.gov/LaTeXML/'>LaTeXML <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wKExQZLWTEaOUAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAdpJREFUKM9tkL+L2nAARz9fPZNCKFapUn8kyI0e4iRHSR1Kb8ng0lJw6FYHFwv2LwhOpcWxTjeUunYqOmqd6hEoRDhtDWdA8ApRYsSUCDHNt5ul13vz4w0vWCgUnnEc975arX6ORqN3VqtVZbfbTQC4uEHANM3jSqXymFI6yWazP2KxWAXAL9zCUa1Wy2tXVxheKA9YNoR8Pt+aTqe4FVVVvz05O6MBhqUIBGk8Hn8HAOVy+T+XLJfLS4ZhTiRJgqIoVBRFIoric47jPnmeB1mW/9rr9ZpSSn3Lsmir1fJZlqWlUonKsvwWwD8ymc/nXwVBeLjf7xEKhdBut9Hr9WgmkyGEkJwsy5eHG5vN5g0AKIoCAEgkEkin0wQAfN9/cXPdheu6P33fBwB4ngcAcByHJpPJl+fn54mD3Gg0NrquXxeLRQAAwzAYj8cwTZPwPH9/sVg8PXweDAauqqr2cDjEer1GJBLBZDJBs9mE4zjwfZ85lAGg2+06hmGgXq+j3+/DsixYlgVN03a9Xu8jgCNCyIegIAgx13Vfd7vdu+FweG8YRkjXdWy329+dTgeSJD3ieZ7RNO0VAXAPwDEAO5VKndi2fWrb9jWl9Esul6PZbDY9Go1OZ7PZ9z/lyuD3OozU2wAAAABJRU5ErkJggg==' alt='[LOGO]'></a> |
</div></footer> | </div></footer> |
</div> | </div> |