LINUX.ORG.RU

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

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

Прелести динамической типизации.

Список в нормальном языке устроен примерно так:

data List a = Nil | Cons a (List a)
По русски: список — это либо пустой список (Nil), либо конструкция (Cons) состоящая из двух элементов, первый — голова списка, второй — хвост.

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

  case myMegaList of
    Nil -> шо-то одно
    Cons hd tl -> шо-то другое, использующее hd и tl
Появляются всякие симпатичные рекурсивные штуки, и вообще, не надо плодить сущностей.

Ну, то, что оно удобно, все и так понимают. Но если статических типов нет, то в Cons вторым аргументом может прилететь что попало, а не только список. Соответственно, мы либо шлём список лесом при создании, либо разрешаем иметь Cons, где «хвост» — не список, а не пойми что.

Ну а так как идеология Лиспа состоит в том, чтобы обеспечивать программиста максимальным количеством секса на рабочем месте, то обнаружение ошибок там откладывается на как можно позже. То есть, приходится точечные пары разрешать.

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

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

Прелести динамической типизации.

Список в нормальном языке устроен примерно так:

data List a = Nil | Cons a (List a)
По русски: список — это либо пустой список (Nil), либо конструкция (Cons) состоящая из двух элементов, первый — голова списка, второй — хвост.

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

case myMegaList of
  Nil -> шо-то одно
  Cons hd tl -> шо-то другое, использующее hd и tl
Появляются всякие симпатичные рекурсивные штуки, и вообще, не надо плодить сущностей.

Ну, то, что оно удобно, все и так понимают. Но если статических типов нет, то в Cons вторым аргументом может прилететь что попало, а не только список. Соответственно, мы либо шлём список лесом при создании, либо разрешаем иметь Cons, где «хвост» — не список, а не пойми что.

Ну а так как идеология Лиспа состоит в том, чтобы обеспечивать программиста максимальным количеством секса на рабочем месте, то обнаружение ошибок там откладывается на как можно позже. То есть, приходится точечные пары разрешать.

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