Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 30
1

Хуман интерфейс общения с ботом - РЕПЛом

01.02.2017, 00:59. Показов 641. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю чат-бота: интерпретатор языка, РЕПЛ по-народному. Каждый ник в чате может запустить один поток вычислений, пока он не закончится, новый от его имени не запускается, но автор может прервать свой поток. Поток может висеть/вычисляться условно бесконечно. По окончании вычисления в чат от имени бота обязательно выводится результат. Еще у меня есть функции print / read, для вывода / блокирующего ввода информации в процессе вычисления. Если делать print моментальным, тогда можно будет написать бесконечный вывод всякой хрени, что нежелательно. Сейчас сделал так - print выводит не сразу, а в самом конце - когда посчитался результат. Но тогда некрасиво то, что нет последовательности выполнения типа
Code
1
2
print("введите N:");
N = read();
точнее все принты выведутся в самом конце. Но с другой стороны, во многих онлайн-компиляторах примерно то же самое. Вообще можно запретить read. Или print еще впридачу, оставить только вывод результата, но это имхо немного ограничивает возможности. Может что-то посоветуете?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2017, 00:59
Ответы с готовыми решениями:

Написать интерфейс общения в процедуре
Задача: написать функцию sin(2*x)/cos(2*x)-3; интерфейс в процедуре. Проблема в том что не могу написать интерфейс общения в...

Прикинуться ботом
Приветствую, ребята, извиняюсь, если вопрос не корректный! Как сделать так, чтобы яндекс и гугл-метрики зафиксировали посещение бота ?

Проблема с тг-ботом
Проблема в том, что он нормально реагирует только на "/start", если написать что-то другое, типа "/help" или просто текст, он...

5
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
01.02.2017, 12:19 2

Не по теме:

l_bot-у привет :D


Цитата Сообщение от _Ivana Посмотреть сообщение
Если делать print моментальным, тогда можно будет написать бесконечный вывод всякой хрени, что нежелательно.
Что это значит? Запустить вывод в вечном цикле/рекурсивно?
Можно ограничить максимально выводимую длину. Если честно, до конца проблема не понятна.
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 30
01.02.2017, 14:11  [ТС] 3

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
l_bot-у привет
Спасибо, передам :) Как доделаю новый интерфейс и прикручу к какому-нибудь гиттеру, сможешь и лично передать :)


Цитата Сообщение от MrGluck Посмотреть сообщение
Если честно, до конца проблема не понятна.
Смотри. Допустим у нас нет возможности включать в исполняемый кот команды принт и рид. Тогда все просто - вычисляется выражение и возвращается его результат. Заспамить чат нельзя. Можно запустить долгий (и даже бесконечный) вычислительный процесс, но он не будет никак отражаться в окне чата. И это хорошо. Но если мы добавляем принт посреди вычислений, то кто-то напишет бесконечный цикл вывода и забьет чат фигней. Но принт удобен, для отладки да и просто так. Поэтому я принял решение все принты писать в буфер на сервере, результат вычислений добавлять в конец того же буфера, и выводить его значение в конце вычислений. Если юзер прервал вычисления посреди расчета (не дождался), то можно не выводить буфер, а можно выводить что накопилось., Если в процессе вычислений буфер превысил какой-то заданный максимальный размер, поток вычисления прерывается и выводится то, что накопилось (или не выводится, как будет удобнее). И это все хорошо, кроме того, что этот вариант не дает возможности написать свою диалоговую функция внутри РЕПЛа - чтобы в процессе одного вычисления бот писал принтом запросы, ожидал блокирующего ввода и думал дальше. Но имхо это допустимый компромисс в сложившейся ситуации. Хотя, может я не вижу других вариантов, поэтому и создал тему на форуме.

ЗЫ вот пример как онлайн-компилятор реагирует на бесконечные принты: http://rextester.com/OHNJ67301 В самом конце вывода видно, что он задолбался и выругался
Code
1
2
3
4
5
6
..........
Hello, world!
Hello, world!
Hell
 
...
но там лимит времени 10 секунд на задачу, а у меня его не будет. Но в любом случае я хочу избежать подобного hell-а в окне общего чата. Надеюсь, мне удалось пояснить проблему.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
01.02.2017, 14:27 4
Мне кажется ограничение по времени на выполнение задачи как раз логичным для вычислений на сервере. Но я не эксперт в этой области.
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 30
01.02.2017, 14:39  [ТС] 5
У меня под одним логином чата можно запустить только одну задачу, вторую не даст. А контролировать уникальность логинов и отсутствие фиктивных - уже задача чата. Конечно в чате могут оказаться 100500 разных логинов и каждый запустит долгие задачи, но такой популярности я не ожидаю Юзер может запустить задачу и выключить комп - когда ну можно наверное организовать какой-нибудь чистильщик потоков, выполняющихся более часа, например.

Просто ограничение в 10 секунд во-первых маленькое, а во-вторых, оно не спасает от продемонстрированного выше hell-а

Цитата Сообщение от MrGluck Посмотреть сообщение
Но я не эксперт в этой области.
Так я и не как экспертов спрашиваю, а как юзеров, которые могут предложить идеи более удобного им интерфейса
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 30
09.02.2017, 23:24  [ТС] 6
Вести с полей - придумал как решить проблему и не потерять никакой функциональности Сделал свой Read с аргументами, которые вычисляются и печатаются сразу же в чат, после чего поток замирает в блокирующем ожидании ввода. Print же печатает "в стол" - все напечатанное будет видно только в самом конце. И волки сыты и овцы целы - можем и вывести что угодно посреди вычисления (в блокирующем Read) и нет возможности заспамить чат, поскольку неблокирующий Print не выводит сразу в чат. Собственно, пример:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
ivana [11:17 PM] 
defn f (n)
    (def x (read "введите " n "-ю строку" \n "('end' для окончания ввода)"))
    (cond (eq? x 'end) "" ((print x \n) (++ x " " (f (+ 1 n)))))
 
liscript-botAPP [11:17 PM] 
```OK```
 
ivana [11:17 PM] 
f 1
 
liscript-botAPP [11:17 PM] 
```введите 1-ю строку
('end' для окончания ввода)```
? @ivana
 
ivana [11:17 PM] 
one
 
liscript-botAPP [11:17 PM] 
```введите 2-ю строку
('end' для окончания ввода)```
? @ivana
 
ivana [11:17 PM] 
two
 
liscript-botAPP [11:17 PM] 
```введите 3-ю строку
('end' для окончания ввода)```
? @ivana
 
ivana [11:17 PM] 
three
 
liscript-botAPP [11:17 PM] 
```введите 4-ю строку
('end' для окончания ввода)```
? @ivana
 
ivana [11:18 PM] 
end
 
liscript-botAPP [11:18 PM] 
```one
two
three
one two three ```
ЗЫ местный форматтер выдает текст как есть, в слаке это все симпатичнее выглядит
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2017, 23:24
Помогаю со студенческими работами здесь

Работа с ботом
Написал бота для тг. Он должен выводить текущую дату. Но при заливе на хостинг, дата в боте при смене даты в реале НЕ ОБНОВЛЯЕТСЯ. Прошу...

Проблемы с ботом вк
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType import datetime import random login, password = 'login', '***'...

Проверка почты ботом
Добрый день! Возможно ли мне сделать так. У меня программа, при появлении письма на N почте моя программа должна его открыть в TMemo? Или в...

Ошибка с чат ботом
Решил заинтересоваться написанием простого чат-бота с возможностями помощи. Нашел на этом форуме темы и ссылки на этот источник...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru