Небольшая задача на Пайтоне

Вот вам небольшая задача на Пайтоне, для того, чтобы понять как у вас с функциональным программированием. Выполнить надо в уме (я смог, значит это возможно). Что вернёт следующее выражение:
(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)
27 января 2011 15:27

Artemy Tregubenko (arty.name)
27 января 2011, 15:49

то же самое на яваскрипте, для тех, кто больше привык к нему, как я:

    (function(x) {
        return x(x)
    })(function(z){
        return function(y) {
            return z;
        }
    })(1)(2)(3)

я вначале решил, что это нечто вроде y combinator, но потом оказалось просто

bolk (bolknote.ru)
27 января 2011, 16:00, ответ предназначен Artemy Tregubenko (arty.name):

Лучше уж на JavaScript 1.8, ближе к оригиналу:

<script type="application/javascript;version=1.8">
alert((function (x) x(x))(function (z) function (y) z)(1)(2)(3))
</script>

Artemy Tregubenko (arty.name)
27 января 2011, 16:39, ответ предназначен bolk (bolknote.ru):

я как раз хотел ближе к привычному коду, который я понимаю ; )
с питоновскими лямбдами я не справился, а когда переписал в знакомом виде, всё получилось

desh (инкогнито)
27 января 2011, 16:43, ответ предназначен bolk (bolknote.ru):

сбалансируй скобки :(

deadem (инкогнито)
27 января 2011, 16:52

в описании опечатка:
function (x) x(x))(
должно быть
(function (x) x(x))(

bolk (bolknote.ru)
27 января 2011, 17:00, ответ предназначен deadem

Точно, сейчас поправлю.

chun lu (инкогнито)
27 января 2011, 21:09

вот это загиб. признаюсь честно, немного подумав, сдался, запустил код. но это не помогло нисколько)))
в принципе, самая сложная часть--понять, в какой последовательности идёт запуск функций

bolk (bolknote.ru)
27 января 2011, 21:26, ответ предназначен chun lu

самая сложная часть — понять, в какой последовательности идёт запуск функций
Понять легко, мне было сложно сначала удержать в памяти несколько объектов, потом справился :)

kean (kean.livejournal.com)
27 января 2011, 23:03

Запустил. Не понял.
Взял блокнот и ручку :-)

http://blog.denyamsk.ru (инкогнито)
28 января 2011, 00:29

Легко решилось, когда возвращаемые функции я обозначил в уме как f1, f2… а потом уже при вызовах разворачивал обратно :)
А так — путаешься.

http://twitter.com/nwalkr (инкогнито)
28 января 2011, 18:58

отличная задачка, получил удовольствиt от решения, спасибо. :)
 

bolk (bolknote.ru)
29 января 2011, 01:04, ответ предназначен http://twitter.com/nwalkr

Не за что :)

indeec17 (инкогнито)
29 января 2011, 14:06

оптимизировал и переписал то же самое на php:
echo 2;

bolk (bolknote.ru)
29 января 2011, 20:35, ответ предназначен indeec17

На PHP сейчас тоже есть полноценные анонимные функции, так что «переписал» не считается, но оптимизировано хорошо :)

Андрей (инкогнито)
19 февраля 2014, 15:57, ответ предназначен bolk (bolknote.ru):

а можно подробное решение? так и не разобрался)

Евгений Степанищев (bolknote.ru)
20 февраля 2014, 07:16, ответ предназначен Андрею

Надо будет отдельной заметкой написать.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)