LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

На мой взгляд, всё же, списки существуют. Список - это то, что синтаксически является списком (например, не «{») и то, что было задумано программистом как список.

Засада состоит в том, что грань между списком и просто строкой отсутствует (и более того, религиозно отсутствие такой грани постулируется), а многие операции над строками похожи на операции над списками, которые эти строги могут представлять, но не являются таковыми. Очень легко написать: «a $b c», ожидая получить на выходе список. Это часто будет так, но вообще говоря, никакой список тут не гарантирован. Это особенно плохо потому, что это очень похоже на то, что происходит при вызове функций - там строится действительно список аргументов, и чтобы передать в функцию три аргумента, нужно написать именно «команда a $b c». Насколько я понимаю, подобная проблема часто встречается в коде на тикле, в т.ч., в различных библиотеках.

Кроме того, {} выглядят как формат для вложенных списков, позволяющий представлять деревья, но таковым не является, ввиду отсутствия понятия «атом», и ввиду того, что фигурные скобки - это просто буквы, интерпретация которых зависит от конкретной команды.

Из-за того, что некоторые команды воспринимают их как специальные символы, а некоторые - нет, поведение {} сложно, они ни в коем случае не столь же надёжны, как () в лиспе. Причём аналога лисповых () в тикле просто-напросто нет, как нет и механизма сериализации/десериализации через print/read. Казалось бы, если строки столь фундаментальны, то должно существовать нечто аналогичное паре print/read, но это либо не так, либо не столь явно (надо подумать, в чём именно тут проблема).

Официальный ответ на эту проблему состоит в том, что нужно применить тот или иной workaround. Т.е., tcl как язык содержит строки - и это хорошо. Но он не содержит деревьев, которые есть в JS, не говоря уже о лиспе. И это плохо. Их легко сделать, но это совсем не то же самое, что наличие деревьев в языке.

Исправление den73, :

На мой взгляд, всё же, списки существуют. Список - это то, что синтаксически является списком (например, не «{») и то, что было задумано программистом как список.

Засада состоит в том, что грань между списком и просто строкой отсутствует (и более того, религиозно отсутствие такой грани постулируется), а многие операции над строками похожи на операции над списками, которые эти строги могут представлять, но не являются таковыми. Очень легко написать: «a $b c», ожидая получить на выходе список. Это часто будет так, но вообще говоря, никакой список тут не гарантирован. Это особенно плохо потому, что это очень похоже на то, что происходит при вызове функций - там строится действительно список аргументов, и чтобы передать в функцию три аргумента, нужно написать именно «команда a $b c». Насколько я понимаю, подобная проблема часто встречается в коде на тикле, в т.ч., в различных библиотеках.

Кроме того, {} выглядят как формат для вложенных списков, позволяющий представлять деревья, но таковым не является, ввиду неотличимости списка от атома.

Официальный ответ на эту проблему состоит в том, что нужно применить тот или иной workaround. Т.е., tcl как язык содержит строки - и это хорошо. Но он не содержит деревьев, которые есть в JS, не говоря уже о лиспе. И это плохо. Их легко сделать, но это совсем не то же самое, что наличие деревьев в языке.

Исходная версия den73, :

На мой взгляд, всё же, списки существуют. Список - это то, что синтаксически является списком (например, не «{») и то, что было задумано программистом как список.

Засада состоит в том, что грань между списком и просто строкой отсутствует (и более того, религиозно постулируется), а многие операции над строками похожи на операции над списками, которые эти строги могут представлять, но не являются таковыми. Очень легко написать: «a $b c», ожидая получить на выходе список. Это часто будет так, но вообще говоря, никакой список тут не гарантирован. Это особенно плохо потому, что это очень похоже на то, что происходит при вызове функций - там строится действительно список аргументов, и чтобы передать в функцию три аргумента, нужно написать именно «команда a $b c». Насколько я понимаю, подобная проблема часто встречается в коде на тикле, в т.ч., в различных библиотеках.

Кроме того, {} выглядят как формат для вложенных списков, позволяющий представлять деревья, но таковым не является, ввиду неотличимости списка от атома.

Официальный ответ на эту проблему состоит в том, что нужно применить тот или иной workaround. Т.е., tcl как язык содержит строки - и это хорошо. Но он не содержит деревьев, которые есть в JS, не говоря уже о лиспе. И это плохо. Их легко сделать, но это совсем не то же самое, что наличие деревьев в языке.