Программирование на языке Пролог на Андроиде

Ну вообще, PrologClassic похож на SWI-Prolog. Его приемущество в том, что он работает на Андроиде.

приемущество

Это не аргумент. На андроиде надо программировать на том, на чём программируют для андроида максимальное количество людей, то есть на Java.

Аргумент изучать пролог должен крыться в каких-то уникальных возможностях, даруемых самим прологом. Но их не существует.

Но я и не думал выставлять его для создания коммерческих приложений. Не зря же он работает в консоли. Для обучения прологу разве не сгодится? SWI-Prolog , вроде, на андроиде не работает. А этот - да. Разве не удобно иметь корманное приложение, которое всегда с тобой?
Может я в статье, написал что-то лишнее, прошу прощения.

Изменения в версии 3.2:
С новой версией добавлен умный помощник (его зовут Ванечка). Этот помощник основан на базе генеративной языковой модели.


Для того, чтобы этот помощник появился нужно при первом запуске приложения или в настройках выбрать желаемую GPT на базе которой помощник будет работать (YandexGPT или GigaChat) и ввести авторизационные данные (после подключения в облаке, например Yandex Cloud) услуги работы с API генеративной модели (как это сделать - читайте документацию для соответствующей «сетки»).

Возможности помощника:

  1. может предоставить общую справочную информацию по PrologClassic и вообще по прологу, например:

  2. может предоставить справочную информацию по встроенным операторам и встроенным предикатам, например:

  3. может написать небольшой программный код (в запросе должны обязательно присутствовать ключевые слова: «программный код»), например:

Некоторые рекомендации:

  1. Касательно GigaChat Lite (в приложении обозначена как GigaChat);
  2. В чате, после запроса на написание программного кода, если нужно получить справочную информацию - нужно очистить чат, т.к. после написания кода сетка ещё будет думать об этом коде и не поймёт что вы от неё хотите.

Отличный маркетинговый материал. Жаль, что я не покупатель.

Изменения в приложении с версией 3.4:

  1. возможность использовать в функторе терма одинарную ковычку добавив её двумя одинарными ковычками, например:
'Вася ''лентяй'''(двоечник) или 'минералка ''боржоми'''
  1. добавлен предикат speak/3 позволяющий синтезировать речь средствами ОС Андроид, например:
speak ('Привет. Меня зовут Вася',1,1)

Второй параметр указывает тембр голоса, третий - скорость произношения. Предикат произносит предложения на русском языке, голос же, например мужской или женский, выбирается в настройках Андроид. В качестве примера его работы, можно скачать и запустить файл с программой “Крестики и нолики 1.5.txt” (файл находится здесь ). Это написанная мной программа игры в крестики и нолики с компьютером, каждый ход озвучивается компьютером.

Изменения в приложении с обновлением 3.41:
• добавлен предикат sleep/1 , заставляющий вопрос остановиться на столько, сколько указано мелисикунд в аргументе, например:

sleep (1000)

Изменения в приложении с версией 4.0:

  1. Новые типы данных.
    Теперь атомарный терм может быть не только атомом, числом и переменной, но ещё и изображением, и аудиозаписью.

  2. Появились новые предикаты:
    image/1 - является ли терм изображением;
    sound/1 - является ли терм аудиозаписью;
    img_width/2 - изменить ширину картинки, а вместе с ней и высоту пропорционально ширине. Первый аргумент - это само изображение, а второй - величина новой ширины в пикселях;
    connection/2 - задаёт авторизационные данные для работы с нейросетями. Для Яндекса - это Oauth яндекс-аккаунта и Id папки. Для Сбера - это Авторизационные данные и Client Secret (RqUID);
    chat_YandexGPT/5 - генерирует текст нейросетью YandexGPT. Аргументы: 1-ый - это атом представляющий из себя системный текст запроса; 2-ой - список атомов представляющих из себя пользовательский текст с ответами нейросети; 3-ий - тип нейросети: YandexGPT Lite, YandexGPT Pro и YandexGPT Pro 32k; 4-ый - температура; 5-ый - это атом: ответ нейронной сети;
    chat_GigaChat/5 - генерирует текст нейросетью GigaChat. Аргументы: 1-ый - это атом представляющий из себя системный текст запроса; 2-ой - список атомов представляющих из себя пользовательский текст с ответами нейросети; 3-ий - тип нейросети: GigaChat Lite, GigaChat Pro и GigaChat Max; 4-ый - температура; 5-ый - это атом: ответ нейронной сети;
    chat_YandexART/6 - генерирует изображение нейросетью YandexART. Аргументы: 1-ый - это атом представляющий из себя текст запроса; 2-ой и 3-ий - соотношение сторон изображения; 4-ый - зерно генерации, по умолчанию ставим 0; 5-ый - вес текстового описания, по умолчанию ставим 1; 6-ой - это атомарный терм - изображение: ответ нейронной сети;
    chat_GigaChat_image/4 - генерирует изображение нейросетью Гигачатом (если быть точным - это Кандински в оболочке Гигачата). Аргументы: 1-ый - атом представляющий из себя системный текст запроса; 2-ой - атом представляющий из себя обычный текст запроса; 3-ий - тип нейросети: GigaChat Lite, GigaChat Pro и GigaChat Max; 4-ый - ответ нейронной сети ввиде изображения;
    chat_YandexSpeechKitv1/6 - синтез речи нейросетью Яндекса. Аргументы: 1-ый - текст для синтеза; 2-ой - атом представляющий из себя тип языка (например русский: ‘ru-Ru’); 3-ий - задать голос, например: filipp; 4-ый - амплуа голоса, например: neutral; 5-ый - скорость речи; 6-ой - ответ нейронной сети ввиде аудиозаписи.

Примером использования данных предикатов является программа Сочинитель сказки.


Технология отличная. Сказка плохая. У нас в стране демографический кризис как раз из-за сказок с подобным содержимым. Политики, воспитанные на подобных сказках, не в состоянии принять правильные законы (как, например, недавно приняли в Китае).

Изменения а приложении с версией 4.03:
chat_SberSaluteSpeech/3 - Синтез речи нейросетью Сбера. Аргументы: 1-ый - текст для синтеза; 2-ий - голос, например: Pon_24000; 3-ой - ответ нейронной сети ввиде аудиозаписи.

Изменения в приложении с версией 4.04:

  1. chat_GigaChat/6 (замена старому chat_GigaChat/5)- генерирует текст нейросетью GigaChat. Аргументы: 1-ый - это атом представляющий из себя системный текст запроса; 2-ой - список атомов представляющих из себя пользовательский текст с ответами нейросети; 3-ий - список изображений использующиеся в текущем запросе к нейросети; 4-ый - тип нейросети: GigaChat Lite, GigaChat Pro и т. д. записывающиеся теперь по внутреннему наименованию: GigaChat, GigaChat-Pro, GigaChat-2-Max и т.д.; 5-ый - температура; 6-ой - это атом: ответ нейронной сети;
  2. chat_GigaChat_image/4 - генерирует изображение нейросетью Гигачатом (если быть точным - это Кандински в оболочке Гигачата; замена этому же предикату). Аргументы: 1-ый - атом представляющий из себя системный текст запроса; 2-ой - атом представляющий из себя обычный текст запроса; 3-ий - тип нейросети: GigaChat Lite, GigaChat Pro и т. д. записывающиеся теперь по внутреннему наименованию: GigaChat, GigaChat-Pro, GigaChat-2-Max и т.д.; 4-ый - ответ нейронной сети ввиде изображения;
  3. В окне, где выбирается нейросеть для помощника, теперь для GigaChat модель нейросети пишется вручную и таким образом: GigaChat, GigaChat-Pro, GigaChat-2-Max и т.д.;
    Модели нейросетей GigaChat можно посмотреть здесь.
  4. Исправлена работа помощника касательно запросов: “написать предикат” и “написать программу”.

Изменения в приложении с версией 4.051:

Предикат img_width/2 переименован на med_width/2.

Изменения в приложении с версией 4.055:

  1. chat_YandexGPT/5 - 3-ий - изменён, теперь сеть задаётся так как в документации, например: в документации написано gpt://<идентификатор_каталога>/yandexgpt-lite , тогда нужно писать в аргументе ‘yandexgpt-lite’. Это позволяет писать любую нейросеть, которая появляется в документации. Например, на сегодняшний день, можно использовать ещё сеть Llama;
  2. Появился предикат speech/2 (появляется окно принимающее голосовые команды) - 1-ый аргумент - заголовок окна; 2-ой аргумент - принимает значение атома, в котором записаны голосовые команды.

Изменения в приложении с версией 4.5:

  1. Атомарный терм, теперь, может быть и видеозаписью;
  2. Ускорено отображение текста в консоль;
  3. Изменён предикат chat_SberSaluteSpeech теперь у него 4 аргумента вместо трёх: 1-ый - текст для синтеза; 2-ой - голос, например: Pon_24000; 3-ий - скорость речи, оно может быть цифрой от 1 до 5 или принимать значение default, кроме того, можно ещё использовать значения ‘x-low’, low, medium, high и ‘x-high’; 4-ый - ответ нейронной сети ввиде аудиозаписи;
  4. Появились новые предикаты:
  • camera_sizeList/1 - выдаёт список возможных разрешений для фотографий всех камер телефона в списке по очереди;
  • camera_photo/4 - делает фотографию по указанной камере с заданным разрешением. Аргументы: 1-ый - идентификатор камеры (обычно 0 или 1); 2-ой - ширина фото в пикселях; 3-ий - высота фото в пикселях; 4-ый - сделанное фото;
  • med_repeat/1 - делает медиатерм (аргумент), если это аудио или видео, зацикленным;
  • med_speed/2 - устанавливает скорость воспроизведения видео или аудио. Аргументы: 1-ый - аудио или видео; 2-ой - скорость воспроизведения, по умолчанию - 1;
  • med_overwrite/2 - меняет медиа в консоли по индексу, на другое медиа. Аргументы: 1-ый - индекс медиа (все медиа отображаемые в консоли, индексируются по порядку, начиная с 0); 2-ой - медиа;
  • video/1 - истиннен, если аргумент является видеозаписью;
  • record_audio/1 - записывает звук с микрофона в прологовскую аудиозапись, которой становится аргумент;
  • speech_SberSaluteSpeech/3 - производит распознавание речи нейросетью Сбера. Аргументы: 1-ый - аудиозапись с речью; 2-ой - выходной текст состоящий из последовательного набора слов которые сказаны в аудиозаписи; 3-ий - выходной нормированный текст;
  • date_time/1 - выдаёт в терме текущую дату и время;
  • delete_row/1 - удаляет строку в консоли. Аргумент - индекс строки. Индексация начинается с 0;
  • clear_console/0 - удаляет в консоли весь текст и все медиа;
  • lchar/3 - выдаёт последний символ строки. Аргументы: 1-ый - последний символ строки (3-ий аргумент); 2-ой - строка-остаток без последнего символа; 3-ий - исходная строка. сочетания входных и выходных аргументов могут быть такими: (i,i,i)(i,o,i)(i,i,o)(o,i,i)(o,o,i);
  • activity_restore/0 - выводит на экран свёрнутое или закрытое окно приложения (для правильной работы, помимо того, что при запросе приложения нужно предоставить разрешение «Отображение всплывающих окон», ещё надо зайти в настройки приложения и в разделе «Другие разрешения» предоставить разрешения «Открывать новые окна, когда запущено в фоновом режиме» и «Экран блокировки»);
  • activity_close/0 - закрывает окно приложения;
  • med_clicked/1 - является истинным, если на медиа из консоли, по заданному индексу (аргумент), было нажато. При нажатии на медиа, эта информация будет в памяти до тех пор, пока не будет выполнен этот предикат. После выполнения предиката информация о нажатии стирается. Индексация начинается с 0;
  • med_no_selected/1 - устанавливает для медиа (аргумент), чтобы при отображении в консоли, нельзя было выделить нажатием на него;
  • med_delete/1 - удаляет медиа в консоли по указанному индексу. Индексация начинается с 0;
  • med_completed/1 - истиннен, если медиа (видео или аудио), в консоли, по индексу (аргумент), завершило проигрывание. Индексация начинается с 0;
  1. Внимание: при попадании медиа в коментарии или одинарных ковычках используемые для атома, медиа исчезает!

Примером использования данных предикатов является программа Аватар.

Изменения в приложении с версией 4.51:

Новые предикаты:

  • chat_KieAiSunoSong/8 - сочиняет 2 песни с помощью нейросеть Suno, которая представляется сайтом https://kie.ai/. 1-ый аргумент - это промпт; 2-ой аргумент - негативный промпт; 3-ий - модель; 4-ый - вокал; 5-ый - используется для управления интенсивностью стиля при генерации аудиозаписи. Чем больше значение параметра, тем сильнее проявляется выбранный стиль речи, будь то эмоциональная окраска голоса, акценты или особенности произношения. Значение в диапазоне от 0 до 1; 6-ий - используется для управления степенью необычности или оригинальности генерируемого аудиосигнала. Чем выше значение этого параметра, тем больше вероятность того, что результат будет необычным или даже странным. Этот параметр позволяет разработчикам контролировать баланс между стандартностью и креативностью создаваемого звука. Значение в диапазоне от 0 до 1; 7-ий - используется для управления весом аудиосигнала в синтезируемом звуке. Этот параметр позволяет регулировать баланс между качеством звука и скоростью обработки. Чем выше значение параметра, тем больше внимания уделяется качеству звука, что может привести к увеличению времени обработки. Значение в диапазоне от 0 до 1; 8-ий - список, состоящий из двух аудиофайлов с музыкой и вокалом;
  • console_rowSize/1 - получить количество строк в консоли;
  • med_no_going_back/1 - помечает видео, что при завершении проигрывания картинка останавливается на последнем кадре;
  • chat_KieAiSunoVocal/8 - сочиняет 2 песни с помощью нейросеть Suno, которая предоставляется сайтом https://kie.ai/. Результатом является вокал отделённый от одной из двух этих песен. 1-ый аргумент - это промпт; 2-ой аргумент - негативный промпт; 3-ий - модель; 4-ый - вокал; 5-ый - используется для управления интенсивностью стиля при генерации аудиозаписи. Чем больше значение параметра, тем сильнее проявляется выбранный стиль речи, будь то эмоциональная окраска голоса, акценты или особенности произношения. Значение в диапазоне от 0 до 1; 6-ий - используется для управления степенью необычности или оригинальности генерируемого аудиосигнала. Чем выше значение этого параметра, тем больше вероятность того, что результат будет необычным или даже странным. Этот параметр позволяет разработчикам контролировать баланс между стандартностью и креативностью создаваемого звука. Значение в диапазоне от 0 до 1; 7-ий - задаёт аудиозапись из которого будет извлекаться вокал. Значение 1 или 2; 8-ий - аудиозапись с вокалом.

Примеры использования этих предикатов:

Изменения в приложении с версией 4.551:

Изменения в предикатах:

  • med_completed/1 - теперь всегда истиннен, если медиа (видео или аудио), в консоли, под индексом аргумента, завершило проигрывание, и не началось проигрывание снова.

Изменения в приложении с версией 4.56:

Добавлен предикат:

  • speech_YandexSpeechKitv3/2 - производит распознавание речи нейросетью Яндекса. Аргументы: 1-ый - аудиозапись с речью; 2-ой - выходной текст состоящий из последовательного набора слов которые сказаны в аудиозаписи.
    (Для использования данного предиката нужно создать в Яндекс Cloud:
    1. Сервесный аккаунт с ролями: ai.speechkit-stt.user и ai.speechkit-tts.user;
    2. Api-ключ для сервисного аккаунта (во время создания укажите области действия: yc.ai.speechkit.Tts.execute и yc.ai.speechkit.Stt.execute), и использовать его в предикате connection первым аргументом, например: connection( ‘AQVNw…’, -).)

Предикат speech_SberSaluteSpeech временно не работает.

Изменения с версией 4.571:

Изменения в предикате chat_YandexGPT:

chat_YandexGPT/6 — Генерирует текст нейросетью YandexGPT. Аргументы: 1-ый — это атом представляющий из себя системный текст запроса; 2-ой — список атомов представляющих из себя пользовательский текст с ответами нейросети; 3-ий — тип нейросети: задаётся так как в документации, например: в документации написано gpt://<идентификатор_каталога>/yandexgpt-lite , тогда нужно писать в аргументе ‘yandexgpt-lite’ . Это позволяет писать любую нейросеть, которая появляется в документации. Например, на сегодняшний день, можно использовать ещё сеть Llama; 4-ый — температура; 5-ый - тип глубокого мышления: no_reasoning(без глубокого мышления); reasoning(low) (низкое мышление); reasoning(medium) (среднее мышление); reasoning(high) (высокое мышление); 6-ой — это атом: ответ нейронной сети.

Изменения с версией 5.0:

  1. Появилась возможность работы интерпретатора в полноэкранном режиме;

  2. Новые предикаты:

  • speech_GenApiSileroSTT - производит распознавание речи нейросетью Silero STT предоставленную сайтом Gen Api: https://gen-api.ru/. Аргументы: 1-ый - аудиозапись; 2-ой - текст транскрибации;
  • fullscreen_show/0 - открывает окно полноэкранного режима, причём консоль не закрывается, а остаётся под окном полноэкранного режима и в консоль по-прежнему можно выводить все виды терма, а медиа со звуком будут даже звучать;
  • fullscreen_hide/0 - закрывает окно полноэкранного режима переходя в консольный режим. Медиа вместе с текстом можно выводить и при закрытом окне полноэкранного режима, но станут они видны, только при полноэкранном режиме;
  • f_write/5 - выводит текст с заданным размером, цветом и с заданными координатами в окно полноэкранного режима. Аргументы: 1-ый - атомарный терм, но не медиа, который будем выводить на экран; 2-ой - координата X (по умолчанию берёт начало с левого края окна; может принять значения, например: 25; -5; right; center; right(50); center(-30)); 3-ий - координата Y (по умолчанию берёт начало с верху; может принять значения, например: 25; -5; bottom; center; bottom(50); center(-30)); 4-ый - размер текста, например: 14 (шрифт) или fullscreen_size; 5-ый - цвет текста вместе с указанием прозрачности (числа от 0 до 255), например: argb(255,255,0,0);
  • f_write/4 - выводит медиа по заданным координатам и с заданным значением прозрачности. Аргументы: 1-ый - медиа которое выводим; 2-ой - координата X (по умолчанию берёт начало с левого края окна; может принять значения, например: 25; -5; right; center; right(50); center(-30)); 3-ий - координата Y (по умолчанию берёт начало с верху; может принять значения, например: 25; -5; bottom; center; bottom(50); center(-30)); 4-ый - значение прозрачности (интервал от 0 до 255), например: alpha(255);
  • f_med_delete/1 - удаляет объект (медиа или текст) из окна полноэкранного режима по указанному индексу. Индексация начинается с 0;
  • f_med_clicked/1 - является истинным, если на объект (медиа или текст), в окне полноэкранного режима, по заданному индексу N, было нажато. После нажатия на объект, эта информация будет сохраняться в памяти до тех пор, пока не будет выполнен этот предикат. После выполнения предиката информация о нажатии стирается. Индексация начинается с 0;
  • fullscreen_color/1 - устанавливает цвет, которым будет закрашиваться фон окна полноэкранного режима, например: fullscreen_color( rgb( 200, 200, 200 ) );
  • fullscreen_clear/0 - удаляет в окне полноэкранного режима, все медиа и текст;
  • f_landscape_orientation/0 - во время полноэкранного режима, устанавливает экран в горизонтальное положение (его можно использовать и во время консольного режима, но тогда эта настройка сработает при следующем переходе в полноэкранный режим);
  • f_portrait_orientation/0 - во время полноэкранного режима, устанавливает экран в вертикальное положение(его можно использовать и во время консольного режима, но тогда эта настройка сработает при следующем переходе в полноэкранный режим);
  • f_record_audio/5 - записывает звук с микрофона в прологовскую аудиозапись, во время полноэкранного режима. Аргументы: 1-ый - X кооодината места отображения микрофона; 2-ой - Y кооодината места отображения микрофона; 3-ий - размер изображения микрофона: ширина или высота, например: width( 40 ); height (100 ); 4-ый - цвет микрофона, например rgb( 255,0,0 ) или default; 5-ый - аудиозапись, которую запишет предикат;
  • f_med_overwrite/5 - в окне полноэкранного режима, меняет объект (медиа или текст) по индексу, на другой объект. Аргументы: 1-ый - индекс объекта; 2-ой - объект на который мы меняем, это или медиа, или структура указанная в примере далее, пример текста: text( text_example, 80, rgb( 255, 0, 0 ) ), первый аргумент - сам текст, второй - размер (шрифт), третий - цвет; 3-ий - X кооодината места отображения нового объека; 4-ый - Y кооодината места отображения нового объека; 5-ый - прозрачность объекта, например: alpha( 120 );
  • f_med_completed/1 - предикат истиннен, если медиа (видео или аудио), в окне полноэкранного режима, по индексу N, завершило проигрывание. Индексация начинается с 0.;
  • f_med_fullscreen_size/1 - изменяет ширину и высоту медиа так, что при выводе этого медиа в окно полноэкранного режима, при нулевых X и Y, медиа оказывается такого размера, что отображается во весь экран, но при этом сохраняются пропорции ширины и высоты медиа.