<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikiru.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4</id>
	<title>Учебный Проект. Релиз 4 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikiru.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4"/>
	<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;action=history"/>
	<updated>2026-05-18T23:04:26Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2574&amp;oldid=prev</id>
		<title>Victor Yukhtenko в 13:20, 31 марта 2011</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2574&amp;oldid=prev"/>
		<updated>2011-03-31T13:20:49Z</updated>

		<summary type="html">&lt;p&gt;&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;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 15:20, 31 марта 2011&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-l12&quot;&gt;Строка 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 12:&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;|open=&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;|open=&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;{{Polyline1_10Open|project=&amp;#039;&amp;#039;&amp;#039;Examples\Polyline\&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Polyline1&lt;/del&gt;\Polyline4.prj&amp;#039;&amp;#039;&amp;#039;}}&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;{{Polyline1_10Open|project=&amp;#039;&amp;#039;&amp;#039;Examples\Polyline\&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Polyline4&lt;/ins&gt;\Polyline4.prj&amp;#039;&amp;#039;&amp;#039;}}&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;{{Polyline1-06Copy_Paste}}&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;{{Polyline1-06Copy_Paste}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2551&amp;oldid=prev</id>
		<title>Victor Yukhtenko в 12:45, 28 марта 2011</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2551&amp;oldid=prev"/>
		<updated>2011-03-28T12:45:36Z</updated>

		<summary type="html">&lt;p&gt;&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;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 14:45, 28 марта 2011&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-l745&quot;&gt;Строка 745:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 745:&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;end implement humanInterface&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;end implement humanInterface&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 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;|enver=&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;|enver=&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;[[en:Game Polyline. release 4]]&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;[[en:Game Polyline. release 4]]&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;}}&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;/table&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2545&amp;oldid=prev</id>
		<title>Victor Yukhtenko в 19:41, 26 марта 2011</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2545&amp;oldid=prev"/>
		<updated>2011-03-26T19:41:02Z</updated>

		<summary type="html">&lt;p&gt;&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;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 21:41, 26 марта 2011&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;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 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;copyright&lt;/del&gt;}}&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;PolylineTemplateRu&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;|goal=&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;Демонстрация свойств языка Visual Prolog и простейших приемов программирования, в том числе:&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;|goalContent=&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;|code=&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;* Структурная организация класса computer существенно переработана, созданы классы computerBrane и GenericComputer;&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;*В силу неэффективнсти алгоритма игры компьютера размер поля более 36 клеток (6x6, например) устанавливать не рекомендуется;&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;|functionality=&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;|install={{PolylineInstall&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; 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 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;|open=&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;{{Polyline1_10Open|project=&amp;#039;&amp;#039;&amp;#039;Examples\Polyline\Polyline1\Polyline4&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;prj&amp;#039;&amp;#039;&amp;#039;}}&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; 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;[[Игра &amp;quot;Ползунок&amp;quot;. Правила игры&lt;/del&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Правила игры ...]]&lt;/del&gt;&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;{{Polyline1-06Copy_Paste}}&lt;/ins&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; &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;run&lt;/ins&gt;=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Запуск приложения из среды по &lt;/ins&gt;&amp;#039;&amp;#039;&amp;#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;E&lt;/ins&gt;&amp;#039;&amp;#039;&amp;#039; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;или запустить исполняемое приложение из директории EXE&lt;/ins&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;&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; 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;Демонстрация приемов программирования на языке Visual Prolog, в том числе:&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; 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;/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;==Особенности Release 4=&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;* Структурная организация класса computer cущественно переработана, созданы классы computerBrane и GenericComputer.&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;* Размер поля 6х6 точек.&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;* В силу неэффективного алгоритма игры компьютера размер поля более 36 клеток (6x6, например) устанавливать не рекомендуется.&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;/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; 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;*Создать проект с пользовательским интерфейсом типа console&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;*В построенном проекте заменить полностью код файла &amp;quot;main.pro&amp;quot; кодом, предложенным ниже (&lt;/del&gt;&amp;#039;&amp;#039;&amp;#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;только VIP 7.2&lt;/del&gt;&amp;#039;&amp;#039;&amp;#039;&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; 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;*При построении проекта ответить на предложение о включении дополнительных пакетов в проект &amp;quot;Add All&amp;quot;&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;&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;/************************************************************&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; 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;VIP 7.2&lt;/del&gt;&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;Copyright (c) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Victor Yukhtenko&lt;/ins&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;Copyright (c) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2007-2008 Prolog Development Center SPb&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;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;SpbSolutions/Examples/Polyline&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;SpbSolutions/Examples/Polyline&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-l32&quot;&gt;Строка 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 29:&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;     stepCandidate&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;     stepCandidate&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;based on solutions proposed by Elena Efimova&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;based on solutions proposed by Elena Efimova&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;&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; 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;Written by: Victor Yukhtenko                        &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;************************************************************/&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;goal&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;goal&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-l751&quot;&gt;Строка 751:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 746:&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;end implement humanInterface&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;end implement humanInterface&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==Ссылки=&lt;/del&gt;=&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;|enver&lt;/ins&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;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Category&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Проекты&lt;/del&gt;]]&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;en&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Game Polyline. release 4&lt;/ins&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Игры]]&lt;/del&gt;&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;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2435&amp;oldid=prev</id>
		<title>Victor Yukhtenko в 08:28, 27 мая 2010</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2435&amp;oldid=prev"/>
		<updated>2010-05-27T08:28:45Z</updated>

		<summary type="html">&lt;p&gt;&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;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 10:28, 27 мая 2010&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;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&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;{{copyright}}&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 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;/table&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2321&amp;oldid=prev</id>
		<title>Victor Yukhtenko: /* Ссылки */</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2321&amp;oldid=prev"/>
		<updated>2009-10-03T19:16:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ссылки&lt;/span&gt;&lt;/span&gt;&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;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 21:16, 3 октября 2009&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-l750&quot;&gt;Строка 750:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 750:&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;==Ссылки==&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; 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;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Примеры&lt;/del&gt;]]&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;[[Category:&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 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;[[Category:Игры]]&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;[[Category:Игры]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2301&amp;oldid=prev</id>
		<title>Victor Yukhtenko: Новая: Очередная версия Учебного проекта, функциональной идеей которого является простая игра.  [[Игра &quot;Полз...</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82._%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7_4&amp;diff=2301&amp;oldid=prev"/>
		<updated>2009-10-02T16:36:19Z</updated>

		<summary type="html">&lt;p&gt;Новая: Очередная версия Учебного проекта, функциональной идеей которого является простая игра.  [[Игра &amp;quot;Полз...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Очередная версия Учебного проекта, функциональной идеей которого является простая игра.&lt;br /&gt;
&lt;br /&gt;
[[Игра &amp;quot;Ползунок&amp;quot;. Правила игры|Правила игры ...]]&lt;br /&gt;
&lt;br /&gt;
==Цель==&lt;br /&gt;
Демонстрация приемов программирования на языке Visual Prolog, в том числе:&lt;br /&gt;
* использование механизма наследования&lt;br /&gt;
&lt;br /&gt;
==Особенности Release 4== &lt;br /&gt;
* Структурная организация класса computer cущественно переработана, созданы классы computerBrane и GenericComputer.&lt;br /&gt;
* Размер поля 6х6 точек.&lt;br /&gt;
* В силу неэффективного алгоритма игры компьютера размер поля более 36 клеток (6x6, например) устанавливать не рекомендуется.&lt;br /&gt;
&lt;br /&gt;
==Установка==&lt;br /&gt;
*Создать проект с пользовательским интерфейсом типа console&lt;br /&gt;
*В построенном проекте заменить полностью код файла &amp;quot;main.pro&amp;quot; кодом, предложенным ниже (&amp;#039;&amp;#039;&amp;#039;только VIP 7.2&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
*При построении проекта ответить на предложение о включении дополнительных пакетов в проект &amp;quot;Add All&amp;quot;. &lt;br /&gt;
&amp;lt;vip&amp;gt;&lt;br /&gt;
/************************************************************&lt;br /&gt;
VIP 7.2&lt;br /&gt;
Copyright (c) 2007-2008 Prolog Development Center SPb&lt;br /&gt;
&lt;br /&gt;
SpbSolutions/Examples/Polyline&lt;br /&gt;
&lt;br /&gt;
Predicates, which represent the strategy&lt;br /&gt;
    neighbour_nd,&lt;br /&gt;
    neighbourOutOfPolyLine_nd,&lt;br /&gt;
    resolveStep,&lt;br /&gt;
    successfulStep,&lt;br /&gt;
    stepCandidate&lt;br /&gt;
based on solutions proposed by Elena Efimova&lt;br /&gt;
&lt;br /&gt;
Written by: Victor Yukhtenko                        &lt;br /&gt;
************************************************************/&lt;br /&gt;
goal&lt;br /&gt;
    mainExe::run(main::run).&lt;br /&gt;
&lt;br /&gt;
/*******************&lt;br /&gt;
 Class Main&lt;br /&gt;
*******************/&lt;br /&gt;
implement main&lt;br /&gt;
    open core&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    className = &amp;quot;main&amp;quot;.&lt;br /&gt;
    classVersion = &amp;quot;1.0&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    classInfo(className, classVersion).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    run():-&lt;br /&gt;
        console::init(),   &lt;br /&gt;
        game::run().&lt;br /&gt;
 &lt;br /&gt;
end implement main&lt;br /&gt;
 &lt;br /&gt;
class game&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    classInfo : core::classInfo.&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    run:().&lt;br /&gt;
end class game&lt;br /&gt;
 &lt;br /&gt;
implement game&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    className = &amp;quot;game&amp;quot;.&lt;br /&gt;
    classVersion = &amp;quot;1.0&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    classInfo(className, classVersion).&lt;br /&gt;
 &lt;br /&gt;
class facts&lt;br /&gt;
    playerNo_V:positive:=1.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    run():-&lt;br /&gt;
        humanInterface::announceStartUp(),&lt;br /&gt;
        PlayerType=humanInterface::getInput(humanInterface::playerType_S,toString(playerNo_V)),&lt;br /&gt;
        not(PlayerType=&amp;quot;&amp;quot;),&lt;br /&gt;
        try&lt;br /&gt;
            Player=createPlayerObject(toTerm(PlayerType)),&lt;br /&gt;
            seniourJudge::addPlayer(Player),&lt;br /&gt;
            playerNo_V:=playerNo_V+1&lt;br /&gt;
        catch _TraceID do&lt;br /&gt;
            humanInterface::announceManagerError(humanInterface::errorPlayerType_S)&lt;br /&gt;
        end try,&lt;br /&gt;
        !,&lt;br /&gt;
        run().&lt;br /&gt;
    run():-&lt;br /&gt;
        startingPlayer().&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    playListMember:()-&amp;gt;string nondeterm.&lt;br /&gt;
clauses&lt;br /&gt;
    playListMember()=PlayersListMember:-&lt;br /&gt;
        I = std::fromTo(1, list::length(seniourJudge::players_V)),&lt;br /&gt;
            Player=list::nth(I-1,seniourJudge::players_V),&lt;br /&gt;
            PlayersListMember=string::format(&amp;quot;\n% - %&amp;quot;,I,Player:name).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    startingPlayer:().&lt;br /&gt;
clauses&lt;br /&gt;
    startingPlayer():-&lt;br /&gt;
        not(seniourJudge::players_V=[]) and not(seniourJudge::players_V=[_SiglePlayer]),&lt;br /&gt;
        findAll(PlayListMember,PlayListMember=playListMember(),PlayList),&lt;br /&gt;
        PlayListStr=string::concatList(PlayList),&lt;br /&gt;
        StartingPlayerStr=humanInterface::getInput(humanInterface::startingPlayer_S,PlayListStr),&lt;br /&gt;
        not(StartingPlayerStr=&amp;quot;&amp;quot;), &lt;br /&gt;
        try&lt;br /&gt;
            StartingPlayer=toTerm(StartingPlayerStr),&lt;br /&gt;
            !,&lt;br /&gt;
            startGame(StartingPlayer)&lt;br /&gt;
        catch _TraceID1 do&lt;br /&gt;
            humanInterface::announceManagerError(humanInterface::errorMustBeNumber_S),&lt;br /&gt;
            !,&lt;br /&gt;
            startingPlayer()&lt;br /&gt;
        end try.&lt;br /&gt;
    startingPlayer().&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    startGame:(positive).&lt;br /&gt;
clauses&lt;br /&gt;
    startGame(StartingPlayer):-&lt;br /&gt;
        try&lt;br /&gt;
            Player=list::nth(StartingPlayer-1,seniourJudge::players_V), % list::nth(...) needs unsigned&lt;br /&gt;
            !,&lt;br /&gt;
            seniourJudge::play(Player)&lt;br /&gt;
        catch _Trace_D do    &lt;br /&gt;
            humanInterface::announceManagerError(humanInterface::errorStartingPlayer_S),&lt;br /&gt;
            !&lt;br /&gt;
        end try,&lt;br /&gt;
        !,&lt;br /&gt;
        startingPlayer().&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    createPlayerObject:(positive)-&amp;gt;player.&lt;br /&gt;
clauses&lt;br /&gt;
    createPlayerObject(1)=Player:-&lt;br /&gt;
        !,&lt;br /&gt;
        Player=human::new().&lt;br /&gt;
    createPlayerObject(2)=Player:-&lt;br /&gt;
        !,&lt;br /&gt;
        Player=computer::new().&lt;br /&gt;
    createPlayerObject(_)=_Player:-&lt;br /&gt;
        exception::raise(classInfo,wrongInputException,[]).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    wrongInputException:exception.&lt;br /&gt;
clauses&lt;br /&gt;
    wrongInputException&lt;br /&gt;
        (&lt;br /&gt;
        classInfo,&lt;br /&gt;
        predicate_Name(),&lt;br /&gt;
        &amp;quot;&amp;quot;&lt;br /&gt;
        ).&lt;br /&gt;
 &lt;br /&gt;
end implement game&lt;br /&gt;
 &lt;br /&gt;
/************************&lt;br /&gt;
  Class seniorJudge&lt;br /&gt;
************************/&lt;br /&gt;
class seniourJudge&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
properties&lt;br /&gt;
    players_V:player*.&lt;br /&gt;
    inProgress_V:boolean.&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    play:(player CurrentPlayer).&lt;br /&gt;
    addPlayer:(player NextPlayer).&lt;br /&gt;
end class seniourJudge&lt;br /&gt;
 &lt;br /&gt;
implement seniourJudge&lt;br /&gt;
open core, humanInterface&lt;br /&gt;
 &lt;br /&gt;
class facts&lt;br /&gt;
    players_V:player*:=[].&lt;br /&gt;
    inProgress_V:boolean:=false.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    play(Player):-&lt;br /&gt;
        inProgress_V=false,&lt;br /&gt;
        humanInterface::showStage(),&lt;br /&gt;
        inProgress_V:=true,&lt;br /&gt;
        Player:move(),&lt;br /&gt;
        humanInterface::announceStarter(Player:name),&lt;br /&gt;
        play(Player),&lt;br /&gt;
        !.&lt;br /&gt;
    play(Player):-&lt;br /&gt;
        juniourJudge::isGameOver(),&lt;br /&gt;
        !,&lt;br /&gt;
        Player:announceWin(),&lt;br /&gt;
        foreach (Participant=list::getMember_nd(players_V) and not(Participant=Player)) do&lt;br /&gt;
            Participant:announceLoss()&lt;br /&gt;
        end foreach,&lt;br /&gt;
        inProgress_V:=false,&lt;br /&gt;
        juniourJudge::reset().&lt;br /&gt;
    play(Player):-&lt;br /&gt;
        NextPlayer=nextPlayer(Player),&lt;br /&gt;
        NextPlayer:move(),&lt;br /&gt;
        !,&lt;br /&gt;
        play(NextPlayer).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    addPlayer(NextPlayer):-&lt;br /&gt;
        players_V:=list::append(players_V,[NextPlayer]).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    nextPlayer:(player CurrentPlayer)-&amp;gt;player NextPlayer.&lt;br /&gt;
clauses&lt;br /&gt;
    nextPlayer(Player)=NextPlayer:-&lt;br /&gt;
        Index=list::tryGetIndex(Player,players_V),&lt;br /&gt;
        NextPlayer=list::tryGetNth(Index+1,players_V),&lt;br /&gt;
        !.&lt;br /&gt;
    nextPlayer(_Player)=list::nth(0,players_V).&lt;br /&gt;
 &lt;br /&gt;
end implement seniourJudge&lt;br /&gt;
 &lt;br /&gt;
/************************&lt;br /&gt;
  Class juniourJudge&lt;br /&gt;
************************/&lt;br /&gt;
class juniourJudge&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    classInfo : core::classInfo.&lt;br /&gt;
 &lt;br /&gt;
domains&lt;br /&gt;
    cell = c(positive,positive).&lt;br /&gt;
    stepType_D=&lt;br /&gt;
        ordinary_S;&lt;br /&gt;
        winner_S.&lt;br /&gt;
 &lt;br /&gt;
properties&lt;br /&gt;
    maxRow_P:positive.&lt;br /&gt;
    maxColumn_P:positive.&lt;br /&gt;
    polyline_P:cell*.&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    neighbour_nd: (cell,cell) nondeterm (i,o) (i,i).&lt;br /&gt;
    neighbourOutOfPolyLine_nd:(cell,cell)-&amp;gt;cell nondeterm.&lt;br /&gt;
    set: (string ).&lt;br /&gt;
    isGameOver:() determ.&lt;br /&gt;
    reset:().&lt;br /&gt;
 &lt;br /&gt;
end class juniourJudge&lt;br /&gt;
 &lt;br /&gt;
implement juniourJudge&lt;br /&gt;
open core, humanInterface&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    className = &amp;quot;JuniourJudge&amp;quot;.&lt;br /&gt;
    classVersion = &amp;quot;1.0&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    classInfo(className, classVersion).&lt;br /&gt;
 &lt;br /&gt;
class facts&lt;br /&gt;
    maxRow_P:positive:=6.&lt;br /&gt;
    maxColumn_P:positive:=6.&lt;br /&gt;
    polyline_P:cell*:=[].&lt;br /&gt;
    endOfGame_V:boolean:=false.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    isGameOver():-&lt;br /&gt;
        endOfGame_V=true.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    set(InputString):-&lt;br /&gt;
        Cell=toTerm(InputString),&lt;br /&gt;
        handleInput (Cell).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    reset():-&lt;br /&gt;
        juniourJudge:: polyline_P:=[],&lt;br /&gt;
        juniourJudge::endOfGame_V:=false.&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    handleInput:(juniourJudge::cell).&lt;br /&gt;
clauses&lt;br /&gt;
    handleInput(Cell):-&lt;br /&gt;
        list::isMember(Cell,polyline_P),&lt;br /&gt;
        try &lt;br /&gt;
            _=makePolyLine(Cell,polyline_P) % it will be an exception if wrong Cell, but we ignore it by failing&lt;br /&gt;
        catch _TraceID do&lt;br /&gt;
            fail&lt;br /&gt;
        end try,&lt;br /&gt;
        !,&lt;br /&gt;
        endOfGame_V:=true,&lt;br /&gt;
        humanInterface::showStep(Cell,winner_S).&lt;br /&gt;
    handleInput (Cell):-&lt;br /&gt;
        polyline_P:=makePolyLine(Cell,polyline_P),&lt;br /&gt;
        !,&lt;br /&gt;
        humanInterface::showStep(Cell,ordinary_S).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    makePolyLine: (cell,cell*)-&amp;gt; cell* multi.&lt;br /&gt;
clauses&lt;br /&gt;
    makePolyLine(c(X,Y),[])=[c(X,Y)]:-&lt;br /&gt;
        X&amp;gt;0,X&amp;lt;=maxColumn_P,&lt;br /&gt;
        Y&amp;gt;0,Y&amp;lt;=maxRow_P,&lt;br /&gt;
        !.&lt;br /&gt;
    makePolyLine(NewCell,[SingleCell])=[NewCell,SingleCell]:-&lt;br /&gt;
        neighbour_nd(SingleCell, NewCell),&lt;br /&gt;
        !.&lt;br /&gt;
    makePolyLine(NewCell,[Left, RestrictingCell | PolyLineTail])=[NewCell, Left, RestrictingCell | PolyLineTail]:-&lt;br /&gt;
        NewCell=neighbourOutOfPolyLine_nd(Left,RestrictingCell).&lt;br /&gt;
    makePolyLine(NewCell,PolyLine)=list::reverse([NewCell,Left, RestrictingCell | PolyLineTail]):-&lt;br /&gt;
        [Left, RestrictingCell | PolyLineTail]= list::reverse(PolyLine),&lt;br /&gt;
        NewCell=neighbourOutOfPolyLine_nd(Left,RestrictingCell).&lt;br /&gt;
    makePolyLine(NewCell,_PolyLine)= _PolyLine1:-&lt;br /&gt;
        exception::raise(classInfo,wrongStepException,[namedValue(&amp;quot;data&amp;quot;,string(toString(NewCell)))]).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    wrongStepException:exception.&lt;br /&gt;
clauses&lt;br /&gt;
    wrongStepException&lt;br /&gt;
        (&lt;br /&gt;
        classInfo,&lt;br /&gt;
        predicate_Name(),&lt;br /&gt;
       &amp;quot;the point % can not prolong the polyline!&amp;quot;&lt;br /&gt;
        ).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    neighbourOutOfPolyLine_nd(Cell,RestrictingCell)=NewCell:-&lt;br /&gt;
        neighbour_nd(Cell,NewCell),&lt;br /&gt;
            not(NewCell = RestrictingCell).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    neighbour_nd(c(X, Y), c(X + 1, Y)):- X &amp;lt; maxColumn_P.        &lt;br /&gt;
    neighbour_nd(c(X, Y), c(X, Y + 1)):- Y &amp;lt; maxrow_P.            &lt;br /&gt;
    neighbour_nd(c(X, Y), c(X - 1, Y)):- X &amp;gt; 1.&lt;br /&gt;
    neighbour_nd(c(X, Y), c(X, Y - 1)):- Y &amp;gt; 1.    &lt;br /&gt;
 &lt;br /&gt;
end implement juniourJudge&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Interface Player&lt;br /&gt;
******************************************/&lt;br /&gt;
interface player&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    move:().&lt;br /&gt;
    announceWin:().&lt;br /&gt;
    announceLoss:().&lt;br /&gt;
 &lt;br /&gt;
properties&lt;br /&gt;
    name:string.&lt;br /&gt;
 &lt;br /&gt;
end interface player&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Class human&lt;br /&gt;
******************************************/&lt;br /&gt;
class human:player&lt;br /&gt;
open core&lt;br /&gt;
end class human&lt;br /&gt;
 &lt;br /&gt;
implement human&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
facts&lt;br /&gt;
    name:string:=string::format(&amp;quot;Hum_%&amp;quot;,toString(This)).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    new():-&lt;br /&gt;
        Name=humanInterface::getInput(humanInterface::playerName_S,name),&lt;br /&gt;
        if not(Name=&amp;quot;&amp;quot;) then&lt;br /&gt;
            name:=Name&lt;br /&gt;
        end if.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    move():-&lt;br /&gt;
        InputString=humanInterface::getInput(humanInterface::playerStep_S),&lt;br /&gt;
        try&lt;br /&gt;
            juniourJudge::set(InputString)&lt;br /&gt;
        catch TraceID do&lt;br /&gt;
            handleException(TraceID),&lt;br /&gt;
            fail&lt;br /&gt;
        end try,&lt;br /&gt;
        !.&lt;br /&gt;
    move():-&lt;br /&gt;
        move().&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceWin():-&lt;br /&gt;
        humanInterface::announceWin(name).&lt;br /&gt;
 &lt;br /&gt;
    announceLoss():-&lt;br /&gt;
        humanInterface::announceLoss(name).&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    handleException:(exception::traceId TraceID).&lt;br /&gt;
clauses&lt;br /&gt;
    handleException(TraceID):-&lt;br /&gt;
        foreach Descriptor=exception::getDescriptor_nd(TraceID) do&lt;br /&gt;
            Descriptor = exception::descriptor(&lt;br /&gt;
                _ClassInfo1,&lt;br /&gt;
                exception::exceptionDescriptor(_ClassInfo2,_PredicateName,Description),&lt;br /&gt;
                _Kind,&lt;br /&gt;
                ExtraInfo,&lt;br /&gt;
                _GMTTime,&lt;br /&gt;
                _ExceptionDescription,&lt;br /&gt;
                _ThreadId),&lt;br /&gt;
            if&lt;br /&gt;
                ExtraInfo=[namedValue(&amp;quot;data&amp;quot;,string(CellPointer))]&lt;br /&gt;
            then&lt;br /&gt;
                ErrorMsg=string::format(Description,CellPointer),&lt;br /&gt;
                humanInterface::announceError(ErrorMsg)&lt;br /&gt;
            else&lt;br /&gt;
                humanInterface::announceError(&amp;quot;&amp;quot;)&lt;br /&gt;
            end if&lt;br /&gt;
        end foreach.&lt;br /&gt;
 &lt;br /&gt;
end implement human&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Class computer&lt;br /&gt;
******************************************/&lt;br /&gt;
class computer:player&lt;br /&gt;
end class computer&lt;br /&gt;
 &lt;br /&gt;
implement computer&lt;br /&gt;
    inherits genericComputer&lt;br /&gt;
end implement computer&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Class genericComputer&lt;br /&gt;
******************************************/&lt;br /&gt;
interface genericComputer&lt;br /&gt;
    supports player&lt;br /&gt;
    supports polyLineBrain&lt;br /&gt;
 &lt;br /&gt;
end interface genericComputer&lt;br /&gt;
 &lt;br /&gt;
class genericComputer:genericComputer&lt;br /&gt;
open core, exception&lt;br /&gt;
 &lt;br /&gt;
end class genericComputer&lt;br /&gt;
 &lt;br /&gt;
implement genericComputer&lt;br /&gt;
    inherits polyLineBrain1&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
facts&lt;br /&gt;
    name:string:=string::format(&amp;quot;Cmp_%&amp;quot;,toString(This)).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    new():-&lt;br /&gt;
        Name=humanInterface::getInput(humanInterface::playerName_S,name),&lt;br /&gt;
        if not(Name=&amp;quot;&amp;quot;) then&lt;br /&gt;
            name:=Name&lt;br /&gt;
        end if.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    move():-&lt;br /&gt;
        humanInterface::announceThinker(name),&lt;br /&gt;
        Cell=resolveStep(),&lt;br /&gt;
        juniourJudge::set(toString(Cell)).&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    resolveStep:()-&amp;gt;juniourJudge::cell.&lt;br /&gt;
clauses&lt;br /&gt;
    resolveStep()=Cell:-&lt;br /&gt;
        Cell=successfulStep(juniourJudge::polyline_P),&lt;br /&gt;
        !.&lt;br /&gt;
    resolveStep()=Cell:-&lt;br /&gt;
        Cell=randomStep(),&lt;br /&gt;
        !.&lt;br /&gt;
    resolveStep()=juniourJudge::c(X+1,Y+1):-&lt;br /&gt;
        X=math::random(juniourJudge::maxColumn_P-1),&lt;br /&gt;
        Y=math::random(juniourJudge::maxRow_P-1).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    stepCandidate([Cell],[Cell,NewCell], NewCell):-&lt;br /&gt;
        juniourJudge::neighbour_nd(Cell, NewCell).&lt;br /&gt;
    stepCandidate([Left, RestrictingCell | PolyLine],[NewCell,Left, RestrictingCell| PolyLine], NewCell):-&lt;br /&gt;
        NewCell=juniourJudge::neighbourOutOfPolyLine_nd(Left,RestrictingCell).&lt;br /&gt;
    stepCandidate(PolyLine,list::reverse([NewCell,Left, RestrictingCell |PolyLineTail]),NewCell):-&lt;br /&gt;
        [Left, RestrictingCell |PolyLineTail] = list::reverse(PolyLine),&lt;br /&gt;
        NewCell=juniourJudge::neighbourOutOfPolyLine_nd(Left,RestrictingCell).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceWin():-&lt;br /&gt;
        humanInterface::announceWin(name).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceLoss():-&lt;br /&gt;
        humanInterface::announceLoss(name).&lt;br /&gt;
 &lt;br /&gt;
end implement genericComputer&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Interface polylineBrain&lt;br /&gt;
******************************************/&lt;br /&gt;
interface polylineBrain&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    notDefinedPredicate_C=&amp;quot;The predicate is not defined. Must be defined in the daughter class. &amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    stepCandidate: (juniourJudge::cell*,juniourJudge::cell* [out],juniourJudge::cell [out]) nondeterm.&lt;br /&gt;
    successfulStep: (juniourJudge::cell*)-&amp;gt;juniourJudge::cell nondeterm.&lt;br /&gt;
    randomStep:()-&amp;gt;juniourJudge::cell determ.&lt;br /&gt;
 &lt;br /&gt;
end interface polyLineBrain&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Class polylineBrain1&lt;br /&gt;
******************************************/&lt;br /&gt;
class polyLineBrain1:polyLineBrain&lt;br /&gt;
open core&lt;br /&gt;
predicates&lt;br /&gt;
    classInfo : core::classInfo.&lt;br /&gt;
 &lt;br /&gt;
end class polyLineBrain1&lt;br /&gt;
 &lt;br /&gt;
implement polyLineBrain1&lt;br /&gt;
open core, exception&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    className = &amp;quot;polyLineBrain1&amp;quot;.&lt;br /&gt;
    classVersion = &amp;quot;1.0&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    classInfo(className, classVersion).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    successfulStep(PolyLine)=BestMove:-&lt;br /&gt;
        This:stepCandidate(PolyLine, _PolyLine1,BestMove),&lt;br /&gt;
        list::isMember(BestMove, PolyLine),&lt;br /&gt;
        !.&lt;br /&gt;
    successfulStep(PolyLine)=Cell:-&lt;br /&gt;
        This:stepCandidate(PolyLine, PolyLine1,Cell),&lt;br /&gt;
            not(_=successfulStep(PolyLine1)).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    randomStep()=Cell:-&lt;br /&gt;
        findAll(NewCell,This:stepCandidate(juniourJudge::polyline_P,_Polyline1, NewCell),CellCandidateListWithDuplicates),&lt;br /&gt;
        CellCandidateList=list::removeDuplicates(CellCandidateListWithDuplicates),&lt;br /&gt;
        not(CellCandidateList=[]),&lt;br /&gt;
        NoOfVariants=list::length(CellCandidateList),&lt;br /&gt;
        ChoiceNo=math::random(NoOfVariants-1),&lt;br /&gt;
        Cell=list::nth(ChoiceNo+1,CellCandidateList).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    stepCandidate(_Cell,_PolyLine,_Move):-&lt;br /&gt;
        common_exception::raise_error(classinfo,predicate_name(),notDefinedPredicate_C).&lt;br /&gt;
 &lt;br /&gt;
end implement polylineBrain1&lt;br /&gt;
 &lt;br /&gt;
/******************************************&lt;br /&gt;
  Class HumanInterface&lt;br /&gt;
******************************************/&lt;br /&gt;
class humanInterface&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    announceStartUp:().&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    showStage:().&lt;br /&gt;
    showStep:(juniourJudge::cell,juniourJudge::stepType_D).&lt;br /&gt;
    getInput:(inputType_D,string StringParameter)-&amp;gt;string InputString.&lt;br /&gt;
    getInput:(inputType_D)-&amp;gt;string InputString.&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    announceManagerError:(choiceError_D).&lt;br /&gt;
 &lt;br /&gt;
predicates&lt;br /&gt;
    announceStarter:(string Name).&lt;br /&gt;
    announceThinker:(string Name).&lt;br /&gt;
    announceWin:(string Name).&lt;br /&gt;
    announceLoss:(string Name).&lt;br /&gt;
    announceError:(string Description).&lt;br /&gt;
    announceError:().&lt;br /&gt;
 &lt;br /&gt;
domains&lt;br /&gt;
    choiceError_D=&lt;br /&gt;
        errorPlayerType_S;&lt;br /&gt;
        errorMustBeNumber_S;&lt;br /&gt;
        errorstartingPlayer_S.&lt;br /&gt;
 &lt;br /&gt;
domains&lt;br /&gt;
    inputType_D=&lt;br /&gt;
        playerStep_S;&lt;br /&gt;
        playerType_S;&lt;br /&gt;
        playerName_S;&lt;br /&gt;
        startingPlayer_S;&lt;br /&gt;
        searchDepth_S.&lt;br /&gt;
 &lt;br /&gt;
end class humanInterface&lt;br /&gt;
 &lt;br /&gt;
implement humanInterface&lt;br /&gt;
open core&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    cellMarkedOrdinary_C=&amp;quot;*&amp;quot;.&lt;br /&gt;
    cellMarkedWinner_C=&amp;quot;O&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
constants % messages&lt;br /&gt;
    thinker_C=&amp;quot;% is thinking ...&amp;quot;.&lt;br /&gt;
    beginner_C=&amp;quot;First move done by: %&amp;quot;.&lt;br /&gt;
    error_C=&amp;quot;Error, % &amp;quot;.&lt;br /&gt;
    congratulation_C=&amp;quot;Player % won!&amp;quot;.&lt;br /&gt;
    sorryLoss_C=&amp;quot;%,  Sorry, you loss :-(&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
    playerStep_C=&amp;quot;Please enter your move as c(X,Y): &amp;quot;.&lt;br /&gt;
    playerType_C=&amp;quot;\nPlayer #%s. Please enter the player type (1-human, 2-computer, Enter - end of choice):&amp;quot;.&lt;br /&gt;
    playerName_C=&amp;quot;\nPlease assign the name to the player (% proposed):&amp;quot;.&lt;br /&gt;
    startingPlayer_C=&amp;quot;\nWho moves the first (PlayerNo or Enter - end of the game)?:&amp;quot;.&lt;br /&gt;
    searchDepth_C=&amp;quot;\nDefine the depth of the search (% - by default)?? &amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
    errorPlayerType_C=&amp;quot;\nNo such player type exists! Enter - repeat input:&amp;quot;.&lt;br /&gt;
    errorMustBeNumber_C=&amp;quot;\nMust be number! Please repeat input:&amp;quot;.&lt;br /&gt;
    errorstartingPlayer_C=&amp;quot;\nNo such Player exiasts! Please repeat input:&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    verticalSpace_C=2.&lt;br /&gt;
    horizontalSpace_C=3.&lt;br /&gt;
    emptyLineLenght_C=80.&lt;br /&gt;
 &lt;br /&gt;
constants % Position of Line&lt;br /&gt;
    starterLine_C=1.&lt;br /&gt;
    announceLine_C=starterLine_C+1.&lt;br /&gt;
    actionLine_C=announceLine_C+1.&lt;br /&gt;
    polylineLine_C=actionLine_C+1.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    getInput(InputType)=Input:-&lt;br /&gt;
        Input=getInput(InputType,&amp;quot;&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
    getInput(InputType,StringParameter)=Input:-&lt;br /&gt;
        inputInvitation(InputType,StringParameter),&lt;br /&gt;
        Input = console::readLine(),&lt;br /&gt;
        console::clearInput().&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    inputInvitation:(inputType_D,string StringParameter).&lt;br /&gt;
clauses&lt;br /&gt;
    inputInvitation(playerStep_S,_StringParameter):-&lt;br /&gt;
        clearMessageArea(actionLine_C),&lt;br /&gt;
        writeMessage(actionLine_C,&amp;quot;%&amp;quot;,playerStep_C).&lt;br /&gt;
    inputInvitation(playerName_S,StringParameter):-&lt;br /&gt;
        console::writef(playerName_C,StringParameter).&lt;br /&gt;
    inputInvitation(playerType_S,StringParameter):-&lt;br /&gt;
        console::writef(playerType_C,StringParameter).&lt;br /&gt;
    inputInvitation(startingPlayer_S,StringParameter):-&lt;br /&gt;
        console::write(StringParameter,startingPlayer_C).&lt;br /&gt;
    inputInvitation(searchDepth_S,StringParameter):-&lt;br /&gt;
        console::writef(searchDepth_C,StringParameter).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    showStage():-&lt;br /&gt;
        console::clearOutput(),&lt;br /&gt;
        foreach I = std::fromTo(1, juniourJudge::maxColumn_P) do&lt;br /&gt;
            console::setLocation(console_native::coord(horizontalSpace_C*I, 0)), &lt;br /&gt;
            console::write(I)&lt;br /&gt;
        end foreach,&lt;br /&gt;
        foreach J = std::fromTo(1, juniourJudge::maxRow_P) do    &lt;br /&gt;
            console::setLocation(console_native::coord(0, verticalSpace_C*J)), &lt;br /&gt;
            console::write(J)&lt;br /&gt;
        end foreach.&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    showStep(juniourJudge::c(X,Y),_Type):-&lt;br /&gt;
        console::setLocation(console_native::coord(horizontalSpace_C*X, verticalSpace_C*Y)),&lt;br /&gt;
        fail.&lt;br /&gt;
    showStep(_Cell,juniourJudge::ordinary_S):-&lt;br /&gt;
        console::write(cellMarkedOrdinary_C).&lt;br /&gt;
    showStep(_Cell,juniourJudge::winner_S):-&lt;br /&gt;
        console::write(cellMarkedWinner_C).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceStartUp():-&lt;br /&gt;
        console::clearOutput().&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceStarter(Name):-&lt;br /&gt;
        clearMessageArea(starterLine_C),&lt;br /&gt;
        writeMessage(starterLine_C,beginner_C,Name).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceManagerError(errorPlayerType_S):-&lt;br /&gt;
        console::write(errorPlayerType_C),&lt;br /&gt;
        _=console::readLine().&lt;br /&gt;
    announceManagerError(errorMustBeNumber_S):-&lt;br /&gt;
        console::write(errorMustBeNumber_C).&lt;br /&gt;
    announceManagerError(errorstartingPlayer_S):-&lt;br /&gt;
        console::write(errorstartingPlayer_C).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceError():-&lt;br /&gt;
        announceError(&amp;quot;&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
    announceError(ErrorText):-&lt;br /&gt;
        clearMessageArea(announceLine_C),&lt;br /&gt;
        writeMessage(announceLine_C,error_C,ErrorText).&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceWin(Name):-&lt;br /&gt;
        clearMessageArea(announceLine_C),&lt;br /&gt;
        writeMessage(announceLine_C,congratulation_C,Name),&lt;br /&gt;
        showPolyLine(),&lt;br /&gt;
        _ = console::readLine().&lt;br /&gt;
 &lt;br /&gt;
    announceLoss(Name):-&lt;br /&gt;
        clearMessageArea(announceLine_C),&lt;br /&gt;
        writeMessage(announceLine_C,sorryLoss_C,Name),&lt;br /&gt;
        showPolyLine(),&lt;br /&gt;
        _ = console::readLine().&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    announceThinker(Name):-&lt;br /&gt;
        clearMessageArea(announceLine_C),&lt;br /&gt;
        clearMessageArea(actionLine_C),&lt;br /&gt;
        writeMessage(actionLine_C,thinker_C,Name).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    showPolyLine:().&lt;br /&gt;
clauses&lt;br /&gt;
    showPolyLine():-&lt;br /&gt;
        clearMessageArea(actionLine_C),&lt;br /&gt;
        writeMessage(polylineLine_C,&amp;quot;%&amp;quot;,toString(juniourJudge::polyline_P)).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    clearMessageArea:(positive AreaID).&lt;br /&gt;
clauses&lt;br /&gt;
    clearMessageArea(AreaID):-&lt;br /&gt;
        console::setLocation(console_native::coord(0,juniourJudge::maxRow_P*verticalSpace_C+AreaID)),&lt;br /&gt;
        console::write(string::create(emptyLineLenght_C,&amp;quot; &amp;quot;)).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    writeMessage:(positive AreaID,string FormatString,string ParameterString).&lt;br /&gt;
clauses&lt;br /&gt;
    writeMessage(AreaID,FormatString,ParameterString):-&lt;br /&gt;
        console::setLocation(console_native::coord(0, juniourJudge::maxRow_P*verticalSpace_C+AreaID)),&lt;br /&gt;
        console::writef(FormatString,ParameterString).&lt;br /&gt;
 &lt;br /&gt;
end implement humanInterface&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
==Ссылки==&lt;br /&gt;
[[Category:Примеры]]&lt;br /&gt;
[[Category:Игры]]&lt;/div&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
</feed>