нужна строгая, но когда именно ленивая рулит?
для написания коданных. я пока не понял, что это означает на самом деле, но нутром чую, что это логика программы. структуры данных должны быть строгие, а логика ленивая.
А в чем разница в случае кода или данных если в ФП все это функция то есть код, констант по определению нет и в случае данных это функция вычисляющая значение и ленивое вычисление дает возможность определить бесконечный список и не поймать себя в бесконечный цикл, так как данные определены будут при использовании, а до того это черный ящик, форма определена, подробности потом определятся, если нужно будет. Так что структуры точно ленивые
константы по определению есть. данные не являются функциями однозначно. а вот функции являются значениями в ФП, но не являются простыми данными
Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния (в отличие от императивного, где одной из базовых концепций является переменная, хранящая своё значение и позволяющая менять его по мере выполнения алгоритма). То есть все в Хаскеле можно рассметривать как функцию и не погрешить против истины. Ну если не опускаться на уровень бинарного кода
категорически не согласен с вашим видением. данные можно рассматривать как константные функции, но в этом нет пользы.
Структуры ленивые, но они всё-таки находятся в памяти в определённом месте, и не всегда в виде задумок
Это не мое видение, это точка зрения со стороны ФП. Другое дело, что ЯП не являются стопроцентно чистыми ФП и приходится идти на копромис, но рассматривать константы не как функцию имет смысл разве с точки зрения оптимизации. Но на этапе проектирования имеет смысл смотреть как раз от ФП
почему вы думаете, что это точка зрения со стороны ФП? я уверен в обратном, основываясь на собственном опыте
Вопрос, когда они появляются в памяти?
между данными и функциями есть существенная разница. данные можно вводить и выводить, функции нельзя
1. первый раз о таком слышу, никто кроме вас такого не говорит 2. не вижу в этом пользы
Ок, я в данном случае могу пукиведию процитировать только, ибо я не гуру в ФП Функциона́льное программи́рование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). Соответственно ф ФП нет ни констант ни переменных в идеале, всякие константы это уже отход от ФП
слово "соотвественно" предполагает какую-то логическую связку, а я не вижу её
ВП не АИ, я вам проще скажу: ФП — это когда функции являются значениями
а точнее, ваша логическая ошибка в том, что из наличия функций не следует отсутствие нефункций
чтобы понять это определение, почитайте, что такое лямбда-исчисление и как оно прикладывается к реальности
Вообще, чистые функции ~ данные. В этом есть смысл, если углубляться в пучину теоретизирования. Но на пальцах, если абстрагироваться от процесса вычисления и смотреть только на результат, если нет побочных эффектов, то получен результат вычислением или из таблицы -- не только не важно, но и не заглядывая "внутрь" никак не обнаружить разницу.
Даже АиФ больше АИ чем ВП
Но к практике ФП это всё имеет очень опосредованное отношение
а вот это чистая ошибка: чистые функции совершенно точно не данные
а что в математике константы не константы тогда? функции тоже?
~ символизирует изоморфизм
там плохой изоморфизм
Я даже больше скажу, все что у вас есть это имя, а что за именем стоит транслятор узнает вычисляя это имя. И с точки зрения ФП это функция.
ну и что? есть изофорфизм между ФП и ИП такой же
вполне хороший. для большинства практических функций даже бесконечного объёма памяти не нужно
транслятор может не стоять. И с точки зрения ФП это функция. — нет, конечно
Можете привести цитату подтверждающую?
что именно? это вы выдвигаете странный тезис, вы и приводите доказательства
Это не странный тезис. Я не гуру, потому процитировал википедию, считаете что имеете более доверенный источни, то приведите
https://ru.wikipedia.org/wiki/Лямбда-исчисление
вы процитировали правильно, но выводы сделали нелогичные
А в чем разница между функцией и данными тогда?
данные можно вводить и выводить
функцию тоже можно вводить и выводить
да кек, интерпретаторы на этом работают
f z = \x y -> x + y + z Вроде как это даст функцию выводящую другую функцию а пример ввода - map
нет, не на этом. интерпретатор выводит обычные данные. а вводит код — представленные данными алгоритмы. код интерпретируется в функцию или в ошибку
это не вывод, а вычисление. вам нужен будет ещё терминал с поддержкой вывода функций
транслятор выводит именно что код, компайлер например, это никак не данные а именно что функция
вычисление будет когда вы используете возвращенную функцию
код не является функцией
а вот насчет терминала это ж в хаскеле нечистая функция нарушение ФП и потому в монаду завернуто для контроля
можно легко представить и чистой функцией, монада только обратную связь добавляет, с грязнотой монада не связана
по определению функции и по тезису Чёрча—Тьюринга
Какое определение функции имеете ввиду и какой именно тезис?
https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%B7%D0%B8%D1%81_%D0%A7%D1%91%D1%80%D1%87%D0%B0_%E2%80%94_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0
Обсуждают сегодня