Alexander Kuklev (akuklev) wrote,
Alexander Kuklev
akuklev

Милая задачка на сон грядущий.

Задачка про кодирование чисел и пар лямбда-выражениями определённым красивым способом.
Ноль кодируется как тождественная функция, т.е. [x|x], остальные числа получаются из нуля последовательным применением лямбда-выражения succ:
0 = [x|x], 1 = succ [x|x], 2 = succ (succ [x|x]), ...

Кортежи кодируются лямба-выражениями, принимающими число и возвращающими соответствующий элемент кортежа.
[a] 0 = a
[a, b] 0 = a, [a, b] 1 = b
[a, b, c] 0 = a, [a, b, c] 1 = b, [a, b, c] 2 = c
...

Для формирования кортежа можно применять лямбда-выражение tuple, принимающее сперва длину n кортежа, а затем n элементов кортежа:
[a] = tuple 1 a
[a, b] = tuple 2 a b
...

Лямбда-выражение length вычисляет длину кортежа:
length [a] = 1
length [a, b] = 2
...

Лямбда-выражение append соединяет кортежи. Придумайте красивую реализацию совместимых между собой выражений succ, tuple, length и append. У меня есть одно решение, но кажется можно красивее.
Subscribe

  • Прогресс

    Десять дней назад, вторая ступень SpaceX'овского корабля Starship своим ходом слетала своим ходом на десять километров вверх, и усмепшно приземлилась…

  • О водосбережении

    Как известно, питьевая вода во многих странах дефицитный ресурс. И даже в дождливой Германии летом иногда случаются засухи, в результате которых она…

  • 36

    Традиционный деньрожденный пост. Год выдался необычный. :)

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments