Имеет ли смысл головоломка продолжений инь-янь в типизированном языке?

Этот вопрос относится к "Как работает головоломка инь-янь?". Пример инь-янь продолжений в схеме выглядит так, согласно статье в Википедии:

(let* ((yin
     ((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c))))
   (yang
     ((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))

Я пытаюсь написать эквивалентный кусок кода на (edit: статически) типизированном языке, таком как SML/NJ, но он выдает мне ошибки типизации. Значит, либо головоломка не печатает, либо я неправильно понимаю синтаксис схемы. Как бы выглядел приведенный выше кусок кода в SML или Ocaml (с расширением callcc)?

Кстати, каков источник головоломки? Откуда она взялась?

Edit: Кажется, я знаю ответ. Нам нужен рекурсивный тип t, удовлетворяющий t = t -> s для некоторого типа s.

Правка правки: Нет не так, ответ - рекурсивный тип t, удовлетворяющий t = t -> t.

27
задан Community 23 May 2017 в 12:09
поделиться