Size: a a a

Compiler Development

2020 April 21

МБ

Михаил Бахтерев in Compiler Development
K R
Оно нестрогое. Обычный яп тоже работает с процессами как с функциями «почти наверняка». А R, например, вообще реализует «ленивые функции с побочными эффектами». И это почти всегда нормально работает.

Bash и pipes реализуют  условный «ленивый fold», но это не новость.
Не реализует. Дайте ленивому fold бесконечный список и он уйдёт в bottom (неопределённое значение). Pipe-ы не уйдут.
источник

KR

K R in Compiler Development
Михаил Бахтерев
Не реализует. Дайте ленивому fold бесконечный список и он уйдёт в bottom (неопределённое значение). Pipe-ы не уйдут.
| we -l уйдёт.
источник

МБ

Михаил Бахтерев in Compiler Development
K R
| we -l уйдёт.
Вы. Как бы. Не различаете forall и exists. А это важное различие
источник

KR

K R in Compiler Development
Михаил Бахтерев
Вы. Как бы. Не различаете forall и exists. А это важное различие
Принципиально не различаю.
источник

МБ

Михаил Бахтерев in Compiler Development
K R
Принципиально не различаю.
👍
источник

KR

K R in Compiler Development
Ну мы всё-таки о практических вещах говорим.
источник

E

Eugene in Compiler Development
Михаил Бахтерев
Вы. Как бы. Не различаете forall и exists. А это важное различие
а в чём там различие?
источник

МБ

Михаил Бахтерев in Compiler Development
K R
Ну мы всё-таки о практических вещах говорим.
Ну. Если Вам для практики не важно, всегда ли у вас зависает вычисление или только в некоторых специальных случаях, мне как бы нечего больше возразить.
источник

МБ

Михаил Бахтерев in Compiler Development
Eugene
а в чём там различие?
Ну, все fold-ы на бесконечных списках равны. Не все процессы на бесконечных последовательностях событий равны. Вроде, разница очевидна. Нет?
источник

KR

K R in Compiler Development
Михаил Бахтерев
Ну. Если Вам для практики не важно, всегда ли у вас зависает вычисление или только в некоторых специальных случаях, мне как бы нечего больше возразить.
Да оба они - length, написанная через foldl и wс -l зависают в некоторых специальных случаях. Причём более менее одинаковых.
источник

МБ

Михаил Бахтерев in Compiler Development
K R
Да оба они - length, написанная через foldl и wс -l зависают в некоторых специальных случаях. Причём более менее одинаковых.
wc -l -- это не fold
источник

KR

K R in Compiler Development
Михаил Бахтерев
wc -l -- это не fold
Это length
источник

МБ

Михаил Бахтерев in Compiler Development
K R
Это length
Нет, конечно же.
источник

KR

K R in Compiler Development
Михаил Бахтерев
Нет, конечно же.
И что это?

Если точно, то wc -l это

getContents >>= \c -> return (length $ lines c) >>= print

Но если убрать монадистику, то просто

length . lines
источник

МБ

Михаил Бахтерев in Compiler Development
K R
И что это?

Если точно, то wc -l это

getContents >>= \c -> return (length $ lines c) >>= print

Но если убрать монадистику, то просто

length . lines
Будучи запущенной - это процесс. Я думаю, дальше обсуждать бесполезно. Посмотрите на книгу cspbook Хоара. Он там лучше и доступнее меня всё объясняет.
источник

KR

K R in Compiler Development
Михаил Бахтерев
Будучи запущенной - это процесс. Я думаю, дальше обсуждать бесполезно. Посмотрите на книгу cspbook Хоара. Он там лучше и доступнее меня всё объясняет.
Блин, ну хаскельная программа это тоже процесс. В реальном мире нет функций.

Ctrl-C прекрасно работает и для хаскельных программ.

Ладно, предлагаю завершать.
источник

МБ

Михаил Бахтерев in Compiler Development
K R
Блин, ну хаскельная программа это тоже процесс. В реальном мире нет функций.

Ctrl-C прекрасно работает и для хаскельных программ.

Ладно, предлагаю завершать.
Есть процессы, вычисляющие функции. И Haskell позволяет закодировать только такие процессы. fold - это именно такой процесс. Который всегда ведёт себя, как функция. Соответственно, тут можно говорить о значениях.

wc -l не ведёт себя, как функция. Хотя бы по той причине, что реагирует на сигналы.
источник

KR

K R in Compiler Development
Михаил Бахтерев
Есть процессы, вычисляющие функции. И Haskell позволяет закодировать только такие процессы. fold - это именно такой процесс. Который всегда ведёт себя, как функция. Соответственно, тут можно говорить о значениях.

wc -l не ведёт себя, как функция. Хотя бы по той причине, что реагирует на сигналы.
Запустите в ghci

print $ length [1..]

Нажмите Ctrl-C, и вы увидите, как length реагирует на сигналы.
источник

KR

K R in Compiler Development
Можно без print
источник

KR

K R in Compiler Development
Но я вас понял.
источник