В "Сборник задач и упражнений по Хаскелю"
Oct. 19th, 2011 11:19 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вернёт ли вызов f "False" что-нибудь и, если вернёт, то что?
PS. Под замком - чтобы студенты не видели, потом сниму.
UPD. Вынес из-под замка.
f (~ t : ~ r : ~ u : ~ "e") = (:) r $ (:) u [u]
PS. Под замком - чтобы студенты не видели, потом сниму.
UPD. Вынес из-под замка.
no subject
Date: 2011-10-19 07:39 pm (UTC)no subject
Date: 2011-10-19 07:48 pm (UTC)no subject
Date: 2011-10-20 07:29 pm (UTC)А вообще ответ ясен даже без знания семантики тильд. Я специально проверил.
no subject
Date: 2011-10-20 07:52 pm (UTC)Вызов
возвращает то, что хотелось бы. Без ленивого образца результат был бы "менее определен" без особых на то оснований.
no subject
Date: 2011-10-20 08:01 pm (UTC)Честно говоря, я не очень понимаю, почему в ленивом языке вообще может произойти такая фигня, как
(ну PM против undefined. кто вообще придумал синтетическое правило, что он должен произойти со всеми аргументами?),
и зачем для её разрешения была введена ещё более синтетическая конструкция.
no subject
Date: 2011-10-20 08:04 pm (UTC)Но при сравнении с (,) ведь других вариантов нет, это единственный конструктор данных для этого типа.
no subject
Date: 2011-10-20 08:11 pm (UTC)no subject
Date: 2011-10-20 08:21 pm (UTC)no subject
Date: 2011-10-20 08:29 pm (UTC)no subject
Date: 2011-10-20 08:06 pm (UTC)Потому что PM энергично разбирает thunk, проверяя какой там конструктор данных использован; иначе невозможно было бы выбрать, что сработает: