В чем разница между кодой и данными?

Здесь есть какое-то объяснение. Интуитивно я понимаю, как конечные структуры данных отличаются от бесконечных структур данных, таких как потоки. Тем не менее, интересно увидеть другие объяснения различий, характеристик, типов кодов.

Я наткнулся на термин кодата при чтении о потоках.

1 ответ

Этот ответ не очень точен, но я все равно его опубликую.


Настоящее различие...

... находится между данными и вычислениями.

Данные

Основное свойство данных заключается в том, что они имеют структуру. Данные могут быть переданы в качестве входных данных и возвращены в качестве выходных данных с помощью вычислений. Структура данных может быть использована вычислениями. Однако сами по себе данные ничего не делают. Данные просто есть.

Примерами типов данных являются логические значения, числа, строки, алгебраические типы данных (теговые объединения) и т. Д. Соответственно, примеры значений false, 2, "pyon", SOME 2, Для вычислений имеет смысл работать со значениями: например, вычисления могут переходить в зависимости от того, является ли число четным или нечетным. Однако не имеет смысла спрашивать, что могут делать значения: число 2 ничего не может сделать, оно просто есть.

Расчеты

Основное свойство вычислений заключается в том, что они имеют поведение. Другими словами, вычисления делают. Однако вычисления "слишком активны", чтобы их можно было передавать или хранить в переменных. Например, вы не можете хранить в переменной сам акт печати "Hello, world!" на экран.

Вы можете возразить, что можете сохранить ссылку на функцию в переменной. Но ссылка на функцию - это не то же самое, что поведение функции при ее выполнении! Первое - это данные, второе - это вычисления.


Вернуться к кодам...

Что именно представляет собой кодата? Прежде чем дать правильное определение, я приведу пример:

Потоки кодовые

Что именно является потоком? Поток является ссылкой1 на вычисление, которое при выполнении производит либо:

  • Первый элемент ("голова") последовательности вместе с другим потоком ("хвостом"), который логически является остатком последовательности. Или же...

  • Специальный символ ("ноль"), обозначающий конец последовательности.

Потоки (и, в более общем смысле, кодаты) являются данными, потому что они являются ссылками на вычисления, а не на сами вычисления. Однако то, что делает потоки (и, в более общем смысле, кодаты) особенными, заключается в том, что при выполнении базовых вычислений они могут создавать другие потоки (и, в более общем случае, кодаты).

Теперь я наконец могу дать правильное определение:

Кодата - это ссылка на вычисление, которое при выполнении может производить (помимо прочего) больше кодатов.


1 Правильный технический термин - "thunk", а не "reference".

Другие вопросы по тегам