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

Вот вам небольшая задача на Пайтоне, для того, чтобы понять как у вас с функциональным программированием. Выполнить надо в уме (я смог, значит это возможно). Что вернёт следующее выражение:

(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)
Поделиться
Отправить
16 комментариев
Artemy Tregubenko (arty.name)

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

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

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

Евгений Степанищев (bolknote.ru)

Комментарий для 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>

Artemy Tregubenko (arty.name)

Комментарий для Евгения Степанищева:

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

desh

Комментарий для Евгения Степанищева:

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

deadem

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

Евгений Степанищев (bolknote.ru)

Комментарий для deadem:

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

chun lu

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

Евгений Степанищев (bolknote.ru)

Комментарий для chun lu:

самая сложная часть — понять, в какой последовательности идёт запуск функций

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

kean (kean.livejournal.com)

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

http://blog.denyamsk.ru

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

http://twitter.com/nwalkr

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

Евгений Степанищев (bolknote.ru)

Комментарий для http://twitter.com/nwalkr:

Не за что :)

indeec17

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

Евгений Степанищев (bolknote.ru)

Комментарий для indeec17:

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

Андрей

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru)

Комментарий для Андрей:

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

Популярное