Size: a a a

Compiler Development

2021 May 02

EL

Evgeny Link in Compiler Development
Ну, запись [1, 2, ... ] в математике, я бы сказал, выражает тот факт, что человек должен понять принцип. Т.е. функцию либо рекуррентную, либо зависящую от индекса. И нет тут никаких бесконечных вычислений, очень легко понимается генераторами
источник

к

кана in Compiler Development
ну вот генераторы, то да се, это уже то, что мы навешиваем, на наивную запись [1, 2...], чтобы она работала в строгом языке, вместо того что вот просто так и написать - [1, 2, ...], не думая ничего о том, что там будет в рантайме
источник

B

Brenoritvrezorkre in Compiler Development
Если мы просто напишем [1, 2, ...], то ничего не случится
источник

B

Brenoritvrezorkre in Compiler Development
Потому что не задана интерпретация ...
источник

B

Brenoritvrezorkre in Compiler Development
Так что прав линк
источник

к

кана in Compiler Development
ну в строгом языке интерпретация как раз таки задана, это сразу построить список, и поэтом уже этот построеный список будет интерпретировать потребитель

в ленивом языке она уже не задана, ее задает потребитель, и список весь не строится
источник

B

Brenoritvrezorkre in Compiler Development
Кроме того, что это всё равно может подразумевать бесконечное вычисление, так как не сказано, что функция конечно вычислима (в математике многоточие такого рода понимается так, что вычисление всех элементов последовательности будет проходить бесконечно долго, так как оно не ограничено справа). Но мы будем всё равно иметь некоторый принцип. И такой принцип будет являться способом построения нужной функции.
источник

KR

K R in Compiler Development
Вот эта наивная запись работает для буквально двух или трёх последовательностей. Натуральный ряд, четные числа, нечётные и ещё с десяток производных. Уже простые числа так не задать.
источник

B

Brenoritvrezorkre in Compiler Development
Принцип всегда должен быть. Собственно, это и есть интерпретация многоточия.
источник

KR

K R in Compiler Development
Он самоочевиден для очень небольшого количества последовательностей.
источник

B

Brenoritvrezorkre in Compiler Development
Так что вопрос ленивости не в этом состоит
источник

B

Brenoritvrezorkre in Compiler Development
А в том, как использовать способ построения. Ленивость значит computation on-demand / call-by-need
источник

B

Brenoritvrezorkre in Compiler Development
Так суть в том, что мы всегда должны иметь интерпретацию ..., иначе это, буквально и формально, просто бессмысленный набор символов. Речь не о самоочевидности, а о том, что ... должно иметь интерпретацию.
источник

a

alez in Compiler Development
Я бы добавил 3) возможность выражать безконечные структуры напрямую и 4) то, что композиция лучше работает
источник

B

Brenoritvrezorkre in Compiler Development
И в ленивых вычислениях, и в энергичных — везде мы не записываем [1, 2, ...]
источник

B

Brenoritvrezorkre in Compiler Development
Поскольку это non-well-founded как терм.
источник

B

Brenoritvrezorkre in Compiler Development
Более того, нигде в принципе нам вообще не нужно иметь всю последовательность
источник

B

Brenoritvrezorkre in Compiler Development
Нам нужна лишь функция, генерирующая последовательность, и далее мы используем её для получения тех элементов последовательности, которые нужны 🤷‍♂
источник

EL

Evgeny Link in Compiler Development
Я сейчас выпал с того, что в жаваскрипте моя функция die, кидающая ошибку, работает ровно так же, если её не заимпортить в код 😁

const foo = ....... || die()
источник

B

Brenoritvrezorkre in Compiler Development
Находимся мы в C или в Haskell
источник