В подмножестве Prolog без обратной проверки, которое можно рассматривать как явно установленный один раз нетерпеливый чистый функциональный язык, вы можете легко создавать списки с двойной связью.Именно ссылочная прозрачность делает это затруднительным в Haskell, поскольку он запрещает явной установке Пролога с именем , явно еще не заданных логических переменных, и вместо этого заставляет Haskell достигать того же самогоэффект искривленным способом «завязывания узла».Я думаю.
Кроме того, на самом деле нет большой разницы между защищенной рекурсией Haskell при ленивой оценке и открытыми списками Пролога, построенными в хвостовой рекурсии по модулю cons .ИМО.Вот, например, пример ленивых списков в Прологе .Записанное общее хранилище используется в качестве универсального посредника доступа, поэтому результаты предыдущих вычислений можно упорядочить для кэширования.
Если подумать, вы можете использовать C ограничительным образом в качестве чисто функционального языка, если вы никогда не сбрасываете ни переменную, ни указатель, как только он установлен.У вас все еще есть нулевые указатели, точно так же, как в Прологе есть переменные, так что это тоже явно установленный один раз .И, конечно, вы можете создавать двусвязные списки с ним.
Таким образом, остается только один вопрос: допускаете ли вы такие однократные языки как pure ?