<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=Presenters</id>
	<title>Presenters - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=Presenters"/>
	<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;action=history"/>
	<updated>2026-04-04T08:00:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4631&amp;oldid=prev</id>
		<title>Thomas Linder Puls: expand native</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4631&amp;oldid=prev"/>
		<updated>2019-07-01T13:43:10Z</updated>

		<summary type="html">&lt;p&gt;expand native&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:43, 1 July 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l151&quot;&gt;Line 151:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 151:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;expand&amp;lt;/vp&amp;gt; alternative it used to provide a string &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; for an &amp;quot;non-atomic&amp;quot; value.  The value will be  presented as &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; and will expand it as it would expand the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt;.  The &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;debuger &lt;/del&gt;also &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;obtains &lt;/del&gt;the type from &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt;.  The &amp;lt;vp&amp;gt;expand&amp;lt;/vp&amp;gt; alternative could for example be used for a functor term containing date and time fields like year, month, date, hour and minute; the &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; would be a readable format of the date/time and the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt; would be the functor term.  The presentation will be the readable format, and the debugger will provide an expansion that contains the individual fields (year, etc).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;expand&amp;lt;/vp&amp;gt; alternative it used to provide a string &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; for an &amp;quot;non-atomic&amp;quot; value.  The value will be  presented as &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; and will expand it as it would &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;natively &lt;/ins&gt;expand the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt;.  The &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;debugger &lt;/ins&gt;also &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in some cases obtain &lt;/ins&gt;the type from &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt;.  The &amp;lt;vp&amp;gt;expand&amp;lt;/vp&amp;gt; alternative could for example be used for a functor term containing date and time fields like year, month, date, hour and minute; the &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; would be a readable format of the date/time and the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt; would be the functor term.  The presentation will be the readable format, and the debugger will provide an expansion that contains the individual fields (year, etc).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== enclose ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== enclose ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4460&amp;oldid=prev</id>
		<title>Thomas Linder Puls: vip code</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4460&amp;oldid=prev"/>
		<updated>2018-03-19T11:00:38Z</updated>

		<summary type="html">&lt;p&gt;vip code&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:00, 19 March 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l217&quot;&gt;Line 217:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 217:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are three kinds of &amp;lt;vp&amp;gt;fieldPresentation&amp;lt;/vp&amp;gt;&amp;#039;s:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are three kinds of &amp;lt;vp&amp;gt;fieldPresentation&amp;lt;/vp&amp;gt;&amp;#039;s:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;vip&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;domains&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;domains&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     fieldPresentation =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     fieldPresentation =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l222&quot;&gt;Line 222:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 223:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         fp_string(string Presentation);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         fp_string(string Presentation);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         fp_childOnly(string Name, subLazy Sub).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         fp_childOnly(string Name, subLazy Sub).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/vip&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;fp&amp;lt;/vp&amp;gt; alternative has a field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; and a lazy sub-presentation &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; of the field itself.  The field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; is used by the debugger for labeling the presentation, but it is not used when writing the presentation.  &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; will be used by the debugger for the corresponding value and it will also be used in when writing the presentation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;fp&amp;lt;/vp&amp;gt; alternative has a field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; and a lazy sub-presentation &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; of the field itself.  The field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; is used by the debugger for labeling the presentation, but it is not used when writing the presentation.  &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; will be used by the debugger for the corresponding value and it will also be used in when writing the presentation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4442&amp;oldid=prev</id>
		<title>Thomas Linder Puls: released</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4442&amp;oldid=prev"/>
		<updated>2017-08-09T20:47:38Z</updated>

		<summary type="html">&lt;p&gt;released&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:47, 9 August 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Template:NonReleased}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is attached to a domain and can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain in a more meaningful way.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is attached to a domain and can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain in a more meaningful way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4369&amp;oldid=prev</id>
		<title>Thomas Linder Puls: caution</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4369&amp;oldid=prev"/>
		<updated>2017-05-02T14:26:04Z</updated>

		<summary type="html">&lt;p&gt;caution&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:26, 2 May 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l108&quot;&gt;Line 108:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 108:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Notice however that the predicate should not be declared; stating the attribute implicitly implies the predicate declaration.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Notice however that the predicate should not be declared; stating the attribute implicitly implies the predicate declaration.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==== Cautions ====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Since presenters are used in the debugging process it is very important that they are kept simple, stateless and efficient.  Especially:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* They should be efficient; long running calculations will affect debug performance.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* They shoud not have or depend on side-effects; during debugging the presenters may be calculated any number of times in any order.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* They may not acquire exclusive access to resources (critical sections, mutexes, etc): that may end up blocking the entrire debugging process.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* They should not start or depend on other threads&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Presenter Domain ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Presenter Domain ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4366&amp;oldid=prev</id>
		<title>Thomas Linder Puls: typo</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4366&amp;oldid=prev"/>
		<updated>2017-05-02T13:00:40Z</updated>

		<summary type="html">&lt;p&gt;typo&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:00, 2 May 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Template:NonReleased}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Template:NonReleased}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;attched &lt;/del&gt;to a domain and can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;is &lt;/del&gt;a more meaningful way.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;attached &lt;/ins&gt;to a domain and can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in &lt;/ins&gt;a more meaningful way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Example|A map object from the class &amp;lt;vp&amp;gt;mapM_redBlack&amp;lt;/vp&amp;gt; is written as the address of the object.  So this code:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Example|A map object from the class &amp;lt;vp&amp;gt;mapM_redBlack&amp;lt;/vp&amp;gt; is written as the address of the object.  So this code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         M:set(1, &amp;quot;a&amp;quot;),&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         M:set(1, &amp;quot;a&amp;quot;),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         stdio::writef(&amp;quot;M = %\n&amp;quot;, M).&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         stdio::writef(&amp;quot;M = %\n&amp;quot;, M).&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;will &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;write &lt;/del&gt;simply write the address of the map object:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;will simply write the address of the map object:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;M = 01757F78&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;M = 01757F78&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image:presenter-variables.png]]}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image:presenter-variables.png]]}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As you can see &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;int he &lt;/del&gt;example above the presenter not only affect the writing of the map object it also alters the way it is expanded in the window.  The map above is actually an object that contains a fact with a red-black-tree which contains the actual mapping of &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/vp&amp;gt;, but all these details are hidden in favor of a much more semantically meaningful presentation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As you can see &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in the &lt;/ins&gt;example above the presenter not only affect the writing of the map object it also alters the way it is expanded in the window.  The map above is actually an object that contains a fact with a red-black-tree which contains the actual mapping of &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/vp&amp;gt;, but all these details are hidden in favor of a much more semantically meaningful presentation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If you need access to the low-level expansion of something in the debugger you can right click the value and switch on &amp;quot;Native View&amp;quot;.  This will affect all values of that type; which will get an extra child node which contains the &amp;quot;native&amp;quot; (i.e. unpresented) view of the value.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If you need access to the low-level expansion of something in the debugger you can right click the value and switch on &amp;quot;Native View&amp;quot;.  This will affect all values of that type; which will get an extra child node which contains the &amp;quot;native&amp;quot; (i.e. unpresented) view of the value.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l43&quot;&gt;Line 43:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Any text-mode &amp;lt;vp&amp;gt;outputStream&amp;lt;/vp&amp;gt; can present a value of a domains that has presenters attached.  This can be done either by calling the predicate &amp;lt;vp&amp;gt;present&amp;lt;/vp&amp;gt; or by using &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in a format string.  The &amp;lt;vp&amp;gt;present&amp;lt;/vp&amp;gt; predicate works like the &amp;lt;vp&amp;gt;write&amp;lt;/vp&amp;gt; predicate except that all values are written using the attached presenters rather than in the default/built-in way.  Likewise, a value corresponding to &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in a format string will be written using the attached presenters.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Any text-mode &amp;lt;vp&amp;gt;outputStream&amp;lt;/vp&amp;gt; can present a value of a domains that has presenters attached.  This can be done either by calling the predicate &amp;lt;vp&amp;gt;present&amp;lt;/vp&amp;gt; or by using &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in a format string.  The &amp;lt;vp&amp;gt;present&amp;lt;/vp&amp;gt; predicate works like the &amp;lt;vp&amp;gt;write&amp;lt;/vp&amp;gt; predicate except that all values are written using the attached presenters rather than in the default/built-in way.  Likewise, a value corresponding to &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in a format string will be written using the attached presenters.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vp&amp;gt;string::&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;preset&lt;/del&gt;(V)&amp;lt;/vp&amp;gt; will return a string with the presentation of &amp;lt;vp&amp;gt;V&amp;lt;/vp&amp;gt;, and &amp;lt;vp&amp;gt;string::format&amp;lt;/vp&amp;gt; will (and any other predicate that uses format strings) can also use &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; for presentation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vp&amp;gt;string::&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;present&lt;/ins&gt;(V)&amp;lt;/vp&amp;gt; will return a string with the presentation of &amp;lt;vp&amp;gt;V&amp;lt;/vp&amp;gt;, and &amp;lt;vp&amp;gt;string::format&amp;lt;/vp&amp;gt; will (and any other predicate that uses format strings) can also use &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; for presentation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As mentioned below presenters works on (deeply) nested terms regardless of whether the surrounding term has attached presenters or not.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As mentioned below presenters works on (deeply) nested terms regardless of whether the surrounding term has attached presenters or not.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l56&quot;&gt;Line 56:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 56:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         stdio::writef(&amp;quot;T = %p\n&amp;quot;, T).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         stdio::writef(&amp;quot;T = %p\n&amp;quot;, T).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The tuple domain does not have a presenter attached, so it is written like an ordinary functor term.  Maps and sets on the other hand &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;does &lt;/del&gt;have presenters attached so they will be written using them.  The output looks like this:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The tuple domain does not have a presenter attached, so it is written like an ordinary functor term.  Maps and sets on the other hand &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;do &lt;/ins&gt;have presenters attached so they will be written using them.  The output looks like this:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;T = tuple([1 -&amp;gt; &amp;quot;a&amp;quot;, 7 -&amp;gt; &amp;quot;q&amp;quot;], [&amp;quot;A&amp;quot;, &amp;quot;fence&amp;quot;, &amp;quot;fox&amp;quot;, &amp;quot;jumped&amp;quot;, &amp;quot;over&amp;quot;, &amp;quot;the&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;T = tuple([1 -&amp;gt; &amp;quot;a&amp;quot;, 7 -&amp;gt; &amp;quot;q&amp;quot;], [&amp;quot;A&amp;quot;, &amp;quot;fence&amp;quot;, &amp;quot;fox&amp;quot;, &amp;quot;jumped&amp;quot;, &amp;quot;over&amp;quot;, &amp;quot;the&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l180&quot;&gt;Line 180:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 180:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;structured&amp;lt;/vp&amp;gt; alternative is used for structured terms.  The &amp;lt;vp&amp;gt;SubPresenter&amp;lt;/vp&amp;gt;  will produce a number of sub-presentations.  When writing the presentation each of the sub-presentations will be written &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dilimited &lt;/del&gt;by &amp;lt;vp&amp;gt;Delimiter&amp;lt;/vp&amp;gt;.  Typically the delimiter is &amp;quot;, &amp;quot; so that the resulting presentations are written comma separated.  This is for example used when presenting sets.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;structured&amp;lt;/vp&amp;gt; alternative is used for structured terms.  The &amp;lt;vp&amp;gt;SubPresenter&amp;lt;/vp&amp;gt;  will produce a number of sub-presentations.  When writing the presentation each of the sub-presentations will be written &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;delimited &lt;/ins&gt;by &amp;lt;vp&amp;gt;Delimiter&amp;lt;/vp&amp;gt;.  Typically the delimiter is &amp;quot;, &amp;quot; so that the resulting presentations are written comma separated.  This is for example used when presenting sets.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To avoid calculating very large/deep presentations during debugging, the structured presenters uses lazy evaluation of the sub-presenters.  This is achieved by letting the presentation contain functions that can calculate the presentation rarther than the presentation itself.  So during debugging the presentation of a term will only expand to a certain level. Inside that level there will be functions the debugger can choose to call if further expansion is required.  But if further expansion is not required the calculation will be skipped.  For this reason the debugger can deal efficiently with very large terms.  On the downside this  complicates the coding of presenters somewhat.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To avoid calculating very large/deep presentations during debugging, the structured presenters uses lazy evaluation of the sub-presenters.  This is achieved by letting the presentation contain functions that can calculate the presentation rarther than the presentation itself.  So during debugging the presentation of a term will only expand to a certain level. Inside that level there will be functions the debugger can choose to call if further expansion is required.  But if further expansion is not required the calculation will be skipped.  For this reason the debugger can deal efficiently with very large terms.  On the downside this  complicates the coding of presenters somewhat.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l216&quot;&gt;Line 216:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 216:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         fp_childOnly(string Name, subLazy Sub).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         fp_childOnly(string Name, subLazy Sub).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;fp&amp;lt;/vp&amp;gt; alternative has a field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; and a lazy sub-presentation &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; of the field itself.  The field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; is used by the debugger for &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;labling &lt;/del&gt;the presentation, but it is not used when writing the presentation.  &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; will be used by the debugger for the corresponding value and it will also be used in when writing the presentation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;fp&amp;lt;/vp&amp;gt; alternative has a field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; and a lazy sub-presentation &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; of the field itself.  The field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; is used by the debugger for &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;labeling &lt;/ins&gt;the presentation, but it is not used when writing the presentation.  &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; will be used by the debugger for the corresponding value and it will also be used in when writing the presentation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; will only appear in the writing of the presentation, the debugger will not include an &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; when expanding the presentation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; will only appear in the writing of the presentation, the debugger will not include an &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; when expanding the presentation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l239&quot;&gt;Line 239:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 239:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To simplify the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;explanaition &lt;/del&gt;it is worth expanding the &amp;lt;vp&amp;gt;fieldPresenter&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;subPresentation&amp;lt;/vp&amp;gt; definitions into the &amp;lt;vp&amp;gt;subLazy&amp;lt;/vp&amp;gt; domain:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To simplify the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;explanation &lt;/ins&gt;it is worth expanding the &amp;lt;vp&amp;gt;fieldPresenter&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;subPresentation&amp;lt;/vp&amp;gt; definitions into the &amp;lt;vp&amp;gt;subLazy&amp;lt;/vp&amp;gt; domain:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l274&quot;&gt;Line 274:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 274:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         ).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         ).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Basically there are two named fields which are terms (a &quot;Name&quot; field which has the value &amp;lt;vp&gt;&quot;a&quot;&amp;lt;/vp&gt; and a &quot;Value&quot; field which have the value &amp;lt;vp&gt;1&amp;lt;/vp&gt;), when written these fields are comma separated &amp;lt;vp&gt;&quot;, &quot;&amp;lt;/vp&gt; and finally they are enclosed in &amp;lt;vp&gt;&quot;p(&quot;&amp;lt;/vp&gt; and &amp;lt;vp&gt;&quot;)&quot;&amp;lt;/vp&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Basically there are two named fields which are terms (a &amp;quot;Name&amp;quot; field which has the value &amp;lt;vp&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/vp&amp;gt; and a &amp;quot;Value&amp;quot; field which have the value &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt;), when written these fields are comma separated &amp;lt;vp&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/vp&amp;gt; and finally they are enclosed in &amp;lt;vp&amp;gt;&amp;quot;p(&amp;quot;&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Basically there are two named fields which are terms (a &amp;quot;Name&amp;quot; field which has the value &amp;lt;vp&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/vp&amp;gt; and a &amp;quot;Value&amp;quot; field which have the value &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt;), when written these fields are comma separated &amp;lt;vp&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/vp&amp;gt; and finally they are enclosed in &amp;lt;vp&amp;gt;&amp;quot;p(&amp;quot;&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The writing will look like a normal functor term &amp;lt;vp&amp;gt;p(&amp;quot;a&amp;quot;, 1)&amp;lt;/vp&amp;gt; and the debugger is able expand it to the two named fields.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The writing will look like a normal functor term &amp;lt;vp&amp;gt;p(&amp;quot;a&amp;quot;, 1)&amp;lt;/vp&amp;gt; and the debugger is able expand it to the two named fields.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It is worth noticing that this presentation will give the same result (both when writing and in &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;teh &lt;/del&gt;debugger):&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It is worth noticing that this presentation will give the same result (both when writing and in &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/ins&gt;debugger):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;constants&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;constants&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l294&quot;&gt;Line 294:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 295:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &amp;lt;vp&amp;gt;sequence&amp;lt;/vp&amp;gt; sub-presenter is used for presenting values have a varying number of sub-presentations, for &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;eaxmple &lt;/del&gt;a set can have from any number of sub-presentations (including none at all). When the debugger expands a &amp;lt;vp&amp;gt;sequence&amp;lt;/vp&amp;gt; presentation it will at first only show a limited number of the sub-presentations.  That way the debugger will not suddenly be expanding a set that contains millions of elements.  Expanding such a large set is rarely interesting, since it will both take a very long time to do and since it will also give result that is too large to comprehend anyway.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &amp;lt;vp&amp;gt;sequence&amp;lt;/vp&amp;gt; sub-presenter is used for presenting values have a varying number of sub-presentations, for &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;example &lt;/ins&gt;a set can have from any number of sub-presentations (including none at all). When the debugger expands a &amp;lt;vp&amp;gt;sequence&amp;lt;/vp&amp;gt; presentation it will at first only show a limited number of the sub-presentations.  That way the debugger will not suddenly be expanding a set that contains millions of elements.  Expanding such a large set is rarely interesting, since it will both take a very long time to do and since it will also give result that is too large to comprehend anyway.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;sequencePresenter&amp;lt;/vp&amp;gt; is defined like this:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;sequencePresenter&amp;lt;/vp&amp;gt; is defined like this:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l385&quot;&gt;Line 385:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 386:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sould &lt;/del&gt;you need/want to enclose &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;your &lt;/del&gt;a comma separated sequence in something else than &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot;, then you can use the predicate &amp;lt;vp&amp;gt;presenter::mkPresenter_setElements&amp;lt;/vp&amp;gt; instead.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Should &lt;/ins&gt;you need/want to enclose a comma separated sequence in something else than &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot;, then you can use the predicate &amp;lt;vp&amp;gt;presenter::mkPresenter_setElements&amp;lt;/vp&amp;gt; instead.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Example|This would enclose a list in &amp;quot;{&amp;quot; and &amp;quot;}&amp;quot;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Example|This would enclose a list in &amp;quot;{&amp;quot; and &amp;quot;}&amp;quot;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l397&quot;&gt;Line 397:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 398:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Similar predicates &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;exists &lt;/del&gt;for map-like constructions:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Similar predicates &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;exist &lt;/ins&gt;for map-like constructions:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4365&amp;oldid=prev</id>
		<title>Thomas Linder Puls: typo</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4365&amp;oldid=prev"/>
		<updated>2017-05-02T12:47:44Z</updated>

		<summary type="html">&lt;p&gt;typo&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:47, 2 May 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Template:NonReleased}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Template:NonReleased}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is attched to a domain &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;an &lt;/del&gt;can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain is a more meaningful way.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is attched to a domain &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and &lt;/ins&gt;can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain is a more meaningful way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Example|A map object from the class &amp;lt;vp&amp;gt;mapM_redBlack&amp;lt;/vp&amp;gt; is written as the address of the object.  So this code:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Example|A map object from the class &amp;lt;vp&amp;gt;mapM_redBlack&amp;lt;/vp&amp;gt; is written as the address of the object.  So this code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4364&amp;oldid=prev</id>
		<title>Thomas Linder Puls: initial</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Presenters&amp;diff=4364&amp;oldid=prev"/>
		<updated>2017-05-02T12:24:07Z</updated>

		<summary type="html">&lt;p&gt;initial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Template:NonReleased}}&lt;br /&gt;
&lt;br /&gt;
Visual Prolog can write any value, but often the printed version of a value is not very useful.  An object is for example written as the address of the object.  A presenter is a predicate that is attched to a domain an can be used to write (i.e. &amp;quot;present&amp;quot;) the values of that domain is a more meaningful way.&lt;br /&gt;
&lt;br /&gt;
{{Example|A map object from the class &amp;lt;vp&amp;gt;mapM_redBlack&amp;lt;/vp&amp;gt; is written as the address of the object.  So this code:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
clauses&lt;br /&gt;
    run() :-&lt;br /&gt;
        M = mapM_redBlack::new(),&lt;br /&gt;
        M:set(1, &amp;quot;a&amp;quot;),&lt;br /&gt;
        stdio::writef(&amp;quot;M = %\n&amp;quot;, M).&amp;lt;/vip&amp;gt;&lt;br /&gt;
will write simply write the address of the map object:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
M = 01757F78&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The using &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in the format string instead of just &amp;lt;vp&amp;gt;&amp;quot;%&amp;quot;&amp;lt;/vp&amp;gt; will write the map using the presenter that is attached to the map classes:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
clauses&lt;br /&gt;
    run() :-&lt;br /&gt;
        M = mapM_redBlack::new(),&lt;br /&gt;
        M:set(1, &amp;quot;a&amp;quot;),&lt;br /&gt;
        stdio::writef(&amp;quot;M = %p\n&amp;quot;, M).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
and then the output will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
M = [1 -&amp;gt; &amp;quot;a&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Presenters are however also used in the debugging process to provide more expressive/simpler presentations in the Variables Window (and in similar contexts).&lt;br /&gt;
&lt;br /&gt;
{{Example|The map above will appear like this in the Variables Window:&lt;br /&gt;
[[Image:presenter-variables.png]]}}&lt;br /&gt;
&lt;br /&gt;
As you can see int he example above the presenter not only affect the writing of the map object it also alters the way it is expanded in the window.  The map above is actually an object that contains a fact with a red-black-tree which contains the actual mapping of &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/vp&amp;gt;, but all these details are hidden in favor of a much more semantically meaningful presentation.&lt;br /&gt;
&lt;br /&gt;
If you need access to the low-level expansion of something in the debugger you can right click the value and switch on &amp;quot;Native View&amp;quot;.  This will affect all values of that type; which will get an extra child node which contains the &amp;quot;native&amp;quot; (i.e. unpresented) view of the value.&lt;br /&gt;
&lt;br /&gt;
The notion of presenters is relatively complex due to the double role it serves both as plain text presentation and as recipe for expansion in the debugger.  Subsequently, it can be difficult to write a good presenter for a complex domain.&lt;br /&gt;
&lt;br /&gt;
=== Presenting ===&lt;br /&gt;
&lt;br /&gt;
Any text-mode &amp;lt;vp&amp;gt;outputStream&amp;lt;/vp&amp;gt; can present a value of a domains that has presenters attached.  This can be done either by calling the predicate &amp;lt;vp&amp;gt;present&amp;lt;/vp&amp;gt; or by using &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in a format string.  The &amp;lt;vp&amp;gt;present&amp;lt;/vp&amp;gt; predicate works like the &amp;lt;vp&amp;gt;write&amp;lt;/vp&amp;gt; predicate except that all values are written using the attached presenters rather than in the default/built-in way.  Likewise, a value corresponding to &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; in a format string will be written using the attached presenters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;string::preset(V)&amp;lt;/vp&amp;gt; will return a string with the presentation of &amp;lt;vp&amp;gt;V&amp;lt;/vp&amp;gt;, and &amp;lt;vp&amp;gt;string::format&amp;lt;/vp&amp;gt; will (and any other predicate that uses format strings) can also use &amp;lt;vp&amp;gt;&amp;quot;%p&amp;quot;&amp;lt;/vp&amp;gt; for presentation.&lt;br /&gt;
&lt;br /&gt;
As mentioned below presenters works on (deeply) nested terms regardless of whether the surrounding term has attached presenters or not.&lt;br /&gt;
&lt;br /&gt;
{{Example|This code uses presenters for the writing &amp;lt;vp&amp;gt;T&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
clauses&lt;br /&gt;
    run() :-&lt;br /&gt;
        M = mapP_redBlack::new():insertList([tuple(7, &amp;quot;q&amp;quot;), tuple(1, &amp;quot;a&amp;quot;)]),&lt;br /&gt;
        S = setP_redBlack::new():insertList([&amp;quot;A&amp;quot;, &amp;quot;fox&amp;quot;, &amp;quot;jumped&amp;quot;, &amp;quot;over&amp;quot; , &amp;quot;the&amp;quot;, &amp;quot;fence&amp;quot;]),&lt;br /&gt;
        T = tuple(M, S),&lt;br /&gt;
        stdio::writef(&amp;quot;T = %p\n&amp;quot;, T).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
The tuple domain does not have a presenter attached, so it is written like an ordinary functor term.  Maps and sets on the other hand does have presenters attached so they will be written using them.  The output looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
T = tuple([1 -&amp;gt; &amp;quot;a&amp;quot;, 7 -&amp;gt; &amp;quot;q&amp;quot;], [&amp;quot;A&amp;quot;, &amp;quot;fence&amp;quot;, &amp;quot;fox&amp;quot;, &amp;quot;jumped&amp;quot;, &amp;quot;over&amp;quot;, &amp;quot;the&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The presentation of a set looks like a list, and the presentation of a string is quoted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Attaching presenters ===&lt;br /&gt;
&lt;br /&gt;
If a presenter predicate has not been attached to a domain, then the domain will use a default presenter predicate instead.  The default presenter predicate will present the value in the standard way (i.e. like &amp;lt;vp&amp;gt;write&amp;lt;/vp&amp;gt;) however subterms will be presented using their presenter.  So presenters works on deeply nested in values (regardless of whether the outer terms have presenters or not).&lt;br /&gt;
&lt;br /&gt;
The presenter for a domain is a predicate which is attached to the domain using a &amp;lt;vp&amp;gt;presenter/1&amp;lt;/vp&amp;gt; attribute in the domain definition:&lt;br /&gt;
&lt;br /&gt;
{{Example|The predicate present_tree is attached as presenter to the tree domain like this:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    tree =&lt;br /&gt;
        empty;&lt;br /&gt;
        node(tree L, string Value, tree R) [presenter(present_tree)].&lt;br /&gt;
&amp;lt;/vip&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
The presenter predicate is (i.e. must be) a function from a &amp;lt;vp&amp;gt;Value&amp;lt;/vp&amp;gt; in the domain (i.e. &amp;lt;vp&amp;gt;Type&amp;lt;/vp&amp;gt;) to a &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt;, as specified by the PFC domain &amp;lt;vp&amp;gt;presenter::presenter&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presenter{Type} = (Type Value) -&amp;gt; presentation Presentation.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Example|So the &amp;lt;vp&amp;gt;present_tree&amp;lt;/vp&amp;gt; predicate must be declared like this:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
class predicates&lt;br /&gt;
    present_tree : presenter::presenter{tree}.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Objects can also be presented.  A presenter is attached by using the &amp;lt;vp&amp;gt;presenter/0&amp;lt;/vp&amp;gt; attribute in the domain definition:&lt;br /&gt;
&lt;br /&gt;
{{Example|To attach a presenter to &amp;lt;vp&amp;gt;myInterface&amp;lt;/vp&amp;gt; you supply the &amp;lt;vp&amp;gt;presenter/0&amp;lt;/vp&amp;gt; attribute:&amp;lt;vip&amp;gt;&lt;br /&gt;
interface myInterface &lt;br /&gt;
    [presenter]&lt;br /&gt;
...&lt;br /&gt;
end interface myInterface&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For objects the presenter predicate is always named &amp;lt;vp&amp;gt;presenter&amp;lt;/vp&amp;gt; corresponding to this declaration (in the interface):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
predicates  &lt;br /&gt;
    presenter : () -&amp;gt; presenter::presentation Presentation.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice however that the predicate should not be declared; stating the attribute implicitly implies the predicate declaration.&lt;br /&gt;
&lt;br /&gt;
=== Presenter Domain ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;presentation&amp;lt;/vp&amp;gt; domain (also defined in the &amp;lt;vp&amp;gt;presenter&amp;lt;/vp&amp;gt; class) looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presentation =&lt;br /&gt;
        noExpand(string Presentation, any Term);&lt;br /&gt;
        expand(string Presentation, any Term);&lt;br /&gt;
        structured(string Delimiter, subPresenter SubPresenter);&lt;br /&gt;
        enclose(string Opening, string Closing, presentation Presentation);&lt;br /&gt;
        functor(functorDescr FunctorDescr, any* SubTerms).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== noExpand ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presentation =&lt;br /&gt;
        noExpand(string Presentation, any Term);&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;noExpand&amp;lt;/vp&amp;gt; alternative is used to provide a string &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; for an &amp;quot;atomic&amp;quot; value.  The value will be  presented as &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; and the debugger will not show any children of the value.  The &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt; is used by the debugger to obtain a type of the term.  The &amp;lt;vp&amp;gt;noExpand&amp;lt;/vp&amp;gt; alternative could for example be used for a number that represent a time; the &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; would be a readable format of the time and the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt; would be the &amp;quot;raw&amp;quot; time value.  The presentation will be the readable format, and the debugger will not provide any expansion of the term (but Native View can be used to see the actual value).&lt;br /&gt;
&lt;br /&gt;
==== expand ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presentation =&lt;br /&gt;
        expand(string Presentation, any Term);&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;expand&amp;lt;/vp&amp;gt; alternative it used to provide a string &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; for an &amp;quot;non-atomic&amp;quot; value.  The value will be  presented as &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; and will expand it as it would expand the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt;.  The debuger also obtains the type from &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt;.  The &amp;lt;vp&amp;gt;expand&amp;lt;/vp&amp;gt; alternative could for example be used for a functor term containing date and time fields like year, month, date, hour and minute; the &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt; would be a readable format of the date/time and the &amp;lt;vp&amp;gt;Term&amp;lt;/vp&amp;gt; would be the functor term.  The presentation will be the readable format, and the debugger will provide an expansion that contains the individual fields (year, etc).&lt;br /&gt;
&lt;br /&gt;
==== enclose ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presentation =&lt;br /&gt;
        ...&lt;br /&gt;
        enclose(string Opening, string Closing, presentation Presentation);&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;enclose&amp;lt;/vp&amp;gt; is used to surround a presentation by &amp;lt;vp&amp;gt;Opening&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;Closing&amp;lt;/vp&amp;gt; strings.  This is for example used to surround the presentation of a set with &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot; to result in a list-like presentation.  The debugger simply consider the nested &amp;lt;vp&amp;gt;Presentation&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== functor ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presentation =&lt;br /&gt;
        ...&lt;br /&gt;
        functor(functorDescr FunctorDescr, any* SubTerms).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
The &amp;lt;vp&amp;gt;functor&amp;lt;/vp&amp;gt; alternative is specially designed to be used internally by the compiler runtime system, because the &amp;lt;vp&amp;gt;FunctorDescr&amp;lt;/vp&amp;gt;&amp;#039;s are terms that are layed-out as contants by the compiler.  The &amp;lt;vp&amp;gt;functor&amp;lt;/vp&amp;gt; alternative will create a presentation that corresponds to a functor term which has &amp;lt;vp&amp;gt;SubTerms&amp;lt;/vp&amp;gt; as sub-terms.&lt;br /&gt;
The alternative is partly redundant, because the same thing could have been expressed using &amp;lt;vp&amp;gt;structured&amp;lt;/vp&amp;gt; and  &amp;lt;vp&amp;gt;enclose&amp;lt;/vp&amp;gt; alternatives.&lt;br /&gt;
&lt;br /&gt;
==== structured ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    presentation =&lt;br /&gt;
        ...&lt;br /&gt;
        structured(string Delimiter, subPresenter SubPresenter);&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;structured&amp;lt;/vp&amp;gt; alternative is used for structured terms.  The &amp;lt;vp&amp;gt;SubPresenter&amp;lt;/vp&amp;gt;  will produce a number of sub-presentations.  When writing the presentation each of the sub-presentations will be written dilimited by &amp;lt;vp&amp;gt;Delimiter&amp;lt;/vp&amp;gt;.  Typically the delimiter is &amp;quot;, &amp;quot; so that the resulting presentations are written comma separated.  This is for example used when presenting sets.&lt;br /&gt;
&lt;br /&gt;
To avoid calculating very large/deep presentations during debugging, the structured presenters uses lazy evaluation of the sub-presenters.  This is achieved by letting the presentation contain functions that can calculate the presentation rarther than the presentation itself.  So during debugging the presentation of a term will only expand to a certain level. Inside that level there will be functions the debugger can choose to call if further expansion is required.  But if further expansion is not required the calculation will be skipped.  For this reason the debugger can deal efficiently with very large terms.  On the downside this  complicates the coding of presenters somewhat.&lt;br /&gt;
&lt;br /&gt;
There are two kinds of &amp;lt;vp&amp;gt;subPresenter&amp;lt;/vp&amp;gt;&amp;#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    subPresenter =&lt;br /&gt;
        fixed(fieldPresentation* FieldPresentations);&lt;br /&gt;
        sequence(sequencePresenter Sequence).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixed (structured) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    subPresenter =&lt;br /&gt;
        fixed(fieldPresentation* FieldPresentations);&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
used for presenting values that have a fixed number of &amp;quot;Field&amp;quot; sub-presentations. This could for example be the presentation of a certain functor alternative, since such a functor term has a certain (fixed) number of sub-terms.  Which result in a fixed number of sub-presentations.&lt;br /&gt;
&lt;br /&gt;
When the debugger expands a &amp;lt;vp&amp;gt;fixed&amp;lt;/vp&amp;gt; presentation all the sub-presentations will be shown, because they are considered all part of the expanded term.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;vp&amp;gt;fixed&amp;lt;/vp&amp;gt; sub-presenter consist of a list of &amp;lt;vp&amp;gt;fieldPresentation&amp;lt;/vp&amp;gt;&amp;#039;s each describing one of the fields.&lt;br /&gt;
&lt;br /&gt;
There are three kinds of &amp;lt;vp&amp;gt;fieldPresentation&amp;lt;/vp&amp;gt;&amp;#039;s:&lt;br /&gt;
&lt;br /&gt;
domains&lt;br /&gt;
    fieldPresentation =&lt;br /&gt;
        fp(string Name, subLazy Sub);&lt;br /&gt;
        fp_string(string Presentation);&lt;br /&gt;
        fp_childOnly(string Name, subLazy Sub).&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;fp&amp;lt;/vp&amp;gt; alternative has a field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; and a lazy sub-presentation &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; of the field itself.  The field &amp;lt;vp&amp;gt;Name&amp;lt;/vp&amp;gt; is used by the debugger for labling the presentation, but it is not used when writing the presentation.  &amp;lt;vp&amp;gt;Sub&amp;lt;/vp&amp;gt; will be used by the debugger for the corresponding value and it will also be used in when writing the presentation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; will only appear in the writing of the presentation, the debugger will not include an &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; when expanding the presentation.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;fp_childOnly&amp;lt;/vp&amp;gt; does not take part in the writing of the presentation, it will only be used as a child by the debugger.&lt;br /&gt;
&lt;br /&gt;
So to summarize, the &amp;lt;vp&amp;gt;fp_string&amp;lt;/vp&amp;gt; alternative only show-up in the writing, the &amp;lt;vp&amp;gt;fp_childOnly&amp;lt;/vp&amp;gt; only show-up as a child when the debugger expands the presentation and finally the &amp;lt;vp&amp;gt;fp&amp;lt;/vp&amp;gt; will both show up in the writing and as a child.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;subLazy&amp;lt;/vp&amp;gt; domain is a little complex:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    subLazy = subPresentation{fieldPresenter}.&lt;br /&gt;
&lt;br /&gt;
domains&lt;br /&gt;
    fieldPresenter = function{presentation}.&lt;br /&gt;
&lt;br /&gt;
domains&lt;br /&gt;
    subPresentation{Presentation} =&lt;br /&gt;
        pres(Presentation Presentation);&lt;br /&gt;
        term(any Term).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To simplify the explanaition it is worth expanding the &amp;lt;vp&amp;gt;fieldPresenter&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;subPresentation&amp;lt;/vp&amp;gt; definitions into the &amp;lt;vp&amp;gt;subLazy&amp;lt;/vp&amp;gt; domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    subLazy = &lt;br /&gt;
        pres(function{presentation} Presentation);&lt;br /&gt;
        term(any Term).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So effectively a &amp;lt;vp&amp;gt;subLazy&amp;lt;/vp&amp;gt; term is either (&amp;lt;vp&amp;gt;pres&amp;lt;/vp&amp;gt;) a function returning a presentation or a (&amp;lt;vp&amp;gt;term&amp;lt;/vp&amp;gt;) term.  The function need only be called if the presentation is required and likewise the term need only be presented if its presentation is required.&lt;br /&gt;
&lt;br /&gt;
{{Example|Consider the following functor domain and a constant of that domain:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    pair = p(string Name, integer Value).&lt;br /&gt;
&lt;br /&gt;
constants&lt;br /&gt;
    t : pair = p(&amp;quot;a&amp;quot;, 1).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This term would be a sensible presentation of &amp;lt;vp&amp;gt;t&amp;lt;/vp&amp;gt; (we assume that the &amp;lt;vp&amp;gt;presenter&amp;lt;/vp&amp;gt; scope is &amp;lt;vp&amp;gt;open&amp;lt;/vp&amp;gt;):&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
constants&lt;br /&gt;
    t_presentation : presentation =&lt;br /&gt;
        enclose(&amp;quot;p(&amp;quot;, &amp;quot;)&amp;quot;,&lt;br /&gt;
            structured(&amp;quot;, &amp;quot;,&lt;br /&gt;
                fixed(&lt;br /&gt;
                    [&lt;br /&gt;
                        fp(&amp;quot;Name&amp;quot;, term(toAny(&amp;quot;a&amp;quot;))),&lt;br /&gt;
                        fp(&amp;quot;Value&amp;quot;, term(toAny(1)))&lt;br /&gt;
                    ]&lt;br /&gt;
                )&lt;br /&gt;
            )&lt;br /&gt;
        ).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
Basically there are two named fields which are terms (a &amp;quot;Name&amp;quot; field which has the value &amp;lt;vp&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/vp&amp;gt; and a &amp;quot;Value&amp;quot; field which have the value &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt;), when written these fields are comma separated &amp;lt;vp&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/vp&amp;gt; and finally they are enclosed in &amp;lt;vp&amp;gt;&amp;quot;p(&amp;quot;&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The writing will look like a normal functor term &amp;lt;vp&amp;gt;p(&amp;quot;a&amp;quot;, 1)&amp;lt;/vp&amp;gt; and the debugger is able expand it to the two named fields.&lt;br /&gt;
&lt;br /&gt;
It is worth noticing that this presentation will give the same result (both when writing and in teh debugger):&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
constants&lt;br /&gt;
    t_presentation2 : presentation = functor(functorDescr(&amp;quot;p&amp;quot;, [&amp;quot;Name&amp;quot;, &amp;quot;Value&amp;quot;]), [toAny(&amp;quot;a&amp;quot;), toAny(1)]).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== sequence (structured) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    subPresenter =&lt;br /&gt;
        ...;&lt;br /&gt;
        sequence(sequencePresenter Sequence).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;vp&amp;gt;sequence&amp;lt;/vp&amp;gt; sub-presenter is used for presenting values have a varying number of sub-presentations, for eaxmple a set can have from any number of sub-presentations (including none at all). When the debugger expands a &amp;lt;vp&amp;gt;sequence&amp;lt;/vp&amp;gt; presentation it will at first only show a limited number of the sub-presentations.  That way the debugger will not suddenly be expanding a set that contains millions of elements.  Expanding such a large set is rarely interesting, since it will both take a very long time to do and since it will also give result that is too large to comprehend anyway.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;sequencePresenter&amp;lt;/vp&amp;gt; is defined like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    sequencePresenter = function_nd{sub Presentation}.&lt;br /&gt;
&lt;br /&gt;
domains&lt;br /&gt;
    sub = subPresentation{presentation}.&lt;br /&gt;
&lt;br /&gt;
domains&lt;br /&gt;
    subPresentation{Presentation} =&lt;br /&gt;
        pres(Presentation Presentation);&lt;br /&gt;
        term(any Term).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here it is worth expanding &amp;lt;vp&amp;gt;subPresentation&amp;lt;/vp&amp;gt; into the &amp;lt;vp&amp;gt;sub&amp;lt;/vp&amp;gt; domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
domains&lt;br /&gt;
    sequencePresenter = function_nd{sub Presentation}.&lt;br /&gt;
&lt;br /&gt;
domains&lt;br /&gt;
    sub =&lt;br /&gt;
        pres(presentation Presentation);&lt;br /&gt;
        term(any Term).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So a &amp;lt;vp&amp;gt;sequencePresenter&amp;lt;/vp&amp;gt; is a nondeterministic predicate that returns presentations (&amp;lt;vp&amp;gt;pres&amp;lt;/vp&amp;gt;) or terms (&amp;lt;vp&amp;gt;term&amp;lt;/vp&amp;gt;).  The nondeterministic predicate can be used to achieve the step-wise expansion of the children (though it is necessary to start from scratch to obtain more children).&lt;br /&gt;
&lt;br /&gt;
{{Example|Consider a list term:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
constants&lt;br /&gt;
    l : integer* = [1, 2, 3,  4, 5, 6, 7].&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
This term would be a sensible presentation of that &amp;lt;vp&amp;gt;l&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
class facts&lt;br /&gt;
    l_presentation : presentation :=&lt;br /&gt;
        enclose(&amp;quot;[&amp;quot;, &amp;quot;]&amp;quot;,&lt;br /&gt;
            structured(&amp;quot;, &amp;quot;,&lt;br /&gt;
                sequence(&lt;br /&gt;
                    { () = term(toAny(V)) :-&lt;br /&gt;
                        V in [1, 2, 3, 4, 5, 6, 7]&lt;br /&gt;
                    }))).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
Basically the presentation is a sequence presentation with a nondeterministic predicate that returns the &amp;lt;vp&amp;gt;term&amp;lt;/vp&amp;gt;s in the list, these sub presentations are comma separated &amp;lt;vp&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/vp&amp;gt; and finally enclosed in &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Support predicates ===&lt;br /&gt;
&lt;br /&gt;
The predicate &amp;lt;vp&amp;gt;outputStreamSupport::writePresentation&amp;lt;/vp&amp;gt; can be used to test (or use) presenters which are not attached to a domain.&lt;br /&gt;
&lt;br /&gt;
{{Example|This predicate will write a presentation to &amp;lt;vp&amp;gt;stdio::outputStream&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
class predicates&lt;br /&gt;
    test : (presenter::presentation P).&lt;br /&gt;
clauses&lt;br /&gt;
    test(P) :-&lt;br /&gt;
        outputStreamSupport::writePresentation(stdio::outputStream, P),&lt;br /&gt;
        stdio::nl.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
These predicates (in the &amp;lt;vp&amp;gt;presenter&amp;lt;/vp&amp;gt; class):&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
predicates&lt;br /&gt;
    present : presenter{any Any}.&lt;br /&gt;
    present_native : presenter{any Any}.&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    present_term : presenter{Type}.&lt;br /&gt;
    present_term_native : presenter{Type}.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
Will return the presentation of terms. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;presenter&amp;lt;/vp&amp;gt; class contains a number of support predicates that can be used to make presenters.&lt;br /&gt;
&lt;br /&gt;
The predicate &amp;lt;vp&amp;gt;presenter::mkPresenter_set&amp;lt;/vp&amp;gt; will create a &amp;quot;set&amp;quot; presentation (i.e. comma separated and enclosed in &amp;quot;[&amp;quot;  and &amp;quot;]&amp;quot;) of the elements returned by a nondeterministic predicate.&lt;br /&gt;
&lt;br /&gt;
{{Example|This would be a sensible presenter for the list domain:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
class predicates&lt;br /&gt;
    presenter_list : presenter{list{A}}.&lt;br /&gt;
clauses&lt;br /&gt;
    presenter_list(List) = mkPresenter_set({  = V :- V in List }).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
The list domain does however already have such a presenter, and besides that it would be impossible to state an attribute for the list domain, because it is predefined.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Sould you need/want to enclose your a comma separated sequence in something else than &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot;, then you can use the predicate &amp;lt;vp&amp;gt;presenter::mkPresenter_setElements&amp;lt;/vp&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
{{Example|This would enclose a list in &amp;quot;{&amp;quot; and &amp;quot;}&amp;quot;:&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
class predicates&lt;br /&gt;
    presenter_list_brace : presenter{list{A}}.&lt;br /&gt;
clauses&lt;br /&gt;
    presenter_list_brace(List) = enclose(&amp;quot;{&amp;quot;, &amp;quot;}&amp;quot;, mkPresenter_setElements({  = V :- V in List })).&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
The list domain does however already have such a presenter, and besides that it would be impossible to state an attribute for the list domain, because it is predefined.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Similar predicates exists for map-like constructions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
predicates&lt;br /&gt;
    mkPresenter_map : (function_nd{tuple{Key, Value}} GetAll_nd) -&amp;gt; presentation Map.&lt;br /&gt;
    mkPresenter_mapElements : (string MapSymbol, function_nd{tuple{Key, Value}} GetAll_nd) -&amp;gt; presentation Map.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;MapSymbol&amp;lt;/vp&amp;gt; is inserted between the key and value; in &amp;lt;vp&amp;gt;mkPresenter_map&amp;lt;/vp&amp;gt; it is &amp;lt;vp&amp;gt;&amp;quot; -&amp;gt; &amp;quot;&amp;lt;/vp&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
</feed>