Небольшая задача на Пайтоне
Вот вам небольшая задача на Пайтоне, для того, чтобы понять как у вас с функциональным программированием. Выполнить надо в уме (я смог, значит это возможно). Что вернёт следующее выражение:
(lambda x:x(x))(lambda z: lambda y:z)(1)(2)(3)
Добавлено позднее: если кому-то проще JavaScript, вот тот же код на JavaScript 1.8:
(function (x) x(x))(function (z) function (y) z)(1)(2)(3)
то же самое на яваскрипте, для тех, кто больше привык к нему, как я:
(function(x) {
return x(x)
})(function(z){
return function(y) {
return z;
}
})(1)(2)(3)
я вначале решил, что это нечто вроде y combinator, но потом оказалось просто
Комментарий для arty.name:
Лучше уж на JavaScript 1.8, ближе к оригиналу:
<script type=«application/javascript;version=1.8»>
alert(x) x(x(function (z) function (y) z)(1)(2)(3))
</script>
Комментарий для Евгения Степанищева:
я как раз хотел ближе к привычному коду, который я понимаю ; )
с питоновскими лямбдами я не справился, а когда переписал в знакомом виде, всё получилось
Комментарий для Евгения Степанищева:
сбалансируй скобки :(
в описании опечатка:
function (x) x(x))(
должно быть
(function (x) x(x))(
Комментарий для deadem:
Точно, сейчас поправлю.
вот это загиб. признаюсь честно, немного подумав, сдался, запустил код. но это не помогло нисколько)))
в принципе, самая сложная часть--понять, в какой последовательности идёт запуск функций
Комментарий для chun lu:
Понять легко, мне было сложно сначала удержать в памяти несколько объектов, потом справился :)
Запустил. Не понял.
Взял блокнот и ручку :-)
Легко решилось, когда возвращаемые функции я обозначил в уме как f1, f2… а потом уже при вызовах разворачивал обратно :)
А так — путаешься.
отличная задачка, получил удовольствиt от решения, спасибо. :)
Комментарий для http://twitter.com/nwalkr:
Не за что :)
оптимизировал и переписал то же самое на php:
echo 2;
Комментарий для indeec17:
На PHP сейчас тоже есть полноценные анонимные функции, так что «переписал» не считается, но оптимизировано хорошо :)
Комментарий для Евгения Степанищева:
а можно подробное решение? так и не разобрался)
Комментарий для Андрей:
Надо будет отдельной заметкой написать.