Почему не обещают тип данных в схеме? - PullRequest
6 голосов
/ 23 сентября 2010

Объект, возвращаемый delay в Схеме, является "обещанием", но обещания не считаются типом (поэтому нет процедуры promise?, и она не указана как тип в R5RS или R6RS).

Есть ли сильный резон, почему это так? Мне кажется вполне естественным сделать что-то вроде (if (promise? x) (force x) x), например. (И я вижу, что некоторые реализации позволят мне не выполнять обещания, а другие - нет). Кроме того, если я могу сохранить что-то в переменной и передать его, я чувствую, что должен иметь тип.

Ответы [ 2 ]

4 голосов
/ 23 сентября 2010

Я думаю, что это позволяет оптимизировать реализацию delay/force. Тот факт, что принудительное значение может быть запомнено (так что обещание действительно выполняется только один раз, а полученное значение возвращается при последующих вызовах force), стирает различие между обещанием и его результирующим значением. Если у вас есть promise?, вы не можете заменить принудительное обещание его значением везде, где это необходимо. Поэтому, в зависимости от реализации, обещание может быть неотличимо от любого другого значения Схемы.

4 голосов
/ 23 сентября 2010

Не может быть такой веской причины, поскольку схема MIT / GNU определяет функцию promise?.

...