LINUX.ORG.RU

Реализация функции apply

 ,


0

2

В лиспе ф-ция apply принимает на вход один аргумент — список для подстановки аргументов ф-ции. В js — 2 — объект в контексте которого применяется функция (т.е значения для подстановки свободных переменных в теле функции с this) и непосредственно список для подстановки аргументов, как и в лиспе. В лиспе, этот первый аргумент подставляется неявно, в виде лексического скопа. Таким образом, в JS мы имеем гораздо более мощную модель, включающую first-class environments. Интересно, почему в лиспе этого нет?

Ответ на: комментарий от monk

В общем случае да, но в picolisp окружение (как и почти всё остальное) представлено обычным списком, который можно сериализировать без ограничений.

Закольцованные списки разруливаются языком. При сериализации более сложных структур, возможно, придется повозится.

anonymous
()
Ответ на: комментарий от anonymous

Закольцованные списки разруливаются языком.

В смысле #1#= и т.д? А если таких ссылок будет пару тысяч принтер и ридер не загнутся?

При сериализации более сложных структур, возможно, придется повозится

picolisp... структур нет, массивов нет, продолжений нет. Замыкание он как сериализует? Как список окружения + список-тело функции?

monk ★★★★★
()
Ответ на: комментарий от monk

picolisp... структур нет, массивов нет, продолжений нет.

Ну да. Там много чего нет. Цель была не взять в язык всё, что хочется, а оставить то, без чего нельзя.

Поэтому сложные структуры по-старинке собираются из списков или cons-ов. Для простых достаточно свойств (properties) символов.

Массивы заменяются списками, деревьями или файлами.

Вместо продолжений используются coroutine.

Замыкание при наличии first-class окружений, не очень и нужны. Правда, аналогичная функциональность имеется - job

Замыкание он как сериализует? Как список окружения + список-тело функции?

Вполне рабочий вариант, особенно, если посылать на другой сервер. Но обычно достаточно окружения.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.