Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Проекты > Проекты на BlitzMax

Ответ
 
Опции темы
Старый 27.11.2007, 13:29   #1
Matt Merkulov
Модератор
 
Аватар для Matt Merkulov
 
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений
(для 247 пользователей)
Литературный Язык программирования Собеседника v0.1

http://matt-merkulov.livejournal.com/28791.html

Итак, я закончил основу ЛЯСа. Компилятор с парочкой примеров качать здесь: http://blitzetcetera.org/share/LYaS_0.1.zip. Текст в файле писать прописными русскими буквами в кодировке Win (Блокнотом можно).


Система интерпретатора:


Сначала хотел сделать образец попроще, но, поразмыслив и оглядев перспективы, понял, что зря потрачу время - потом придется все делать с нуля. Сразу сделал максимально гибкую структуру данных, а именно объекты с направленными связями разных типов между ними (так называемый направленный граф).

Сама программа состоит из набора служебных процедур и модулей. В начале программы из этих модулей формируется список и интерпретатор языка принимает команды - строки из файла. Сначала строка разбивается на слова. Для каждого слова создается объект в базе данных (если еще не создан) с соответствующим именем.

Затем по очереди перебираются модули. Каждый модуль имеет набор шаблонов, которые проверяются на совпадение со строкой (шаблоны могут содержать квантификаторы типа "любое слово", "любая последовательность слов"). Например, модуль "ТочкоРазделитель" содержит 2 шаблона - "&.&" и "&.". Это значит, шаблон сработает, если в середине или конце строки есть точка (т. к. & - любая последовательность слов). Шаблон "кто # ?" сработает только в том случае, если фраза будет состоять из 3-х слов, причем первое - "кто", а третье - "?"

Первый совпавший модуль запускается и ему передается массив списков слов на каждый из элементов массива (например строка "ты - компьютер. кто ты?" со сработавшим "ТочкоРазделителем", передаст ему массив ["ты", "-", "компьютер"],["."],["кто","ты","?"]), а также совпавший шаблон. Сам модуль может делать с эими данными все, что угодно (ТочкоРазделитель отправляет на обработку первый массив (как фразу) и третий (если есть), таким образом строка разделяется на последовательные фразы точкой).


Связи


Пока в интерпретаторе "зашиты" 4 типа связей:

1. "то же самое" - слово является идентичным по смыслу связанному с ним слову
2. "это" - вхождение слова, например яблоки - это фрукты, понятие "яблоки" входит в понятие "фрукты"
3. "содержит", обратная связь - понятие "фрукты" "содержит в себе" понятие "яблоки"
4. "поменять при ответе" - чтобы компьютер, например" отвечал "я" вместо "ты" и наоборот

С помощью связей типа 2 и 3 можно составить, например, схему биологических видов (организмы (растения (деревья, трава), животные (травоядные (корова, лошадь), хищники (лев)))


Модули


В данный момент доступны 7 видов модулей:

1. Разделитель строки точками на предложения
2. Вычленитель вопросительных предложений
3. Установщик ссылок "это" на объекты (например, "ель, лиственница - это хвойные деревья" - устанавливает 4 ссылки (ель - хвойная, ель - дерево, лиственница - хвойное, лиственница - дерево)
4. Вывод свойств объекта - объектов, на которые он ссылается, причем включая объекты, на которые ссылаются эти объекты и т. п. (например, "что такое ель?" - "ель - это хвойное, это дерево, это растение" (т. к. дерево - растение))
5. Проверка, ссылается ли один объект на другие, возможно через цепочку объектов ("ель - хищное растение?" - "нет, ель - растение, но не хищное.")
6. Перечисление объектов, включенных в данный (то же самое, что и вывод свойств, только наоборот - "растения - деревья, ель, лиственница, трава"
7. Вывод всех объектов со связями (дамп системы)


Примеры системы и запросов


Кто ты?
>Я не знаю, кто я.
Ты - компьютер. кто ты?
>Я - компьютер.
Ты - человек?
>Нет, я - не человек.

Яблоки, груши - это фрукты.
Березы, дубы, сосны - это деревья.
Ели, лиственницы - это хвойные деревья.
Деревья, фрукты - это растения.
Коровы, лошади - это травоядные животные.
Львы - это хищные животные.
Растения, животные - это организмы.
Что такое лиственницы?
>Лиственницы - хвойные, деревья, растения, организмы.
Львы - это фрукты?
>Нет, львы - не фрукты.
Коровы - это хвойные животные?
>Коровы - это животные, но не хвойные.
Груши - это организмы?
>Да, груши - организмы.
Перечисли травоядные организмы.
>Травоядные организмы - это коровы, лошади.
Перечисли хвойные растения.
>Хвойные растения - это ели, лиственницы.
Перечисли хищные деревья.
>Я не знаю таких.
Перечисли организмы.
>Организмы - это растения, деревья, березы, дубы, сосны, ели, лиственницы, фрукты, яблоки, груши, животные, коровы, лошади, львы.
Дамп.
>#
>&
>?
>,
>И = ,
>Такое = ,
>.
>! = .
>Кто
>Что = кто
>Я меняется на ты
>Ты меняется на я
>Перечисли
>-
>Это
>Дамп
>Яблоки это фрукты
>Груши это фрукты
>Фрукты содержат яблоки, содержат груши, это растения
>Березы это деревья
>Дубы это деревья
>Сосны это деревья
>Деревья содержат березы, содержат дубы, содержат сосны, содержат ели, содержат лиственницы, это растения
>Ели это хвойные, это деревья
>Лиственницы это хвойные, это деревья
>Хвойные содержат ели, содержат лиственницы
>Растения содержат деревья, содержат фрукты, это организмы
>Коровы это травоядные, это животные
>Лошади это травоядные, это животные
>Травоядные содержат коровы, содержат лошади
>Животные содержат коровы, содержат лошади, содержат львы, это организмы
>Львы это хищные, это животные
>Хищные содержат львы
>Организмы содержат растения, содержат животные


Возможности которые будут реализованы в дальнейшем:


* Заметки, ремарки - в квадратных скобках [вот так] - игнорируются.


* Возможность делать и распознавать объекты, идентифицируемые по нескольким словам (например "зеленое яблоко"). Возможно придется отделить слова от объектов.


* Морфология слов (придется, т. к. иначе ответы будут косноязычными). Планирую сделать перечисление тех же склонений в литературной форме и формирующихся автоматически (с возможной коррекцией). Возможно даже словарь подключить нужно будет.


* Вывод фраз (пример - классическая прога)

Скажи "Hello World!".
>Hello World!


* Система вычислений:

Бывает яблоко, 2 яблока, 5 яблок, яблоки.
Сколько будет 2 яблока и 4 яблока?
>Будет 6 яблок.
У меня 3 раза по 4 яблока и еще 2 яблока.
Сколько яблок у меня?
>У тебя 14 яблок.


* Занесение и вычисление формул:

Вероятность взлома замка - это всегда (5 раз интеллект и 4 раза ловкость и 7 раз удача) поделить на сложность замка.
Сложность замка - 5.0. У меня интеллект - 7, ловкость - 2, удача - 6. Какова у меня вероятность взлома замка?
>Вероятность взлома замка у тебя - 17.


* Модификаторы вероятности выполнения. Если эти слова встречаются в тексте команды, она будет с определенной вероятностью выполняться после после каждого ввода фразы.

o Всегда - 100%
o Иногда - 25%
o Редко - 5%

(возможно, добавлю еще категорий, например "очень редко")
Иногда говори "Это полная чушь.", а иногда говори "С этим я полностью согласен.".[интерпретатор будет иногда "высказывать свое мнение" о командах]


* Условия:

Всегда если скажут "синхрофазотрон", то скажу "Извини, но это я выговорить не в состоянии".[реакция на слово]
У меня 100 рублей.
Иногда если у меня больше 20 рублей, то скажу "Куплю-ка я сникерс.", у меня еще сникерс и у меня минус 20 рублей.
рублей.[интерпретатор будет иногда "приобретать сникерсы", пока не кончатся деньги]
Иногда если у меня сникерс, то скажу "Съем-ка я сникерс." и у меня минус один сникерс.[и "лопать" их иногда тоже]


* Случайные числа

У меня от 1 до 5 яблок. Сколько у меня яблок?
>У тебя 2 яблока.


* Случайные выбор события

Всегда скажу "Ух!" или скажу "Эх!" или скажу "Ох!" или скажу "Ах!".
[интерпретатор будет добавлять одно из этих слов в конец ответа с одинаковой вероятностью]


* Процедуры

Вот мне лень работать:[начало процедуры]
Скажу "Побродить что ли по Интернету." или скажу "Послушать что ли музыку." или скажу "Поспать что ли." или скажу "Посмотреть что ли зомбоящик.".
Скажу "Ну вот, еще час прошел." и время плюс час или скажу "Ну вот, еще полчаса прошло." и время плюс 0.5 часа.
Все.[конец процедуры]

Иногда мне лень работать.[процедура запускается просто по имени (задание имени идет после "Вот")]


* Перестановка и замена слов, символов, групп букв и вообще манипуляции и работа со строками.


* Возможность создавать свои модули

[создание ТочкоРазделителя]
Что-то, чего-то - это любые слова.
Всегда сначала если скажут "что-то .", то обработать что-то и остановиться.
Всегда сначала если скажут "что-то . чего-то", то обработать что-то, обработать чего-то и остановиться.
[сначала - ключевое слово для помещения этой строки на верх списка исполняемых процедур, т. е. строка будет исполняться первой, остановиться - прекратить дальнейшее исполнение строк на этом этапе]


* Очистка

Забыть яблоко, грушу [уничтожаются объекты вместе со связями]
Забыть правила [исполняемые после каждой фразы команды]
Забыть все


ЛЯС будет удобен и понятен для людей, не занимавшихся программированием, забавен и своеобразен (тексты программ читать, например, можно и на сон грядущий ). Структура языка хорошо подходит для разработки систем вообще, но вот некоторые более конкретные примеры применения ЛЯСа (при расширении функциональности, разумеется).

* Создание чат-ботов и фильтров (мата например)
* Создание текстовых квестов (может даже MUDов)
* Создание обработчиков текстов (в т. ч. литературных произведений)
* Создание и тестинг ролевых и сценарных систем
* Создание языков программирования
* Создание обучающих программ

P.S. Бета тестинг версии 0.1 и листинги прог в комментах приветствуются! Правда, еще особо не развернешься, но тем не менее...
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Matt Merkulov за это полезное сообщение:
h1dd3n (16.08.2009), Phantom (20.01.2009)
Старый 27.11.2007, 13:49   #2
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,012 пользователей)
Re: Литературный Язык программирования Собеседника v0.1

Matt Merkulov, это круто !!
Очень круто !!
(Offline)
 
Ответить с цитированием
Старый 27.11.2007, 15:21   #3
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 131 полезных сообщений
(для 251 пользователей)
Re: Литературный Язык программирования Собеседника v0.1

мощь! как долго ты разрабатывал ЛЯС?
(Offline)
 
Ответить с цитированием
Старый 27.11.2007, 15:48   #4
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Литературный Язык программирования Собеседника v0.1

Интересная машина, приятная работа, хотя На ИИ пока не тянет.
Буду краток:
1.
Корова-травоядное
Травоядное- не хищное
Корова- хищное
Что такое корова?
>Корова - травоядное, не, хищное, хищное.
Понятия логических отрицаний нет, вычленения определения из кучи посторонних слов- тоже нет.
2. Введение некорректных команд на выходе обернется убитыми первыми символами строк. На входе:
Привет!
Я что пришел-то... Это самое... забыл.
Ну ладно, пойду, пожалуй...
, на выходе:
"Їривет!
ї что пришел-то... Это самое... забыл.
­у ладно, пойду, пожалуй..."
(Offline)
 
Ответить с цитированием
Старый 28.11.2007, 00:33   #5
Matt Merkulov
Модератор
 
Аватар для Matt Merkulov
 
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений
(для 247 пользователей)
Re: Литературный Язык программирования Собеседника v0.1

To Zanoza: этот базовый вариант - 2 недели

To Diplomat:
1) Ну разумеется, там же пока всего 7 модулей (см список вначале). Их функционал такие конструкции не включает.
upd: в этом случае, видимо, порядок действий будет такой:
Корова - травоядное [корова -(это)-> травоядное]
Травоядное - не хищное [травоядное -(не)-> хищное]
Корова - хищное [корова -(это)-> хищное, удаляется (корова -(это)-> травоядное), т. к. (травоядное -(не)-> хищное)]

2) Текст писать нужно в нижнем регистре.

upd: да, кстати, точно, проверку на дубликаты связей нужно ввести будет
(Offline)
 
Ответить с цитированием
Старый 20.01.2009, 17:50   #6
AHreJI
AnyKey`щик
 
Регистрация: 20.01.2009
Сообщений: 1
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Литературный Язык программирования Собеседника v0.1

Впечатляет. На дипломную бы потянуло!
(Offline)
 
Ответить с цитированием
Старый 20.01.2009, 18:25   #7
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,702
Написано 295 полезных сообщений
(для 562 пользователей)
Ответ: Литературный Язык программирования Собеседника v0.1

Сообщение от AHreJI Посмотреть сообщение
Впечатляет. На дипломную бы потянуло!
Слишком толсто!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (20.01.2009)
Старый 21.01.2009, 10:58   #8
Isono
Оператор ЭВМ
 
Аватар для Isono
 
Регистрация: 25.08.2008
Сообщений: 29
Написано 3 полезных сообщений
(для 4 пользователей)
Ответ: Литературный Язык программирования Собеседника v0.1

Не смотря на все недочЁты это вещь! =)
может ты и гибрид с нейронными сетями сделаешь?)
(Offline)
 
Ответить с цитированием
Старый 22.01.2009, 04:52   #9
Matt Merkulov
Модератор
 
Аватар для Matt Merkulov
 
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений
(для 247 пользователей)
Ответ: Литературный Язык программирования Собеседника v0.1

Выяснилось, что для ЛЯПа нужен довольно таки мощный фреймворк. Посему проект будет продолжен только когда будет готов новый парсер для 2DLab. Парсер я буду писать уже после выхода версии 1.0, а это произойдет нескоро.

P. S. Рабочая ссылка на пост про ЛЯП в блоге: http://matt-merkulov.blogspot.com/2007/11/v01.html
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dream (13.02.2009)
Старый 19.09.2017, 17:05   #10
rsashka
AnyKey`щик
 
Регистрация: 19.09.2017
Сообщений: 1
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Литературный Язык программирования Собеседника v0.1

Matt Merkulov, в каком состоянии сейчас находится ваш проект?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык программирования проГоп. SBJoker Юмор 10 13.01.2010 11:44
Интерпретатор (среда программирования в телефоне). abcdef Проекты на MidletPascal 4 31.03.2009 09:27
Программирования для Windows Mobile ARV Основной форум 21 15.06.2008 18:47
Жемчужины программирования (книга) impersonalis Алгоритмика 0 04.11.2006 14:14
ПЕРЕВОД НА РУССКИЙ ЯЗЫК GENERAL PUBLIC LICENSE GNU pax Болтовня 0 12.07.2006 19:56


Часовой пояс GMT +1, время: 03:09.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com