Я пытаюсь понять раздел Haskell 2010 Report 3.17.2 "Неофициальная семантика соответствия шаблонов". Большая часть из них, относящаяся к совпадению шаблонов, преуспевающая или неудачная, кажется простой, однако мне трудно понять случай, который описывается как совпадение шаблона "расходящийся".
Я полууверен, это означает, что алгоритм соответствия не "сходится" к ответу (следовательно, функция совпадения никогда не возвращается). Но если не вернется, то как он может вернуть значение, как это предлагается в скобках "i.e. return ⊥
"? И что значит "возвращать ⊥
" в любом случае? Как обрабатывать этот результат?
Пункт 5 имеет особенно запутанную (мне) точку "Если значение ⊥
, совпадение расходится". Это просто говорит о том, что значение ⊥
дает результат соответствия ⊥
? (Отметив, что я не знаю, что означает этот результат!)
Любое освещение, возможно, с примером, будет оценено!
Добавление после нескольких длительных ответов: Спасибо Тихону и всем за ваши усилия.
Похоже, что моя путаница возникает из-за того, что существуют две разные сферы объяснения: царство особенностей и поведения Хаскелла и область математики/семантики, а в литературе Хаскелла эти два смешаны в попытке объяснить первое в терминах из последних, без достаточных указателей (для меня) относительно того, к каким элементам принадлежит.
Очевидно, что "bottom" ⊥
находится в семантическом домене и не существует как значение внутри Haskell (т.е. вы не можете ввести его, вы никогда не получите результат, который выводится как "⊥
" ).
Итак, когда объяснение говорит, что функция "возвращает ⊥
", это относится к функции, которая выполняет любое из нескольких неудобных вещей, например, не завершает, генерирует исключение или возвращает "undefined". Правильно ли это?
Кроме того, те, кто прокомментировал, что ⊥
на самом деле является значением, которое может быть передано, действительно думают о привязках к обычным функциям, которые еще не были призваны оценивать ( "так называемые" неразорвавшиеся бомбы ") и может никогда, из-за лень, правильно?