История изменений
Исправление den73, (текущая версия) :
Есть, конечно, но я понятия не имею как её вам объяснить.
А ты постарайся :)
Ну, наконец на третий день картина стала более-менее складываться. Причём не в момент, когда я сидел за компьютером, а в момент, когда я на тачке возил глину.
Начну издалека. Есть языки с бедным алфавитом идентификаторов (Си, Java, Js, Python) и с богатым (лисп, тикль, sql, файловая система). В богатых возникает нужда в quoted identifiers, поскольку алфавит идентификатора пересекается с множеством отделителей токенов языка.
В тикле, и кавычки, и {} - это лишь способы закавычивания, отличающиеся наличием или отсутствием интерполяции. И это значит, что в рамках этой модели нельзя отличить строку с пробелами от списка. Одного лишь сохранения {} недостаточно.
В том же лиспе есть литералы символа, «строки» и `квазицитаты. Символы бывают обычные и закавыченные, т.е. |foo bar|. Если делать таблицу соответствия с tcl, то получается, что {} и «» одновременно выполняют роль конструктора списка, ограничителей литерала строки, сломанной квазицитаты и ограничителей закавыченного символа. При этом обычное слово без кавычек может быть символом, строкой или числом. А определение того, чем является данный токен, происходит только в момент использования. Офигеть!
Исправление den73, :
Есть, конечно, но я понятия не имею как её вам объяснить.
А ты постарайся :)
Ну, наконец на третий день картина стала более-менее складываться.
Начну издалека. Есть языки с бедным алфавитом идентификаторов (Си, Java, Js, Python) и с богатым (лисп, тикль, sql, файловая система). В богатых возникает нужда в quoted identifiers, поскольку алфавит идентификатора пересекается с множеством отделителей токенов языка.
В тикле, и кавычки, и {} - это лишь способы закавычивания, отличающиеся наличием или отсутствием интерполяции. И это значит, что в рамках этой модели нельзя отличить строку с пробелами от списка. Одного лишь сохранения {} недостаточно.
В том же лиспе есть литералы символа, «строки» и `квазицитаты. Символы бывают обычные и закавыченные, т.е. |foo bar|. Если делать таблицу соответствия с tcl, то получается, что {} и «» одновременно выполняют роль конструктора списка, ограничителей литерала строки, сломанной квазицитаты и ограничителей закавыченного символа. При этом обычное слово без кавычек может быть символом, строкой или числом. А определение того, чем является данный токен, происходит только в момент использования. Офигеть!
Исходная версия den73, :
Есть, конечно, но я понятия не имею как её вам объяснить.
А ты постарайся :)
Ну, наконец на третий день картина стала более-менее складываться. И кавычки, и {} - это лишь способы закавычивания, отличающиеся наличием или отсутствием интерполяции. И это значит, что в рамках этой модели нельзя отличить строку с пробелами от списка. Одного лишь сохранения {} недостаточно.
Т.е. в том же лиспе есть символы, строки и квазицитаты. Символы бывают обычные и закавыченные, т.е. |foo bar|. В Си и JS такого вообще нет, зато такое есть в SQL и в файловой системе. Есть языки с бедным алфавитом идентификаторов (Си, Java, Js, Python) и с богатым (лисп, тикль, sql, файловая система). В богатых возникает нужда в quoted identifiers, поскольку алфавит идентификатора пересекается с множеством отделителей токенов языка. Если делать таблицу соответствия с tcl, то получается, что {} и «» одновременно выполняют роль конструктора списка, ограничителей литерала строки, сломанной квазицитаты и ограничителей закавыченного символа. При этом обычное слово без кавычек может быть символом, строкой или числом. А определение того, чем является данный токен, происходит только в момент использования. Офигеть!