Действительно, k4, самая последняя реализация k с помощью kx не поддерживает замыкания . Фактически, в статье, на которую вы ссылаетесь, упоминается, что в разделе «Изменения в языке»:
K4 / q - это изменение по сравнению с K3 по ряду важных способов, таких как:
...
- Вложенные функции в K4 и q не могут ссылаться на локальные переменные окружающей функции . (Часто недостаток этой способности можно обойти, используя проекцию функции.)
Оказывается, что нехватка поддержки лексической области видимости не всегда имела место. Хотя в настоящее время единственным официально документированным языком является q, все еще можно найти справочное руководство для k2, например, реализацию k около 1998 года: http://www.nsl.com/k/k2/k295/kreflite.pdf. Раздел «Локальные функции» на стр. 158 гласит:
Локальные функции
Предположим, что функция g определена в теле другой функции f и использует переменную x в своем определении, где x является локальным для f. Тогда x является константой в g, а не переменной, и ее значение является текущим, когда g определена. Например, если:
f:{b:3; g:{b}; b:4; g[]}
Значение f - это значение локальной функции g, которая оказывается равной 3, значением b, когда g определено, а не последующим значением 4.
f[]
3
(кстати, я настоятельно рекомендую прочитать весь документ).
Не знаю, почему была прекращена поддержка замыканий, но Я думаю это было связано с производительностью, особенно во время межпроцессного взаимодействия.