-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
Андрей Иванов:
Смотрю, народ молча прибывает :)
[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
Labels
No labels