<?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=PasteMainPro1</id>
	<title>PasteMainPro1 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikiru.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=PasteMainPro1"/>
	<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=PasteMainPro1&amp;action=history"/>
	<updated>2026-05-18T23:59:20Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wikiru.visual-prolog.com/index.php?title=PasteMainPro1&amp;diff=2515&amp;oldid=prev</id>
		<title>Victor Yukhtenko: Новая: &lt;vip&gt; /***************************************************************************** Copyright (c) Elena Efimova  Translated by Victor Yukhtenko  ****************************************...</title>
		<link rel="alternate" type="text/html" href="https://wikiru.visual-prolog.com/index.php?title=PasteMainPro1&amp;diff=2515&amp;oldid=prev"/>
		<updated>2011-03-23T15:17:48Z</updated>

		<summary type="html">&lt;p&gt;Новая: &amp;lt;vip&amp;gt; /***************************************************************************** Copyright (c) Elena Efimova  Translated by Victor Yukhtenko  ****************************************...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;vip&amp;gt;&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
Copyright (c) Elena Efimova&lt;br /&gt;
&lt;br /&gt;
Translated by Victor Yukhtenko&lt;br /&gt;
&lt;br /&gt;
******************************************************************************/&lt;br /&gt;
goal&lt;br /&gt;
    mainExe::run(main::run).&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
implement main&lt;br /&gt;
    open core, console&lt;br /&gt;
 &lt;br /&gt;
constants&lt;br /&gt;
    className = &amp;quot;PolyLine&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;
domains&lt;br /&gt;
    cell = c(unsigned16, unsigned16).&lt;br /&gt;
    cells = cell*.&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    wins: (positive, positive, cells, cells) nondeterm (i,i,i,o).&lt;br /&gt;
clauses&lt;br /&gt;
    wins(_Player1, _Player2, PolyLine, PolyLine1):-&lt;br /&gt;
        step(PolyLine, PolyLine1, Cell),&lt;br /&gt;
        list::isMember(Cell, PolyLine).&lt;br /&gt;
    wins(Player1, Player2, PolyLine, PolyLine1):-&lt;br /&gt;
        step(PolyLine, PolyLine1, _),&lt;br /&gt;
        not(wins(Player2, Player1, PolyLine1, _)).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    move: (positive, cells).&lt;br /&gt;
clauses&lt;br /&gt;
    move(2, PolyLine):-&lt;br /&gt;
        step(PolyLine, PolyLine1, Cell),&lt;br /&gt;
        list::isMember(Cell, PolyLine),&lt;br /&gt;
        !,&lt;br /&gt;
        show(PolyLine1),&lt;br /&gt;
        setLocation(console_native::coord(0, 14)),&lt;br /&gt;
        write(&amp;quot;Computer Won!\n\n&amp;quot;, PolyLine1).&lt;br /&gt;
    move(2, PolyLine):-&lt;br /&gt;
        wins(2, 1, PolyLine, PolyLine1),&lt;br /&gt;
        !,&lt;br /&gt;
        move(1, PolyLine1).&lt;br /&gt;
    move(2, PolyLine):-&lt;br /&gt;
        step(PolyLine, PolyLine1, _),&lt;br /&gt;
        !,&lt;br /&gt;
        move(1, PolyLine1).&lt;br /&gt;
    move(1, PolyLine):-&lt;br /&gt;
        show(PolyLine),&lt;br /&gt;
        setLocation(console_native::coord(0, 14)),&lt;br /&gt;
        write(PolyLine),&lt;br /&gt;
        std::repeat(),&lt;br /&gt;
            write( &amp;quot;\n\nIt is your turn.\nEnter the new cell as c(2,3): &amp;quot;),&lt;br /&gt;
            hasDomain(cell, К),&lt;br /&gt;
            К = read(), &lt;br /&gt;
            clearInput(),&lt;br /&gt;
        step(PolyLine, PolyLine1, К),&lt;br /&gt;
        !,&lt;br /&gt;
        if list::isMember(К, PolyLine) then&lt;br /&gt;
            write(&amp;quot;\nCongratulations! You have won!&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            move(2, PolyLine1)&lt;br /&gt;
        end if.&lt;br /&gt;
    move(_, _).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    step: (cells, cells, cell) nondeterm (i,o,o) (i,o,i).&lt;br /&gt;
clauses&lt;br /&gt;
    step([A, B | PolyLine], [X, A, B | PolyLine], X):-&lt;br /&gt;
        candidate(A, X),&lt;br /&gt;
        not(X = B).&lt;br /&gt;
    step(PolyLine, PolyLine1, X):-&lt;br /&gt;
        PolyLine2 = list::reverse(PolyLine),&lt;br /&gt;
        PolyLine2 = [A, B | _],&lt;br /&gt;
        candidate(A, X),&lt;br /&gt;
        not(X = B),&lt;br /&gt;
        PolyLine1 = list::append(PolyLine, [X]).&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    candidate: (cell, cell) nondeterm (i,o) (i,i).&lt;br /&gt;
clauses&lt;br /&gt;
    candidate(c(X, Y), c(X - 1, Y)):- X &amp;gt; 1.&lt;br /&gt;
    candidate(c(X, Y), c(X + 1, Y)):- X &amp;lt; 6.&lt;br /&gt;
    candidate(c(X, Y), c(X, Y - 1)):- Y &amp;gt; 1.&lt;br /&gt;
    candidate(c(X, Y), c(X, Y + 1)):- Y &amp;lt; 5.&lt;br /&gt;
 &lt;br /&gt;
class predicates&lt;br /&gt;
    show: (cells).&lt;br /&gt;
clauses&lt;br /&gt;
    show(PolyLine):-&lt;br /&gt;
        clearOutput(),&lt;br /&gt;
        foreach I = std::fromTo(1, 6) do&lt;br /&gt;
            setLocation(console_native::coord(3*I, 0)), write(I)&lt;br /&gt;
        end foreach,&lt;br /&gt;
        foreach J = std::fromTo(1, 5) do&lt;br /&gt;
            setLocation(console_native::coord(0, 2*J)), write(J)&lt;br /&gt;
        end foreach,&lt;br /&gt;
        foreach c(X, Y) = list::getMember_nd(PolyLine) do&lt;br /&gt;
            setLocation(console_native::coord(3*X, 2*Y)), write(&amp;quot;*&amp;quot;)&lt;br /&gt;
        end foreach.&lt;br /&gt;
 &lt;br /&gt;
clauses&lt;br /&gt;
    run():-&lt;br /&gt;
        init(),&lt;br /&gt;
        write(&amp;quot;Wich player moves first? (1 - human, 2 - computer): &amp;quot;),&lt;br /&gt;
        Player = read(),&lt;br /&gt;
        clearInput(),&lt;br /&gt;
        if Player = 1 then&lt;br /&gt;
            write(&amp;quot;Enter the start  of the line as  c(3,3): &amp;quot;),&lt;br /&gt;
            hasDomain(cell, К1),&lt;br /&gt;
            К1 = read(), &lt;br /&gt;
            clearInput(),&lt;br /&gt;
            write(&amp;quot;Enter the end of the line: &amp;quot;),&lt;br /&gt;
            hasDomain(cell, К2),&lt;br /&gt;
            К2 = read(), &lt;br /&gt;
            clearInput(),&lt;br /&gt;
            move(2, [К1, К2])&lt;br /&gt;
        else&lt;br /&gt;
            move(1, [c(3, 3), c(4, 3)])&lt;br /&gt;
        end if,&lt;br /&gt;
        _ = readLine().&lt;br /&gt;
 &lt;br /&gt;
end implement main&amp;lt;/vip&amp;gt;&lt;/div&gt;</summary>
		<author><name>Victor Yukhtenko</name></author>
	</entry>
</feed>