В разделе 3.5.6 учебника Curry (pdf) рекомендуется использовать правила по умолчанию, чтобы "восстановить контроль после неудачного поиска". Следующий пример приведен. (Для ясности я добавил сигнатуру типа и каррировал ввод.)
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup’default _ _ = Nothing
Я не могу заставить это скомпилироваться, пока я не заменю ’
на '
. Как только я это сделаю, он ведет себя так:
test> test.lookup 1 [(2,3)]
*** No value found!
Вопрос 1. Для чего используется объявление по умолчанию?
Зачем вам нужно указывать, что конкретное предложение является предложением по умолчанию? Не будет ли это так или иначе достигнуто, когда другие потерпят неудачу?
Вопрос 2: Как это написано? Должно ли оно быть написано вообще?
Если вместо этого я опущу строку 'default
:
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup _ _ = Nothing
ведет себя как задумано:
test> test.lookup 1 [(2,3)]
Nothing
test>
Изменился ли синтаксис 'default
с момента написания учебника? Был ли он вообще удален?