deniok: (typed lambda)
deniok ([personal profile] deniok) wrote2010-09-21 10:45 pm
Entry tags:

Задачка

Хорошая задачка из Herman Geuvers, Introduction to Type Theory (упражнение 3.17):

Построить лямбда-терм с типом ((α → β) → α) → (α → α → β) → β.

Ответы скринить не буду.

UPD: Имеется в виду просто типизированная лямбда. То есть fix и прочие Y-комбинаторы нам недоступны.

UPD2: Рекурсия ни в каком виде недоступна!

[identity profile] kodt-rsdn.livejournal.com 2010-09-26 07:22 pm (UTC)(link)
Конечно, имеет.
Просто позабавило. Допустим, мы руками напишем инстанцию класса
instance Num (a->a)->(a->a) where
  0 = \f -> id
  m + n = \f -> m f . n f
  m * n = \f -> m (n f)
  m - n = ?????
  .....

И как компилятор сможет родить нумерал из 123 ?

[identity profile] migmit.livejournal.com 2010-09-26 07:47 pm (UTC)(link)
При помощи функции fromInteger из того же класса Num. А что?

[identity profile] kodt-rsdn.livejournal.com 2010-09-26 08:00 pm (UTC)(link)
А, точно. Слона-то я и не приметил.