Это потому, что дизайнеры Haskell ошиблись! Я никогда не видел учебник по математике, в котором упоминается порядок логических значений. Просто потому, что они могут быть, это не значит, что следует. Некоторые из нас используют Haskell именно потому, что во многих случаях он запрещает / защищает нас от смущающих / бессмысленных вещей, но не в этом.
instance Ord Bool
заставляет a => b
означать то, что вы ожидаете, что a <= b
будет означать!
Более ранние аргументы в пользу instance Ord Bool
, где вы можете сделать больше типов неявно сопоставимыми. Продолжая эту линию аргументации, некоторые, возможно, захотят сделать все типы сопоставимыми неявно и даже иметь слабую динамическую типизацию и вообще пропустить классы типов. Но мы хотим, чтобы строгая типизация в точности запрещала то, что явно не правильно, и instance Ord Bool
побеждает эту цель.
Что касается аргумента, что Bool является ограниченной решеткой. В отличие от boolean: = {True, False}, в Haskell мы имеем Bool: = {True, False, bottom} больше не является ограниченной решеткой, поскольку ни True, ни False не являются элементами идентичности в представлении bottom. Это связано с обсуждением комментариев & amp; & amp; против мин и т. д.
Нет ничего удивительного в том, что вы используете алгоритм O (N), где простой хеш-таблицей будет O (1). В хэш-таблице для каждого значения атрибута будет храниться соответствующий атрибут.
Я заметил, что вы не использовали слово объединение где-либо в своем сообщении. Так обычно называется алгоритм, который вы пытаетесь реализовать. Прочтите статью Википедии ; внизу есть несколько ссылок… в том числе одна из 70-х, когда имели значение пробелы и циклы.
eduffy has it: this is called unification. Prolog is a programming language designed to do exactly what you're trying to do, in the general case, and it uses unification to do its dirty work.
However, anyone who's tried to implement arithmetic using Peano axioms in Prolog can tell you it doesn't always get there the fastest way possible. There are "constraint programming" languages that do roughly the same thing but with an emphasis on providing heuristics to help the solver find optimal solutions as quickly as possible. One of them is Comet.