Skip to content

Телеграм лог 1 #2

@Ivana-

Description

@Ivana-
Андрей Иванов:
Смотрю, народ молча прибывает :)
[8:52:48 PM] Nosey:
Я на месте, готов стать умнее :)
[8:53:50 PM] Андрей Иванов:
Вижу (мне телеграм сказал :)) Попробую рассказать что-то новое, если получится :) Если нет - не пинайте сильно :)
Андрей Москаленко joined group via invite link
Alexander joined group via invite link
[8:55:35 PM] Nosey:
> Андрей Иванов
> Вижу (мне телеграм сказал :)) Попробую рассказать что-то новое,
На всякий случай, вы _ivana? :)
[8:56:09 PM] Yury:
Поставил более темный фон, вроде лучше видно. )))

[8:56:14 PM] Андрей Москаленко:
Alexander Last name = Croessmah?
 Я если что Новичок
[8:56:21 PM] Андрей Иванов:
А, да! Простите, не представился! Я Иванов Андрей, в интернете Ivana :)

[8:56:35 PM] Андрей Москаленко:
Тоже Андрей? Прикольно )
oleg shulzhenko joined group via invite link
[8:57:21 PM] Андрей Иванов:
Так бывает :) Разделение пространства имен по фамилиями/отчествам позволяет разным людям иметь одинаковые имена и не путаться :)
[8:57:24 PM] Sergey Zakharov:
Здравствуйте, я DevAlone и я программист *хлопки
[8:57:26 PM] Alexander:
Я в курсе кто ты, Андрей.
[8:57:38 PM] oleg shulzhenko:
еще раз всем привет

[8:57:42 PM] Андрей Москаленко:
Ты в курсе, но остальные не факт )
[8:57:43 PM] oleg shulzhenko:
если что я obivan
[8:58:21 PM] Андрей Иванов:
полагаю, сразу все равно все всех не запомнят по новым связям, но не страшно имхо
[8:58:38 PM] Nosey:
Ну а я Сергей :sunglasses:

[8:58:54 PM] Андрей Москаленко:
ct0r кто?
[8:59:08 PM] Yury:
А я Юрий, как по имени видно. ))) На форуме: GbaLog-
 А где rikimaru? Он, вроде, хотел тоже.
[8:59:33 PM] Ctor:
> Андрей Москаленко
> ct0r кто?
я вроде так-то

[8:59:45 PM] Андрей Москаленко:
ааа, не заметил )))
[8:59:52 PM] Sergey Zakharov:
def hi "А я робот и у меня нет имени :("

[8:59:52 PM] Liscript-bot:
OK
[8:59:53 PM] Alexander:
А где список присутствующих?
[8:59:54 PM] Yury:
И hoggy где?
[8:59:54 PM] Sergey Zakharov:
hi

[8:59:54 PM] Liscript-bot:
А я робот и у меня нет имени :(
[9:00:07 PM] Андрей Иванов:
Ладно, подтянется. У меня уже 9 и вроде пора :)
 вот и бота уже пробуют :)
[9:00:34 PM] Yury:
А как цитировать?
 Выделять сообщения, в смысле?
[9:00:46 PM] Nosey:
А как его(бота) пробовать?
[9:00:54 PM] Alexander:
> Yury
> Выделять сообщения, в смысле?
клик + reply
[9:00:58 PM] Nosey:
> Yury
> Выделять сообщения, в смысле?
Правой кнопкой -> reply
[9:01:08 PM] Андрей Иванов:
я не знаю у кого какой уровень и ожидания, поэтому попробую угодить всем. Если что = поправляйте и направляйте :)
 Итак, кто читал SICP?
[9:01:49 PM] Nosey:
> Андрей Иванов
> Итак, кто читал SICP?
-
[9:01:49 PM] Yury:
И тишина.

[9:01:58 PM] Андрей Москаленко:
Не читал, но слышал годная штука )) Хотя не, мне кажется или кажись совсем немного начинал читать
[9:02:07 PM] oleg shulzhenko:
:D взял на заметку что читать

[9:02:11 PM] Андрей Москаленко:
и там кажись начинают со сложности
[9:02:14 PM] Андрей Иванов:
Что, правда? ))) Ладно, тогда все с одной стороны проще ))
 Хотел счпросить кто знает лямбда-исчисление, но после вопроса про сикп уже не уверен )
[9:02:51 PM] Ctor:
пролистал, не вникая в синтаксис, потому что хаскел больше интересовал
[9:03:01 PM] Sergey Zakharov:
знаю лямбда выражения)
[9:03:11 PM] Андрей Иванов:
Хорошо.
[9:03:13 PM] oleg shulzhenko:
в с++ я тоже знаю )
[9:03:33 PM] Андрей Иванов:
я написал этот язык под спечатлением от СИКП
Taras Vilhanyuk joined group via invite link
[9:03:56 PM] Андрей Иванов:
и он конечно полдучился похож на Scheme )
 Начнем с общего. Бот - РЕПЛ языка
 он вычисляет все, что подать ему на вход.
 позже расскажу семантику
 сейчас я заблокировал часть вычислений
Igor Lyskov joined group via invite link
[9:05:22 PM] Андрей Иванов:
чтобы он не встревал каждый раз
 пара минут про типы
 typeof 1

[9:05:46 PM] Liscript-bot:
Integer
[9:06:06 PM] Андрей Иванов:
typeof 1.1

[9:06:06 PM] Liscript-bot:
Double
[9:06:15 PM] Андрей Иванов:
typeof "1"

[9:06:15 PM] Liscript-bot:
String

[9:06:20 PM] Андрей Москаленко:
Прикольный формат доклада с ботом =)
[9:06:29 PM] Андрей Иванов:
typeof '(1 2 3)

[9:06:29 PM] Liscript-bot:
ConsList
[9:06:39 PM] Андрей Иванов:
и т.п.
 есть базовые типы - как в любом языке
[9:06:52 PM] Nosey:
> Liscript-bot
> ConsList
А он может в "динамик лист"? :)
[9:06:56 PM] Igor Lyskov:
Всем привет! Общаемся с ботом?
[9:07:04 PM] Андрей Иванов:
но это не так важно и интересно
[9:07:05 PM] Sergey Zakharov:
typeof [1, 2, 3]

[9:07:06 PM] Liscript-bot:
String
[9:07:11 PM] Sergey Zakharov:
эмм
[9:07:18 PM] Андрей Иванов:
важные образующие типы - Список

[9:07:19 PM] Андрей Москаленко:
почему стринг-то
[9:07:47 PM] Alexander:
> Андрей Москаленко
> почему стринг-то
например в формате pdf так тоже может быть задан string
[9:07:49 PM] Андрей Иванов:
2 варианта - я могу разбирать вопросы или идти дальше - как удобнее?
 потому что скобки не те и квотирования нет
[9:08:12 PM] Taras Vilhanyuk:
удобней другой мессенджер) что за бред этот)

[9:08:16 PM] Андрей Москаленко:
идти дальше наверно
[9:08:19 PM] oleg shulzhenko:
я предлагаю дослушать все
[9:08:20 PM] Андрей Иванов:
выбрали этот
[9:08:23 PM] oleg shulzhenko:
а потом по вопросам
 и бота потестим
[9:08:38 PM] Андрей Иванов:
хорошо, а потом станет само понятно почему стринг )
 итак, список. он тут гетерогенный.
 ридер читает строку и формирует из нее список
 но если я напишу просто список, эвалюатор начнет его вычислять
 потому что все, что подано на вход - вычисляется и песчатается резалт - это РЕПЛ - рид эвал принт луп
 Например
 + 1 2

[9:10:00 PM] Liscript-bot:
3
[9:10:15 PM] Андрей Иванов:
это список, в нем 3 элемента - + , 1 и 2
 можно считать это лямбда-термом
 аппликация + к терамам 1 и 2
 + встроенная арифметическая функция

[9:11:06 PM] Liscript-bot:
Андрей: ошибка преобразования в число: String: встроенная
[9:11:21 PM] Андрей Иванов:
о, он начал вычислять + к строкам ) и написал ошибку )
 общее правило вычисления - строгая семантика с вызовом по значению
 по-русски говоря, сначала вычиляются последовательно каждый элемент списка, а потом весь список
 если в голове списка функция, особая форма или макрос - вычисдляется как вызов с аргументами
 если нично из этого - то честно вычисляется все подряд и возвращается последнее значение
 семантика проста и похожа на F#, SDcheme, ML и т.п.
[9:13:49 PM] Nosey:
Можно пример следующего ? : 1+2+3
[9:13:55 PM] Андрей Иванов:
+ 1 2 3

[9:13:55 PM] Liscript-bot:
6
[9:14:01 PM] Андрей Иванов:
полиарный плюс
[9:14:15 PM] Sergey Zakharov:
+ 1 2 3 - 5
[9:14:21 PM] Андрей Иванов:
префиксная форма записи

[9:14:26 PM] Андрей Москаленко:
+ 3 + 1 2
[9:14:41 PM] Андрей Иванов:
+ 1 2 (- 3 5)

[9:14:41 PM] Liscript-bot:
1
[9:14:48 PM] Igor Lyskov:
- + 3 4 5
[9:15:03 PM] Nosey:
Что-то нас бот не слушает :)
Ага, вот оно как, что-то проясняется, спасибо.
[9:15:26 PM] Андрей Иванов:
напиши еще на пробу - должен слушать
 и тишина
[9:15:55 PM] Nosey:
+ 1 2 (-3) 6

[9:15:55 PM] Liscript-bot:
6
[9:16:14 PM] Yury:
* 1 2

[9:16:14 PM] Liscript-bot:
2
[9:16:19 PM] oleg shulzhenko:
+ 12 -10 * 2
[9:16:21 PM] Андрей Иванов:
все он слушает )
edited 
[9:16:25 PM] Yury:
/ 4 0

[9:16:25 PM] Liscript-bot:
4
[9:16:37 PM] Igor Lyskov:
- ( + 2 3) 1

[9:16:37 PM] Liscript-bot:
4
[9:16:37 PM] Yury:
/ 4 0

[9:16:38 PM] Liscript-bot:
Yury: / by zero

[9:16:38 PM] Андрей Москаленко:
* (+ 1 2) (+ 3 4)

[9:16:38 PM] Liscript-bot:
21
[9:16:40 PM] Андрей Иванов:
смотрите - приоритетов операций НЕТ

[9:16:48 PM] Андрей Москаленко:
ее, у меня вышло ))
[9:16:54 PM] Sergey Zakharov:
>> 5 1
[9:17:00 PM] Андрей Иванов:
это все функции. а не инфиксные бинарные операции как учат в 1 классе
[9:17:06 PM] Alexander:
+ 2147483647 2147483647

[9:17:07 PM] Liscript-bot:
-2
[9:17:17 PM] Андрей Иванов:
ограничения инта
[9:17:18 PM] Alexander:
overflow detected
[9:17:20 PM] Nosey:
В общем, я правильно понимаю, это "обратная обратная польская запись" ? :smiley:
[9:17:22 PM] oleg shulzhenko:
* 2 1 / 2
 блин меня чото не слушает
[9:17:35 PM] Sergey Zakharov:
обратная польская наоборот
 5 6 +

[9:17:39 PM] Андрей Москаленко:
/ (* 2 1) 2

[9:17:39 PM] Liscript-bot:
1
[9:17:40 PM] Андрей Иванов:
это как ADD(1,2,3)
[9:17:47 PM] Yury:
/ 4 1 (-1)

[9:17:47 PM] Liscript-bot:
-4
[9:17:50 PM] oleg shulzhenko:
аа все я понял как надо
[9:17:53 PM] Андрей Иванов:
сишникам проще воспринимать так
[9:17:58 PM] Nosey:
> Sergey Zakharov
> обратная польская наоборот
Дык я и говорю, "обратная обратная" ^^
[9:18:03 PM] Yury:
/ 4 1 (-0)

[9:18:03 PM] Liscript-bot:
Yury: / by zero
[9:18:04 PM] Igor Lyskov:
- + 2 3 1

[9:18:23 PM] Андрей Москаленко:
/ 18 2 3

[9:18:23 PM] Liscript-bot:
3
[9:18:24 PM] Андрей Иванов:
вы же в си вызываете функцию по имени перед аргументами и не называете это обратно йобратно йпольской
[9:18:31 PM] oleg shulzhenko:
/ (+ 1 2 3) 6
[9:18:31 PM] Igor Lyskov:
- + 2 3 1 вот такое тоже должен понимать

[9:18:31 PM] Liscript-bot:
1

[9:18:32 PM] Андрей Москаленко:
ого, он так делит сразу на все, прикольно
[9:18:33 PM] Sergey Zakharov:
sqrt 9
[9:18:49 PM] Yury:
С этим понятно, может дальше?

[9:18:52 PM] Андрей Москаленко:
/ 100 2 20

[9:18:52 PM] Liscript-bot:
2
[9:18:53 PM] Андрей Иванов:
sqrt написать надо еще
[9:18:56 PM] Sergey Zakharov:
exec rm -rf /
[9:18:57 PM] Yury:
Или кто-то ещё пробует?
[9:19:02 PM] oleg shulzhenko:
ладно побалывались го дальше
[9:19:05 PM] Андрей Иванов:
наигрались? )
 поехали

[9:19:12 PM] Андрей Москаленко:
прикольно ))
[9:19:13 PM] Nosey:
> Андрей Иванов
> наигрались? )
+
[9:19:25 PM] Андрей Иванов:
итак, правило вычисления понятно
 любая программа - какой бы длинной она не была - читается тоже в список
 и вычисляется по тому же правилу
 и возвращает результат - это важно
 но в отличие от чистых ФЯ, тут по ходу вычисления возможны побочные эффекты
 в десктопной версии оно мне окошко с тетрисом рисует
 а в ботовой ограничено вводом-выводом
 посреди любого места вычисления
Ilya Arkhipov joined group via invite link
[9:21:20 PM] Андрей Иванов:
но все равно возвращает результат
 например
 print "1 2 3"
 ,)))
[9:21:42 PM] oleg shulzhenko:
)))))))))))
[9:21:52 PM] Андрей Иванов:
бот заснул - херока усыпляет раз в полчаса )
[9:22:02 PM] Sergey Zakharov:
неужели rm -rf / сработал?)

[9:22:08 PM] Андрей Москаленко:
+ 1 2
 да, реально спит
[9:22:22 PM] oleg shulzhenko:
бот оживись
[9:22:28 PM] Igor Lyskov:
Бобик  сдох :)
[9:22:35 PM] Андрей Иванов:
нет, просто дадеплоено на бесплатном сервисе а сам сервис усыпляет для экономии лимита часов

[9:22:38 PM] Liscript-bot:
3
 1 2 3OK
[9:22:51 PM] Андрей Иванов:
он проснулся и ответил всем
 так вот, принт по ходу вычислений честно принтует
 но в бот версии в закадровый реквизит и дло окончания не напишет, но это детали
[9:23:44 PM] Igor Lyskov:
print "2 3"

[9:23:44 PM] Liscript-bot:
2 3OK
[9:23:53 PM] Андрей Иванов:
важна семантика - в отличсие от хаскеля (кто знает) тут можно принтовать по ходу
 что такое ОК
[9:24:05 PM] Nosey:
принт в данном случае и есть сайд эффект?
Sergey Zhuravlev joined group via invite link
[9:24:23 PM] Андрей Иванов:
это ворлшебное значение, которое возвращается, когда возвращать нечего )
[9:24:29 PM] Sergey Zakharov:
print + 4 5

[9:24:30 PM] Liscript-bot:
AR_ADD45OK
[9:24:47 PM] Андрей Иванов:
хороший пример ) он напринтовал все подряд
 потому что + это встроенная операция
[9:25:08 PM] Igor Lyskov:
print "a=" + 2 3

[9:25:08 PM] Liscript-bot:
a=AR_ADD23OK
[9:25:12 PM] Nosey:
время для поиграться плз :)
[9:25:17 PM] Андрей Иванов:
хаафо )
 приоритетов нет - евреи, сыпьте больше скобок ))
edited 
[9:25:35 PM] Nosey:
print (+ 4 5)

[9:25:35 PM] Liscript-bot:
+,4,5OK
[9:25:48 PM] oleg shulzhenko:
def calc + 1 2

[9:25:49 PM] Liscript-bot:
OK
[9:25:51 PM] oleg shulzhenko:
print calc

[9:25:51 PM] Liscript-bot:
AR_ADDOK
[9:26:14 PM] Андрей Иванов:
calc 1 2 3

[9:26:14 PM] Liscript-bot:
6
[9:26:18 PM] Nosey:
print ( + 3 5)

[9:26:19 PM] Liscript-bot:
8OK
[9:26:41 PM] Igor Lyskov:
print (- 3 5)

[9:26:41 PM] Liscript-bot:
-2OK
[9:26:44 PM] Андрей Иванов:
есть /n
[9:26:45 PM] Nosey:
Я наигрался, спасибо :)
[9:26:58 PM] oleg shulzhenko:
вопрос
[9:27:03 PM] Ctor:
print (print 1)

[9:27:03 PM] Liscript-bot:
1OKOK
[9:27:05 PM] Андрей Иванов:
print 1 /n 2 /n 3

[9:27:05 PM] Liscript-bot:
1/n2/n3OK
[9:27:09 PM] oleg shulzhenko:
а есть взаимодействие с переменными ?

[9:27:10 PM] Андрей Москаленко:
print print

[9:27:10 PM] Liscript-bot:
PRINTOK
[9:27:16 PM] Андрей Иванов:
print 1 \n 2 \n 3

[9:27:16 PM] Liscript-bot:
1
2
3OK
[9:27:16 PM] oleg shulzhenko:
которые через def
 чтобы принтовать или не
[9:27:32 PM] Sergey Zakharov:
print \n

[9:27:32 PM] Liscript-bot:

OK
[9:27:35 PM] Igor Lyskov:
print (1) " /n"

[9:27:35 PM] Liscript-bot:
1 /nOK
[9:27:37 PM] Андрей Иванов:
про переменные
[9:27:49 PM] Sergey Zakharov:
print \a

[9:27:49 PM] Liscript-bot:
\aOK
[9:27:53 PM] Nosey:
> oleg shulzhenko
> а есть взаимодействие с переменными ?
Даёшь интерпретатор сишки на телеграмном боте :)
[9:27:59 PM] Андрей Иванов:
есть 3 волшебные формы - def / set! / get
[9:28:05 PM] Igor Lyskov:
print "n=" (3)

[9:28:05 PM] Liscript-bot:
n=3OK
[9:28:07 PM] Андрей Иванов:
yt cgtibnt? gjckeifqnt
 не спешите, послушайте
 есть иерархия окружений - модель памяти
[9:28:32 PM] Igor Lyskov:
print "n=" (3) "/n"

[9:28:33 PM] Liscript-bot:
n=3/nOK
[9:28:58 PM] Андрей Иванов:
каждый фрейм - словать ключ-значение, фреймы иерархтичны
 сейчас вы в глобальном фрейме
 тут загружена стандартная либа
 как - очень просто, так же выполнено вычисление длинного списка команд
 и сейчас в этом глобальном фрейме есть связи имя-значение
 их можно перевязать - передефить
 но если передефить важную функцию - будет не фонтан )
 но такое возможно
 деф дефит в том фрейме, в котором вызван
 например
 a
 ничего не печатает
[9:31:07 PM] Nosey:
Передефливаются они только "в одном фрейме"?
[9:31:13 PM] Андрей Иванов:
но на самом делек вычисляет
 погоди , дай инфу выдать )
 задефиваются символы - это тип языка
[9:31:42 PM] Nosey:
:relaxed:
[9:31:51 PM] Андрей Иванов:
я потом отвесу
 typeof 'a

[9:32:06 PM] Liscript-bot:
Symbol
[9:32:14 PM] Андрей Иванов:
это тип - символ.
 с ним связывается значение.
[9:32:51 PM] Sergey Zakharov:
typeof typeof

[9:32:51 PM] Liscript-bot:
SpecialForm
[9:32:55 PM] Андрей Иванов:
по вопросу - передефивается если только уже есть связь в дапнном фрейме

[9:33:07 PM] Андрей Москаленко:
typeof a

[9:33:07 PM] Liscript-bot:
String
[9:33:25 PM] oleg shulzhenko:
немного не понял про фреймы
[9:33:25 PM] Андрей Иванов:
объясняю почсему стриншг -= это важно
 потом про фреймы
[9:33:33 PM] oleg shulzhenko:
ну го потом спрошу
[9:33:50 PM] Андрей Иванов:
вот почему там стринг -символ a не связан в текущем фрейме
 поэтому при вычислении возвращает по умолчанию строку своего имени
 такое правило
[9:34:19 PM] Sergey Zakharov:
typeof ()

[9:34:20 PM] Liscript-bot:
Sergey: null
[9:34:39 PM] Андрей Иванов:
вернемся к дефкам )
[9:34:42 PM] Igor Lyskov:
typeof 3

[9:34:42 PM] Liscript-bot:
Integer
[9:34:46 PM] Андрей Иванов:
def a 1

[9:34:46 PM] Liscript-bot:
OK
[9:34:48 PM] Андрей Иванов:
a

[9:34:48 PM] Liscript-bot:
1
[9:34:54 PM] Андрей Иванов:
typeof a

[9:34:54 PM] Liscript-bot:
Integer
[9:34:57 PM] Nosey:
> Liscript-bot
> Sergey: null
К вам бот уже по имени обращается хД
[9:35:11 PM] Sergey Zakharov:
print ()

[9:35:11 PM] Liscript-bot:
Sergey: null
[9:35:16 PM] Sergey Zakharov:
почему null?
[9:35:21 PM] Андрей Иванов:
вот появилась переменная в глобальном фрейме с именем a b pyfxtybtv 1

[9:35:41 PM] Андрей Москаленко:
видимо когда принт ничего не печатает null возвращает?
[9:35:49 PM] Андрей Иванов:
можно считать глюком интерпретатора
 пустой список вычисляет в java null
 нет, принт всегда должен возвращать волдшебное ОК
[9:36:22 PM] Nosey:
Пустой лист, в фп же кругом динамика, пока не положишь чего-то там null

[9:36:33 PM] Андрей Москаленко:
OK
[9:36:36 PM] Андрей Иванов:
нет, это мой баг
[9:36:40 PM] Sergey Zakharov:
print :(

[9:36:40 PM] Liscript-bot:
:OK
[9:36:46 PM] Андрей Иванов:
-но предлагаю не акцентировать )
 передефиваем a
 def a 2

[9:37:06 PM] Liscript-bot:
OK
[9:37:07 PM] Андрей Иванов:
a

[9:37:07 PM] Liscript-bot:
2
[9:37:13 PM] Андрей Иванов:
+ a 4

[9:37:14 PM] Liscript-bot:
6
[9:37:24 PM] Андрей Иванов:
def a "sdfghefdhwethwe"

[9:37:25 PM] Liscript-bot:
OK
[9:37:25 PM] Андрей Иванов:
a

[9:37:25 PM] Liscript-bot:
sdfghefdhwethwe
[9:37:32 PM] Андрей Иванов:
динамика во все поля
[9:37:34 PM] Sergey Zakharov:
def a ()

[9:37:34 PM] Liscript-bot:
Sergey: null
[9:37:38 PM] Sergey Zakharov:
a

[9:37:38 PM] Liscript-bot:
sdfghefdhwethwe
[9:37:44 PM] Sergey Zakharov:
a

[9:37:45 PM] Liscript-bot:
sdfghefdhwethwe
[9:37:49 PM] Андрей Иванов:
мне объяснить?
[9:37:56 PM] Igor Lyskov:
короче - константы с именем (#define в С)
[9:37:58 PM] Sergey Zakharov:
почему он чужой def отвечает ?
[9:38:07 PM] Nosey:
> Андрей Иванов
> мне объяснить?
+
[9:38:18 PM] oleg shulzhenko:
и потом ворпос от меня
[9:38:21 PM] Андрей Иванов:
не чужой - мы в общем фрейме глобальном
[9:38:36 PM] Sergey Zakharov:
def нет да

[9:38:36 PM] Liscript-bot:
OK
[9:38:39 PM] Sergey Zakharov:
def да нет

[9:38:39 PM] Liscript-bot:
OK
[9:38:41 PM] Sergey Zakharov:
да

[9:38:41 PM] Liscript-bot:
да
[9:38:49 PM] Андрей Иванов:
просто на ваш деф он попытался вычислить значение, которое надо дефайнуть

[9:38:54 PM] Андрей Москаленко:
+ нет нет

[9:38:55 PM] Liscript-bot:
Андрей: ошибка преобразования в число: String: да
[9:39:01 PM] Sergey Zakharov:
нет

[9:39:01 PM] Liscript-bot:
да
[9:39:02 PM] Андрей Иванов:
а вычисление пустого списка у меня глюк реализации
[9:39:02 PM] Nosey:
> Sergey Zakharov
> да
Вы случаем тестером не подрабатываете? :)
[9:39:08 PM] oleg shulzhenko:
))))

[9:39:18 PM] Андрей Москаленко:
да да
[9:39:21 PM] Андрей Иванов:
def a (+ 1 2 3)

[9:39:21 PM] Liscript-bot:
OK
[9:39:23 PM] Андрей Иванов:
a

[9:39:23 PM] Liscript-bot:
6
[9:39:37 PM] Андрей Иванов:
в полном соответствии с семантикой
[9:39:38 PM] Sergey Zakharov:
> Nosey
> Вы случаем тестером не подрабатываете? :)
нет, но баги нахожу часто)
[9:39:53 PM] Ctor:
def баг фича

[9:39:53 PM] Liscript-bot:
OK
[9:39:55 PM] Андрей Иванов:
сначала вычисляются все элементы, а потом сам список
[9:40:09 PM] Nosey:
> Андрей Иванов
> def a (+ 1 2 3)
Вот эта штука вычисляется при дефайне, или в последующем?
[9:40:13 PM] Sergey Zakharov:
def () nenull

[9:40:13 PM] Liscript-bot:
Sergey: null
[9:40:20 PM] Sergey Zakharov:
print ()

[9:40:20 PM] Liscript-bot:
Sergey: null
[9:40:29 PM] Igor Lyskov:
def a (+ 2 3)

[9:40:29 PM] Liscript-bot:
OK
[9:40:37 PM] Ctor:
ого, вот это баг
[9:40:42 PM] Igor Lyskov:
def b (- 5 4)

[9:40:42 PM] Liscript-bot:
OK
[9:40:44 PM] Андрей Иванов:
сначала - все ВЛОЖЕННЫЕ cgbcrb
[9:40:50 PM] Igor Lyskov:
+ a b

[9:40:50 PM] Liscript-bot:
6
[9:41:06 PM] Андрей Иванов:
баг

[9:41:06 PM] Liscript-bot:
фича
[9:41:21 PM] Sergey Zakharov:
def + -

[9:41:21 PM] Liscript-bot:
OK
[9:41:24 PM] Андрей Иванов:
++ это " " баг

[9:41:24 PM] Liscript-bot:
это фича
[9:41:25 PM] Sergey Zakharov:
+ 1 2
[9:41:27 PM] oleg shulzhenko:
def фича бак

[9:41:28 PM] Liscript-bot:
3
 OK
[9:41:34 PM] oleg shulzhenko:
баг

[9:41:34 PM] Liscript-bot:
фича
[9:41:40 PM] Андрей Иванов:
фича

[9:41:40 PM] Liscript-bot:
бак
[9:41:45 PM] Nosey:
> Андрей Иванов
> сначала - все ВЛОЖЕННЫЕ cgbcrb
Ну я имею ввиду можем ли м сделать "define a (+ b c)" ? где  bc будут определены потом?
[9:42:17 PM] Андрей Иванов:
можем. но до ВЫЧИСЛЕНИЯ дефайна
[9:42:31 PM] Sergey Zakharov:
+ 1 2

[9:42:31 PM] Liscript-bot:
3
[9:42:44 PM] Sergey Zakharov:
а почему он в гиттере выключился?
[9:42:59 PM] Андрей Иванов:
там он не подсвечивается почему-то
[9:43:00 PM] oleg shulzhenko:
и вдовесок вопрос про фрейм, если мы сейчас в глобальном фрейме, то какой в них смысл, я вижу только практическое применение фрейм под каждую комнату в том же месенджере, так и есть или нет ?
[9:43:19 PM] Sergey Zakharov:
set! testframe

[9:43:20 PM] Liscript-bot:
OK
[9:43:21 PM] Андрей Иванов:
про фреймы. народу интересно?
[9:43:22 PM] Sergey Zakharov:
get testframe

[9:43:22 PM] Liscript-bot:
testframe
[9:43:25 PM] oleg shulzhenko:
и еще то что бот выводит он не считывает ?
[9:43:35 PM] Sergey Zakharov:
def a 256

[9:43:35 PM] Liscript-bot:
OK
[9:43:38 PM] Андрей Иванов:
нет, свои мессаги не реагирует
 фреймы объяснять?
[9:44:01 PM] Sergey Zakharov:
set! frame2

[9:44:01 PM] Liscript-bot:
OK
[9:44:04 PM] Sergey Zakharov:
get frame2

[9:44:04 PM] Liscript-bot:
frame2
[9:44:06 PM] Sergey Zakharov:
a

[9:44:06 PM] Liscript-bot:
256
[9:44:16 PM] Sergey Zakharov:
да, объяснять)
[9:44:25 PM] Андрей Иванов:
наигрались? )
 смотрите
 a

[9:44:33 PM] Liscript-bot:
256
[9:44:37 PM] Nosey:
> Андрей Иванов
> фреймы объяснять?
Это что-то типа неймспейсов и анквалифед нейм лукап? )))
[9:44:47 PM] Андрей Иванов:
def f (a) + 1 a

[9:44:47 PM] Liscript-bot:
OK
[9:45:02 PM] Андрей Иванов:
defn f (a) + 1 a

[9:45:02 PM] Liscript-bot:
OK
[9:45:06 PM] Андрей Иванов:
во
 я определил функцию
 она инкрементирует свой аргумент
[9:45:39 PM] Igor Lyskov:
а(4)
[9:45:39 PM] Андрей Иванов:
в теле функции нет никаких имен кроме a
[9:45:43 PM] oleg shulzhenko:
я понял это как отдельные фрейм буферы в графике, только переложить ту же мысль на данные, допустим карта теней и сама сцена в графике
[9:45:47 PM] Sergey Zakharov:
a 1
[9:45:47 PM] Igor Lyskov:
f(4)

[9:45:48 PM] Андрей Москаленко:
f(5)

[9:45:48 PM] Liscript-bot:
5
 6
[9:46:01 PM] Sergey Zakharov:
f 1

[9:46:01 PM] Liscript-bot:
2

[9:46:11 PM] Андрей Москаленко:
defn ffff(a, b) * a b

[9:46:11 PM] Liscript-bot:
OK
[9:46:12 PM] Sergey Zakharov:
f f 1
[9:46:12 PM] Андрей Иванов:
я еще вставлю? )

[9:46:12 PM] Liscript-bot:
Sergey: ошибка преобразования в число: ConsList: ((lambda (a) (+ 1 a)) 1)

[9:46:20 PM] Андрей Москаленко:
ffff 10, 20

[9:46:20 PM] Liscript-bot:
5120
[9:46:23 PM] oleg shulzhenko:
го слушать народ

[9:46:25 PM] Андрей Москаленко:
ffff 10 20

[9:46:25 PM] Liscript-bot:
5120
[9:46:35 PM] Андрей Иванов:
едем дальше )
[9:46:45 PM] Sergey Zakharov:
defn f (a) + 1 f(a)

[9:46:45 PM] Liscript-bot:
OK
[9:46:50 PM] Sergey Zakharov:
f 1

[9:46:50 PM] Liscript-bot:
Sergey: ошибка преобразования в число: Func: (lambda (a) (+ 1 f (a)))

[9:47:02 PM] Андрей Москаленко:
defn ffff(a b) * a b

[9:47:02 PM] Liscript-bot:
OK

[9:47:05 PM] Андрей Москаленко:
ffff 10 20

[9:47:06 PM] Liscript-bot:
200
[9:47:18 PM] Nosey:
> oleg shulzhenko
> го слушать народ
+
[9:47:20 PM] Igor Lyskov:
ffff( 3 4)

[9:47:20 PM] Liscript-bot:
4
[9:47:24 PM] Sergey Zakharov:
def f (a) + 1 f a

[9:47:24 PM] Liscript-bot:
OK
[9:47:27 PM] Андрей Иванов:
если в теле функции нет тех символов, которые не указаны в списке ее аргументов, то это называется волшебным словом комбинатор - из лямбда исчисления
[9:47:30 PM] Sergey Zakharov:
f 56
[9:47:54 PM] Андрей Иванов:
ладно, прредлагаю желающим поиграться пойти в гиттер/слак, а тут поговорит )
 или уже никто не слушает? )
[9:48:13 PM] Sergey Zakharov:
так не работает в гиттере
[9:48:16 PM] oleg shulzhenko:
я слушаю и носей )

[9:48:18 PM] Андрей Москаленко:
а можно ссылки? где поигратсья можно
[9:48:25 PM] Nosey:
Я все слушаю, так слушаю, что вкусняхи еще не доел :)
[9:48:35 PM] Андрей Иванов:
https://gitter.im/liscript/public

gitter.im
liscript/public
REPL-интерпретатор лиспоподобного языка Liscript
[9:48:37 PM] Sergey Zakharov:
https://gitter.im/liscript/public?source=orgpage

gitter.im
liscript/public
REPL-интерпретатор лиспоподобного языка Liscript
[9:48:40 PM] Igor Lyskov:
локальній фрейм возможен?
[9:48:58 PM] Андрей Иванов:
если не будут перебивать, я смогу донести мысль )
 кто поиграться а не послушать - го в гиттер! )
[9:49:42 PM] Sergey Zakharov:
он уснул
 в гиттере
 и не отвечает
[9:50:01 PM] Андрей Иванов:
продолжу. если же в теле функции есть символы которых нет в ее аргументах, то это не комбинатор
 при вычислении (вызове функции) создается локальный ПОДЧИНЕННЫЙ фрейм, в котором символы связываются со значениями
 итак
 a

[9:50:50 PM] Liscript-bot:
256
[9:50:54 PM] Андрей Иванов:
f

[9:50:54 PM] Liscript-bot:
256
[9:51:08 PM] Андрей Иванов:
defn f (a) + 1 a

[9:51:08 PM] Liscript-bot:
OK
[9:51:11 PM] Андрей Иванов:
f

[9:51:11 PM] Liscript-bot:
(lambda (a) (+ 1 a))
[9:51:17 PM] Андрей Иванов:
f 33

[9:51:17 PM] Liscript-bot:
34
[9:51:38 PM] Андрей Иванов:
когда вычислялось тело f, нам было нужно а
 но тело вычислялось в локальном подчиненном окружении, где а было связано с 33
 в глобальном а осталось 256
 a

[9:52:14 PM] Liscript-bot:
256
[9:52:38 PM] Андрей Иванов:
в теле вункйии можно вычислячть другие функции
 и таким образом мы приходим к концепции ДЕРЕВА ФРЕЙМОВ
 значение символа зависит от фрейма
 как ищется значение:
 если нет в текущем фрейме - ищется в родительском
 просто и сердито. и так далее по иерархии.
 а в результате мы получаем вложенные функции и доступ ко всем ВНЕШНИМ переменным
 defn g (x) + x a

[9:54:32 PM] Liscript-bot:
OK
[9:54:36 PM] Андрей Иванов:
g 1

[9:54:36 PM] Liscript-bot:
257
[9:54:44 PM] Андрей Иванов:
f 40

[9:54:44 PM] Liscript-bot:
41
[9:55:15 PM] oleg shulzhenko:
вопрос
 у каждой функции свой фрейм?
[9:55:27 PM] Андрей Иванов:
да. это важно
 угадай почему ваджно )
[9:55:58 PM] oleg shulzhenko:
хмм, хз, возможно какие нибудь дедлоки
[9:56:01 PM] Андрей Иванов:
но еще вопрос - фреймы создания и вызова немного разные
 нет, речь о замыканиях.
 при создании функция запоминает фрейм своего рождения.
 вот мы родили g в глобальном фрейме - он будет брать a оттуда
 если бы родили внутри 100500 уровней вложенности - брал бы из них
 кто живой остался? или я пошел в сложности? )
[9:58:04 PM] oleg shulzhenko:
но если в них не задейфайнено
 типо из глобального
 ?
[9:58:11 PM] Nosey:
Я живой, но тоже есть вопрос
[9:58:13 PM] oleg shulzhenko:
я живой )
[9:58:15 PM] Андрей Иванов:
давай
[9:58:27 PM] Igor Lyskov:
Есть ограничение на уровень вложенности?
[9:58:28 PM] Nosey:
под рождением понимается дефайн функции?
[9:58:30 PM] Андрей Иванов:
нет

[9:58:31 PM] Liscript-bot:
да
[9:58:48 PM] Андрей Иванов:
оба ответа правильны в нужном порядке )))
[9:58:55 PM] Igor Lyskov:
рождение - вызов
[9:58:59 PM] Nosey:
> Liscript-bot
> да
Собрались троли, найчили бота полезностям хД
[9:59:11 PM] Андрей Иванов:
рождение - дефайн
 вызовов 100500 а рождение одно
[10:00:00 PM] Sergey Zakharov:
defn func(x) + 1 (func x)
[10:00:02 PM] Андрей Иванов:
смотрите, вы пишете в СИ pi*2
 откуда он берет пи?

[10:00:20 PM] Liscript-bot:
OK
[10:00:34 PM] Sergey Zakharov:
+ 1 2

[10:00:34 PM] Liscript-bot:
3
[10:00:34 PM] oleg shulzhenko:
ну константа ? аргумент
[10:00:36 PM] Sergey Zakharov:
defn func(x) + 1 (func x)

[10:00:36 PM] Liscript-bot:
OK
[10:00:39 PM] Sergey Zakharov:
func 1
[10:00:44 PM] oleg shulzhenko:
вообще из стека своего
[10:00:44 PM] Sergey Zakharov:
когда стек оверфлоу?
[10:00:46 PM] Nosey:
анквалифед найм лукап хД
[10:00:52 PM] Андрей Иванов:
из ближайшего неймспейса = фрейма
 еще аналогия - кто помнит Паскаль - там есть вложенные функции. Так вот поиск значений переменных точно такой же

[10:01:50 PM] Liscript-bot:
Sergey: GC overhead limit exceeded
[10:01:52 PM] Nosey:
> Андрей Иванов
> из ближайшего неймспейса = фрейма
У меня вот в чём заык в голове, в сишечке же это всё в компайлтайме, а в рантайме это уже стеком называется.
 Но наверное мне что-то прояснит ответ на следующий вопрос, можно ли задефать функцию bar в фрейме функции foo?
[10:02:28 PM] oleg shulzhenko:
ну я тоже более аналогию на стек веду
[10:02:29 PM] Андрей Иванов:
забыли здесь про компайл тайм ) тут жесткий рантайм ) но семантика у хаскеля и Паскаля таж самая! а они компилятся
 не в компиле дело а в семантике
 задефайнить функцию в функции? конечно
 щас напишу
[10:03:54 PM] Sergey Zakharov:
!
[10:04:03 PM] Андрей Иванов:
defn f (x)
    (defn g (x) + x 1)
    (* 2 (g x))
[10:04:04 PM] oleg shulzhenko:
а кроме дефайна, возможно ли вновь задефайненую функцию в функции еще и вызвать?

[10:04:04 PM] Liscript-bot:
OK
[10:04:09 PM] Nosey:
именно что задейфайнить, таким образом, что из функции fooFromRootFrame функцию bar вызвать не получится, т.е. это будет паралельная ветка.
[10:04:19 PM] Андрей Иванов:
f 10

[10:04:19 PM] Liscript-bot:
22
[10:04:40 PM] Nosey:
> Андрей Иванов
> defn f (x) (defn g (x) + x 1) (* 2 (g x))
Найс, всё понятно, спасибо :)
[10:04:58 PM] Igor Lyskov:
g 3

[10:04:59 PM] Liscript-bot:
259
[10:05:18 PM] Андрей Иванов:
я же написал в самам начале самое главное - сначала вычисляются все ВЛОЖЕННЫЕ ЭЛЕМЕНТЫ  а потом сам список
 это не то жэ )))
 g

[10:05:32 PM] Liscript-bot:
(lambda (x) (+ x a))
[10:05:47 PM] Андрей Иванов:
внутри f другое свое локально жэ )
 а тут глобальное жэ
[10:06:08 PM] Igor Lyskov:
было раньше a=256
[10:06:09 PM] oleg shulzhenko:
defn f(x) ( defn g(x) f x )

[10:06:09 PM] Liscript-bot:
OK
[10:06:13 PM] oleg shulzhenko:
f 1

[10:06:13 PM] Liscript-bot:
OK
[10:06:20 PM] Nosey:
> Андрей Иванов
> я же написал в самам начале самое главное - сначала вычисляются
Вычисляются в момент вызова? или объявления(т.е. дефайна) ? надо об этом подумать, раз вы настайваете что это важно :)
[10:06:50 PM] Андрей Иванов:
в момент вычислени яэтого списка
[10:07:10 PM] oleg shulzhenko:
oleg shulzhenko, [07.03.17 22:06]
defn f(x) ( defn g(x) f x )

хмм я ожидал тут бесконечный цикл
[10:07:12 PM] Андрей Иванов:
если до вычисления списка дело не дошло - ничего не делается
[10:07:27 PM] Nosey:
> Андрей Иванов
> в момент вычислени яэтого списка
Какого списка?
Этого ? : defn f(x) ( defn g(x) f x )
Али этого? : f 1
 :)
[10:07:57 PM] oleg shulzhenko:
все понял
[10:08:03 PM] Андрей Иванов:
повторите вопрос, сложно продраться )
 когда я дефайню функцию, ничего не компилируется и не вычисляется
[10:09:24 PM] Nosey:
> Андрей Иванов
> когда я дефайню функцию, ничего не компилируется и не вычисляетс
Во, вот это я и спрашивал :)
[10:09:27 PM] Андрей Иванов:
просто с именем связывается тип лямбда, и сохраняется тело функции (как список) и окружение
 смотри
 defn h (x) / x 0

[10:09:46 PM] Liscript-bot:
OK
[10:09:56 PM] Андрей Иванов:
и никто не умер
 h 5

[10:10:02 PM] Liscript-bot:
Андрей: / by zero
[10:10:07 PM] Nosey:
> Андрей Иванов
> просто с именем связывается тип лямбда, и сохраняется тело функц
И при вызове уже соответственно создается фрейм и список выполняется.
[10:10:09 PM] Igor Lyskov:
h 5

[10:10:09 PM] Liscript-bot:
Igor: / by zero
[10:10:24 PM] Igor Lyskov:
вызвали - получили
[10:10:27 PM] Андрей Иванов:
да, при каждом вызове свой подчиненный фрейм
 потому что значения аргументов вызова различаются
 при дефайне вообще ничего не проверяется
 defn h (x) ролрол орлдодл олдодл

[10:11:22 PM] Liscript-bot:
OK
[10:11:23 PM] oleg shulzhenko:
фреймы функций существуют только в момент их использования или при дефайне ?
[10:11:30 PM] Андрей Иванов:
h 1

[10:11:30 PM] Liscript-bot:
олдодл
[10:11:48 PM] Nosey:
> Андрей Иванов
> я же написал в самам начале самое главное - сначала вычисляются
Меня вот это сообщение ваше смутило.
Спасибо за разяснение.
[10:12:03 PM] Андрей Иванов:
хороший вопрос про фреймы. если дадите сказать - отвечу развернуто и правильно )
[10:12:16 PM] oleg shulzhenko:
да ю)))

[10:12:17 PM] Liscript-bot:
да
[10:12:19 PM] oleg shulzhenko:
даю*
[10:12:35 PM] Андрей Иванов:
при дефайне функция запоминает ссылку на фрейм, где она дефайнится
 почему это важно?
 потому что внутри могут использоваться имена типа pi и надо знать откуда их брать
[10:13:09 PM] Nosey:
Чтобы не попасть в "чужой неймспейс" )
[10:13:15 PM] Андрей Иванов:
из окружения создания функции ) ага
 при вызове (НЕЗАВИСИМО ОТОКРУЖЕНИЯ ВЫЗОВА) значения параметров вычисляются в окружении вызлова, а тело функции в отдельном волшебном окружении
 которое создается как окружение создания с приклеенным подчиненным локальным окружениям для связи значений параметров )
 если в ыпоняли эту тираду - у вас есть шанс понять замыкания )
 щас пример
[10:15:31 PM] oleg shulzhenko:
ну в целом я мысль поняль
[10:15:36 PM] Sergey Zakharov:
(typeof (class "java.lang.Math"))

[10:15:37 PM] Liscript-bot:
Class
[10:16:10 PM] Андрей Иванов:
Сергей, ну мож в гиттер для поиграться, а?
 я все тешу мысль что кто-то слушает )
[10:16:40 PM] Sergey Zakharov:
там он мёртв
[10:16:46 PM] oleg shulzhenko:
типо у нас есть вычисления в 1 неймспейсе  а переменные берем из того неймспейса где дефайнились правильно ?
[10:16:56 PM] Андрей Иванов:
он не бывает мертв - ты его зациклил имхо
[10:17:04 PM] Sergey Zakharov:
в ирке жив
 может быть
[10:17:16 PM] Андрей Иванов:
нет, неправильно
[10:17:22 PM] oleg shulzhenko:
тогда не понял
[10:17:23 PM] Андрей Иванов:
или я не так понял
 еще раз
[10:17:27 PM] Nosey:
Т.е. аргументы берутся из "родительского неймспейса(точнее фрейма таки, ибо это рантайм так сказать)", а вот другие переменные которые использует функция, из своего(при чём, компайлтайм так сказать)?
[10:17:34 PM] Sergey Zakharov:
на ! не реаригует
[10:17:51 PM] Андрей Иванов:
еще раз и по полочкам
 строгая семантика с вызовом по значению
 что это значит
[10:18:24 PM] oleg shulzhenko:
вообщем функция вычисляет свое тело в новом независом фрейме который является дочерним от дефайняшего
[10:18:29 PM] Андрей Иванов:
что перед вычислением функции вычисляются все ее аргументы
[10:18:39 PM] oleg shulzhenko:
чтобы как ты говорил по иерархии тянуть переменные
[10:18:47 PM] Андрей Иванов:
эти аргументы вычисляются в окружении ВЫЗОВА
 как и в ваших С++
 далее окружение вызова уже не нужно
 эти вычисленные значения аргументов связываются с их именами в отдельном фрейме
[10:20:01 PM] Nosey:
Я понял кое что, при вложенном в функции дефайне, вложенный дефайн не создается, до вызова родительского.
[10:20:07 PM] Андрей Иванов:
этот фрейм приклеивается дочерним к фрейму СОЗДАНИЯ  функйии
[10:20:15 PM] Sergey Zakharov:
В общем, ничего не понял, но бот прикольный :)
[10:20:39 PM] oleg shulzhenko:
Андрей Иванов, [07.03.17 22:20]
этот фрейм приклеивается дочерним к фрейму СОЗДАНИЯ  функйии
[10:20:40 PM] Андрей Иванов:
и в этом полученном фрейме вычисляется тело функции
[10:20:45 PM] oleg shulzhenko:
вот я про это же )
[10:20:55 PM] Nosey:
> Андрей Иванов
> defn f (x) (defn g (x) + x 1) (* 2 (g x))
Вот эта g(x) создастся во фрейме f(x) только при вызове f(x)
[10:21:05 PM] Андрей Иванов:
именно
[10:21:07 PM] oleg shulzhenko:
все да, ты вот лучше меня объяснил,
[10:21:28 PM] Андрей Иванов:
потому что смотри пункт как вычисляются списки )
[10:21:55 PM] Nosey:
> Андрей Иванов
> потому что смотри пункт как вычисляются списки )
Ага, я наконец-то понял что вы имели ввиду ))
[10:22:05 PM] Андрей Иванов:
продолжим про состав глобального фрейма?
[10:22:14 PM] oleg shulzhenko:
го
[10:22:36 PM] Андрей Иванов:
хорошо что поняли - это важно ) семантика проста как 3 компейки, но из нее следует многое
[10:22:40 PM] oleg shulzhenko:
только думаю после него закончим , ну по крайней мере я и может в следуший раз продолжим
[10:22:58 PM] Андрей Иванов:
перекличка - кто остался живой?
[10:22:59 PM] Nosey:
5 лет писал на языке с замыканиями, а вот "правильного сленга" не знал :)
[10:23:00 PM] oleg shulzhenko:
но вообще бот прикольный
 я тут)
[10:23:15 PM] Nosey:
Я живой, но пока на перерыв минут в 10 отойду.
[10:23:21 PM] Igor Lyskov:
пока тут, но через 5 минут заканчиваю
[10:23:46 PM] Nosey:
_ivana, вы не устали? )
[10:23:58 PM] Андрей Иванов:
хорошо - объявляется перерыв на 10 минут . трое дожили до конца из всех начавших )
[10:24:06 PM] Igor Lyskov:
но буду читать в телефоне :)
[10:24:14 PM] Андрей Иванов:
я устал только от неорганизованности )
[10:24:26 PM] Nosey:
Ну они потом могут почитать, те кто не дожил )))
> Андрей Иванов
> я устал только от неорганизованности )
Пардонте :)
[10:25:02 PM] Андрей Иванов:
просто фича в том, что поиграться с ботом можно в любой момент, а узнать суть - не всегда )
[10:25:22 PM] oleg shulzhenko:
ну в целом это самописный язык программирования
[10:25:25 PM] Андрей Иванов:
про неорганизованность это не в ваш адрес )
 да, это полноценный язык.
[10:25:38 PM] oleg shulzhenko:
просто интерес в том что я такой в первый раз вижу
 обычно максимум бота это анализ лексем и элементарные действия
[10:25:58 PM] Андрей Иванов:
потому что все промолчали когда я спрашивал читал ли кто СИКП ))
 я на нем тетрис написал работающий, есличе )
[10:26:26 PM] oleg shulzhenko:
))))))))
[10:27:17 PM] Андрей Иванов:
ладно, 10 минут перерыв, если кто вернется - стучите
[10:27:53 PM] Igor Lyskov:
Я в телефоне :smiley:
[10:28:05 PM] Alexander:
ребята, я всё успешно просрал. Работа. )))
[10:31:18 PM] oleg shulzhenko:
вся переписка есть вроде )
[10:31:50 PM] Андрей Иванов:
если народ соберется, можем продолжить через несколько минут
[10:32:26 PM] Nosey:
На позиции :smiley:
[10:32:49 PM] Igor Lyskov:
Я отбыл, но на связи. Весь во внимании
[10:32:57 PM] Андрей Иванов:
отлично. надеюсь, теперь будет поспокойнее, и мне удастся что-то рассказать )
 хотя может есть вопросы? )
[10:33:54 PM] oleg shulzhenko:
да вроде все хорошо до этого расказал
[10:33:57 PM] Nosey:
у меня есть вопрос, но он "филосовский", я его в конце задам :)
[10:34:05 PM] oleg shulzhenko:
ну такой вопрос, сколько ты времени убил
 )
[10:34:19 PM] Андрей Иванов:
отлично - бот заснул на хероке. по сле пробуждения должен ожить на всех остальных чатах
 времени.... на само ядро языка - 2 недели, учитывая что джаву до того момента в глаза не видел )
 на Гуй (да, есть и такой :)) тоже 2 недели, на ботов примерно столько же
 продолжаем.
 поскольку язык функциональный, функция - полноценный тип языка
 ну плюсовикам известны лямбды
 (lambda (x) + 1 x) 10
 а, бота разбужу )

[10:37:07 PM] Liscript-bot:
11
[10:37:12 PM] Андрей Иванов:
во )
 кто ответит, сколько элементов в списке вычисления последнего примера?
[10:37:57 PM] oleg shulzhenko:
2 ?
[10:37:59 PM] Nosey:
2? ))
[10:38:03 PM] Андрей Иванов:
правильно )
[10:38:12 PM] Nosey:
и в первом ложенная "лямбда"
 *вложенная
[10:38:29 PM] Андрей Иванов:
ага. но не вложенная
 но поскольку это тип языка, то мы можем сделать так
 def f (lambda (x) + 1 x)

[10:39:06 PM] Liscript-bot:
OK
[10:39:11 PM] Андрей Иванов:
логично?
[10:39:28 PM] oleg shulzhenko:
сложно )))
[10:39:39 PM] Андрей Иванов:
вот таким нехитрым образом мы перешли от безымянных лямбд к именованным
[10:39:41 PM] oleg shulzhenko:
ну просто лямбду объявили
 ну  да
[10:39:51 PM] Андрей Иванов:
не только, а связали с именем
 f

[10:39:55 PM] Liscript-bot:
(lambda (x) (+ 1 x))
[10:40:23 PM] Андрей Иванов:
теперь символ f связан с этой лямбдой
 и именно поэтому работает следующее
 f 1

[10:40:40 PM] Liscript-bot:
2
[10:40:54 PM] Андрей Иванов:
f (f 1)

[10:40:54 PM] Liscript-bot:
3
[10:40:55 PM] Nosey:
Ну ключевое слово lambda это что-то типа defn только безымяная?
[10:41:08 PM] Андрей Иванов:
а вот это отличный вопрос )
 но перед ьем как дать ответ, надо сказать о макросах.
 или раскрыть тайну до рассказа о макросах?
[10:42:03 PM] oleg shulzhenko:
по порядку
[10:42:05 PM] Андрей Иванов:
lambda - это ключевое слово

[10:42:05 PM] Liscript-bot:
Андрей: ivana.liscript.core.Eval$SpecialForm cannot be cast to ivana.liscript.core.Eval$ConsList
[10:42:18 PM] Nosey:
Макросы я "люблю", я с макросами еще в школе за одной партой сидел и за гаражами курили вместе :)
 По макросам поехали, как положено :)
[10:42:34 PM] Андрей Иванов:
ладно, тогда про макросы а потом разоблачение
 макрос (У МЕНЯ) - это еще один полноценный тип рантайма языка
 да, вот так - именно рантайма
 создается по аналогии с лямбдой другим ключевым словом
 (macro (x) + 1 x) 1

[10:43:57 PM] Liscript-bot:
2
[10:44:11 PM] Андрей Иванов:
то есть по виду очень похож на лямбду
 отличие в семантике вычисления
 помните как вычисляется лямбда?
[10:44:45 PM] Nosey:
Сразу?
[10:45:43 PM] Андрей Иванов:
макрос вычисляется так - в теле макроса заменяются все аргументы на НЕВЫЧИСЛЕННЫЕ значения параметров вызова, а потом все это вычисляется в оуружении вызова
 то есть макрос не запоминает фрейм своего рождения
 он свободный терм )
[10:46:15 PM] oleg shulzhenko:
стоп
 в макросе получается мы не можем ссылаться на переменные ?
[10:46:33 PM] Андрей Иванов:
слушаю
[10:46:42 PM] oleg shulzhenko:
т.к мы не знаем родительский фрейм
 я прав ?
[10:46:59 PM] Андрей Иванов:
можем ) но переменные в макросе 2 видов - связанные (аргументы макроса) и свободные
[10:47:10 PM] oleg shulzhenko:
блин чот сложно становится ))))
 я перестаю понимать ))))
[10:47:17 PM] Андрей Иванов:
связанные заменятся значениями (невычисленными) вызова
 а свободные возьмутся из ОКРУЖЕНИЯ ВЫЗОВА
[10:48:07 PM] Nosey:
Что значит "невычисленными" ?
[10:48:22 PM] Андрей Иванов:
если в лямбде у нас есть pi, то оно возьмется из окружения создания лямбды. в макросе - из окружения вызова
 невычисленными? ;) щас покажу )
[10:48:46 PM] oleg shulzhenko:
тоесть смотри
 лямбду мы можем объявить в главном фрейме
[10:49:06 PM] Андрей Иванов:
gjujlb
[10:49:06 PM] oleg shulzhenko:
и вызвать потом по иерархии в дочернем
[10:49:09 PM] Андрей Иванов:
погоди
[10:49:12 PM] oleg shulzhenko:
жду
[10:50:07 PM] Андрей Иванов:
def m (macro  (x) (++ 'x " = " x))

[10:50:07 PM] Liscript-bot:
OK
[10:50:19 PM] Nosey:
ух :)
[10:50:22 PM] Андрей Иванов:
def f (lambda (x) (++ 'x " = " x))

[10:50:22 PM] Liscript-bot:
OK
[10:50:30 PM] oleg shulzhenko:
:sob::sob::sob:
[10:50:33 PM] Андрей Иванов:
понятно что написал?
 определил лямбду и макрос с одинаковым телом
[10:51:11 PM] oleg shulzhenko:
ну это да
 но чот не понятно
[10:51:17 PM] Андрей Иванов:
тело - строковая конкатенация
 пишет "x = " и клеит аргумент
[10:51:45 PM] Nosey:
один Х там "строка" а другой аргумент?
[10:51:55 PM] oleg shulzhenko:
смотри
 ты присоеденяешь к символу х
 аргумент х
[10:52:10 PM] Nosey:
> Андрей Иванов
> пишет "x = " и клеит аргумент
Именно это я и сказал :)
[10:52:10 PM] oleg shulzhenko:
правильно ?
[10:52:14 PM] Андрей Иванов:
да
 теперь поехали вызывать )
 f 1

[10:52:29 PM] Liscript-bot:
x = 1
[10:52:35 PM] Андрей Иванов:
логично?
 f (+ 1 2)

[10:52:42 PM] Liscript-bot:
x = 3
[10:52:48 PM] Nosey:
ага
[10:52:49 PM] oleg shulzhenko:
да
[10:52:56 PM] Nosey:
m 1

[10:52:56 PM] Liscript-bot:
1 = 1
[10:52:56 PM] Андрей Иванов:
m 1

[10:52:56 PM] Liscript-bot:
1 = 1
[10:53:06 PM] Nosey:
тоже логично :)
[10:53:08 PM] Андрей Иванов:
m (+ 1 2)

[10:53:08 PM] Liscript-bot:
(+ 1 2) = 3
[10:53:08 PM] oleg shulzhenko:
тоже понятно
[10:53:21 PM] Андрей Иванов:
последнее понятно?
[10:53:24 PM] oleg shulzhenko:
да
 в первом случае строка
 ну точнее лево от равно строка
 а право высилсение
[10:53:59 PM] Андрей Иванов:
когда всем станет понятно последнее, тогда и будет ответ на что такое "невычисленные
 m (+ 1 2 3 4 5)

[10:54:09 PM] Liscript-bot:
(+ 1 2 3 4 5) = 15
[10:54:31 PM] Андрей Иванов:
f (+ 1 2 3 4 5)

[10:54:31 PM] Liscript-bot:
x = 15
[10:54:50 PM] Nosey:
Ага, осознал, спасибо)
[10:55:04 PM] oleg shulzhenko:
в целом я все понял
 но можно момент
[10:55:10 PM] Андрей Иванов:
тут философия - лисп это лист процессинг, вычисление списков
 щас погоди
[10:55:18 PM] oleg shulzhenko:
ок
[10:55:31 PM] Андрей Иванов:
список здесь представляет абстракцию лямбда терма
 и любой терм может быть вычислен
 но может быть термом нередуцированным
 смотрите
 cons + 1 2 3

[10:56:16 PM] Liscript-bot:
(+ 1 2 3)
[10:56:31 PM] Андрей Иванов:
я сконструировал список- терм
 eval (cons + 1 2 3)

[10:56:42 PM] Liscript-bot:
6
[10:56:53 PM] Андрей Иванов:
ага?
[10:57:03 PM] Nosey:
ага
[10:57:14 PM] Андрей Иванов:
теперь вопрос был?
[10:57:24 PM] oleg shulzhenko:
так
 маленький
 раньше для сложения мы там юзали +
 ++ 'x " = " x)

[10:57:59 PM] Liscript-bot:
x =
[10:58:02 PM] oleg shulzhenko:
тут 2 ++
 это просто синтаксиси конкатенации?
 другое понятно
[10:58:15 PM] Андрей Иванов:
это лператор строковой конкатенации
 про макросы в рантайме понятно? )
 про колл-конвеншенс тогда идем
 есть кто? )
[10:59:28 PM] Nosey:
> Андрей Иванов
> про макросы в рантайме понятно? )
Вроде понятно, но запонить все термины и осознать - пока не достигнуто :)
 Но идём далее :)
[10:59:48 PM] Андрей Иванов:
ну за пару часов новую концепцию осознать непросто
 хоррошо - колл конвеншенс
 есть допукстим бинарная функция
[11:00:28 PM] oleg shulzhenko:
стоп если что предупрежу
 я наверное все
 по делам нужно
 честно очень интересно
 если можете продолжаейте
 я перечитаю
[11:00:45 PM] Андрей Иванов:
а мы вызвали ее с 3 аргументами. что бы вы как разработчики сделали?
[11:00:47 PM] oleg shulzhenko:
спасибо за лекцию ))
[11:01:18 PM] Nosey:
Я как разработчик динамического языка забил бы на 3 аргумент :):)
[11:01:24 PM] Андрей Иванов:
вариант
 еще можно выдать ошибку
 но я как разработчик придердживался ругаемой концепции жаваскритпа - трактовать до последнего )
 пока возможно троактовать )
 и я сделал так
 defn f (a b) ++ "a = " a ", b = " b

[11:02:43 PM] Liscript-bot:
OK
[11:02:52 PM] Андрей Иванов:
f 1 2

[11:02:52 PM] Liscript-bot:
a = 1, b = 2
[11:02:56 PM] Андрей Иванов:
f 3 4

[11:02:56 PM] Liscript-bot:
a = 3, b = 4
[11:03:01 PM] Андрей Иванов:
f 1 2 3 4 5

[11:03:01 PM] Liscript-bot:
a = 1, b = (2 3 4 5)
[11:03:09 PM] Андрей Иванов:
f 1 2 3

[11:03:09 PM] Liscript-bot:
a = 1, b = (2 3)
[11:03:24 PM] Андрей Иванов:
ага?
[11:03:33 PM] Nosey:
Ну в контексте изуенного, и своих знаний о ФЯ, вызвал бы функцию повторно, или что-нить в этом духе, например два последних аргумента слил бы в список и опробовал провести все вложенные операии над списком и 1-м аргументом.
 Ну хДДД я долго набираю хД
 Ну и соответстенно понятно :)
[11:04:19 PM] Андрей Иванов:
я так и делаю - в последний символ пихаю вычисленный список всех оставшихся аргументов
 defn f(a) a

[11:04:36 PM] Liscript-bot:
OK
[11:04:44 PM] Андрей Иванов:
вот пример отличной функции )
 f 1

[11:04:47 PM] Liscript-bot:
1
[11:04:50 PM] Андрей Иванов:
f 1 2

[11:04:50 PM] Liscript-bot:
(1 2)
[11:05:01 PM] Андрей Иванов:
f (+ 1 2) (+ 3 4)

[11:05:01 PM] Liscript-bot:
(3 7)
[11:05:20 PM] Nosey:
Ага, именно оно. Есть вопрос "филосовский" ))
[11:05:36 PM] Андрей Иванов:
уже созрел для его озвучивания? )
 давайте
[11:06:02 PM] Nosey:
какие от такого решения плюсы? я как человек не думавший в такой концепии, их не знаю, и не могу быстро заметить, но ониж есть? )
[11:06:21 PM] Андрей Иванов:
а ваш вопрос прямо ка нельзя в тему )
 потому что мы подходим к разоблачению )
 помните что я объяснял про анонимные лямбды и макросы?
 снимаем покровы:
 defn

[11:07:14 PM] Liscript-bot:
(macro (name args body) (def name (lambda args body)))
[11:07:26 PM] Андрей Иванов:
ага? ;)
[11:07:46 PM] Nosey:
ха :) т.е. defn это даже не ключевое слово )))
[11:07:57 PM] Андрей Иванов:
именно )
[11:08:01 PM] Nosey:
Хотя вы это говорили помнится в самом начале))
[11:08:21 PM] Андрей Иванов:
все дефайны идут через def
 а сахар написан в библиотеке через макросы
 еще сахар
 defmacro

[11:08:56 PM] Liscript-bot:
(macro (name args body) (def name (macro args body)))
[11:09:17 PM] Андрей Иванов:
and

[11:09:18 PM] Liscript-bot:
(macro (x y) (cond x y false))
[11:09:39 PM] Nosey:
cond
[11:09:43 PM] Андрей Иванов:
ключевых слов примерно десяток всего
 ++ cond

[11:09:50 PM] Liscript-bot:
COND
[11:10:01 PM] Андрей Иванов:
это особая форма - типа свитч
 от слова кондишен
 для условного выполнения
 cond (= 1 2) 1 (< 1 2) 33
[11:11:11 PM] Nosey:
примерно понятно. У нас есть возможность выполнять списки (+ 1 1) и вносить макросы и лямбды, и на этом строится всё остальное.
[11:11:30 PM] Андрей Иванов:
бот заснул, разбудил опять
[11:11:36 PM] Nosey:
> Андрей Иванов
> для условного выполнения
Это да, я думал там тоже макрос :)

[11:11:37 PM] Liscript-bot:
33
[11:11:58 PM] Андрей Иванов:
в большинстве лиспов конд это тоже макрос
 но в редкх как у меня это спецформа. надо было или if писать или cond
 да, все остальные абстракции (кстати весьма высокоуровневые) строятся на это йэлементарной базе
[11:13:22 PM] Nosey:
Ну да. понятно что должно быть одно ключеое слово для ветвления, на осное которого уже сахару понаписать.
[11:13:47 PM] Андрей Иванов:
вопросы? )
[11:14:42 PM] Nosey:
Да наверное пока нет, как подумаю обо всём может появятся, завтра-послезавтра я как раз буду далеко от компа, и будет время подумать :)
 Но мой филосовский вопрос, о котором я говорил в перерыве, пришло его время?
[11:15:29 PM] Андрей Иванов:
хорошо, тогда до связи. я мог бы и дальше выдавать материал, но наверное на сегодня пок ахватит )
 пришло время философии )
[11:15:46 PM] Nosey:
Да, уже устали :)
[11:15:54 PM] Андрей Иванов:
я сам подустал )
[11:16:13 PM] Igor Lyskov:
Да, надо все осмыслить
[11:17:03 PM] Nosey:
Вопрос такой, концепция ФЯ(отсутствие сайдэффектов) отлично ложится на многопоточность, и вот я подумываю, а где тут ложка дёгтя? :)
[11:17:35 PM] Андрей Иванов:
рекомендую почитать СИКП для осмысления и https://github.com/Ivana-/Liscript-GUI-Java-Swing/wiki/Liscript-short-overview

GitHub
Ivana-/Liscript-GUI-Java-Swing
Liscript-GUI-Java-Swing - Liscript GUI Java Desktop Swing
 ложка в том, что без сайдэффектов писать алгоритмы не всегда тривиально
[11:18:44 PM] Nosey:
Но возможно ли их все написать без оверхеда?
[11:19:00 PM] Андрей Иванов:
и проблема времени (что сначала что потом) принципиально не уходит - она философская
[11:19:09 PM] Nosey:
тривиальность/определенные навыки мозга, это дело приходящее.
[11:19:37 PM] Андрей Иванов:
оверхед как плата зачастую вполне допустим
 но конечно зависит от задачи
[11:20:34 PM] Nosey:
Ну т.е. как всегда, серебрянная пуля сегодня не найдена :)
[11:20:45 PM] Андрей Иванов:
если взять распиаренный мапредьюс - то это чистый функциональный подход
 скажем так, есть отличные пули для разных случаев )
 но кстати сегодня я рассказывал про ФЯ с сайдэффектами )
 у мен яи принт/рид и сет и прочее
[11:22:07 PM] Nosey:
Ну да, макросы у вас и есть сайд эффекты )
[11:22:22 PM] Андрей Иванов:
нет, макросы чистые
 m
 а, бот засыпал и все стерлось
[11:23:19 PM] Nosey:
Ну ладно, не стоит уже ))
[11:23:44 PM] Андрей Иванов:
мои макросы похожи на лямбды хаскеля наполовину - они не вычисляют свои аргументы
[11:24:07 PM] Nosey:
как-нить продолжим, если не сложно будет вам, на следующей неделе, а пока можно прочитать ваше чтиво, т.е. ссылку на гитхаб.
> Андрей Иванов
> мои макросы похожи на лямбды хаскеля наполовину - они не вычисля
Именно и таким образом они вычисляются потом, что неявно добавлят сайдэффект.
[11:24:55 PM] Андрей Иванов:
хорошо, я всегда на связи. ботов можете сами будить по известной ссылке http://www.cyberforum.ru/beta-testing/thread1926446.html
www.cyberforum.ru
Liscript - РЕПЛ в виде бота на гиттере (слаке, телеграме, ИРЦ) - Бета-тестирование - CyberForum.ru
Прикрутил чат-бот интерфейсы к своему эвалюатору. Можно посмотреть на гиттере https://gitter.im/liscript/public Бета-тестирование
 про сайдэффект вы имхо заблуждаетесь, нор отложим на потом )
[11:25:51 PM] Nosey:
Вполне возможно :)
 Большое спасибо, было очень интересно.
 И спокойной ночи :)
[11:26:59 PM] Андрей Иванов:
у меня есть десктопное приложение с гуем - иподсветка синтаксиса, скобок, репл и т.п. Для этого языка. Еслои интересно. И вам спасибо и споркойной ночи!
Denis joined group via invite link
ilya korotkov joined group via invite link
[11:34:02 PM] Андрей Иванов:
бот пока не заснул, можно играться
[11:34:36 PM] ilya korotkov:
ребята, что тут происходит?
edited 
[11:35:26 PM] Андрей Иванов:
все пошли спать, а до этого был сеанс демонстрации бота-репла с объяснениями и разоблачениями )
[11:35:47 PM] ilya korotkov:
хм, что ж так рано все спят то(
[11:36:23 PM] Андрей Иванов:
завтра сложный день наверное, готовятся )
[11:36:40 PM] Nosey:
Я завтра уезжаю, так что поэтому уже сплю.
 :)
[11:37:16 PM] Андрей Иванов:
приходите еще, мне нравится вам объяснять ))
[11:37:16 PM] ilya korotkov:
хм, ну хоть стоило потраченного времени это обсуждение?)
[11:37:46 PM] Андрей Иванов:
это не мне решать - я организовал все это )
[11:38:06 PM] ilya korotkov:
ну тебе то спасибо полюбэ, молоток вообще
[11:38:13 PM] Alexander:
+ 100 500

[11:38:13 PM] Liscript-bot:
600
[11:38:40 PM] Alexander:
/6000 (+ 100 500)
[11:38:47 PM] ilya korotkov:
/6000
[11:39:04 PM] Андрей Иванов:
/ 6000 (+ 100 500)

[11:39:04 PM] Liscript-bot:
10
[11:39:20 PM] Андрей Иванов:
иначе канал как спецкоманду определяет слеш

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions