Написание элементов в консоли Prolog

В прологе я делаю что-то вроде этого:

    ************************
    *                      *
    *      ##########      *
    *      # button #      *
    *      ##########      *
    *                      *
    ************************

Пользователь указывает ширину и высоту окна (создается с помощью *), а также координаты, ширину, высоту и текст кнопки (создается с помощью #). Это "окно" написано в консоли пролога. У меня нет проблем с написанием самого окна, но я не знаю, как это сделать с чем-то в нем. Может ли кто-нибудь помочь мне, я не имею в виду писать это для меня, но даже небольшие руководства будут полезны.


person lukasz128    schedule 15.01.2013    source источник


Ответы (2)


Напишите это с помощью DCG как чистую грамматику.

Вот начало. Подробнее здесь.

:- use_module(library(double_quotes)).
:- set_prolog_flag(double_quotes,chars).

newline --> "\n".

pre --> "# ".

post --> " #".

button -->
   pre,
   "button",
   post.

Теперь вы можете запросить его на верхнем уровне:

?- phrase(button, Xs).
Xs = "# button #".

И вы можете распечатать его напрямую:

?- phrase(button, Xs), atom_chars(A, Xs), write(A).
person false    schedule 15.01.2013
comment
фраза и атом_чары кажутся многообещающими, но то, что вы сделали с кнопкой, не так просто. Я не знаю ширину кнопки, она не всегда будет выглядеть вот так # кнопка # - person lukasz128; 15.01.2013
comment
@ lukasz128: Это только отправная точка - как вы и требовали - person false; 15.01.2013
comment
Я знаю. Но в любом случае я не могу понять, как это сделать. Я пытаюсь создать список для каждой строки, но у меня нет результатов. - person lukasz128; 15.01.2013

Посмотрите на формат/2, который работает как printf в C++.

person Anniepoo    schedule 16.01.2013