Лучший способ представить варианты типов - это наследование. Например, последовательность выражений - это просто выражение. Пустой список будет представлен контейнером нулевой длины в объекте последовательности. Таким образом, возврат null приемлем в случае ошибки, которую я обозначаю знаком «?». Я не уверен, есть ли в C # на самом деле знак «?», Но он должен быть изменен.
abstract class Expression { ... }
class Atom : Expression { ... }
class Variable : Expression { ... }
class Sequence : Expression { List <Expression> ... }
Expression? unify (Expression e1, Expression e2) { ... }
РЕДАКТИРОВАТЬ: Список ковариантен. См. здесь . Мой Vala диалект C # поддерживает это (пока), но я не верю, что .net поддерживает.
Переменные, которые вы будете использовать при реализации алгоритма, возможно, вы можете назвать метапеременными. Это переменные в вашей программе, которые описывают переменную (или константу, или список и т. Д.) В какой-либо другой программе. Таким образом, вам необходимо использовать переменную, которая сообщает вам тип объекта (например, переменная, константа) и значение объекта. Вы можете сделать это через наследование, как предложил Самуэль Дэниэлсон, или через какой-то объект Variant, если ваш язык предоставляет один, или вручную свернутый вариантный класс, который может описывать любой тип переменной (например, через перечисление, описывающее тип, и разнообразие типизированных полей, из которых только одно действительное, в зависимости от типа).
В качестве кодека сжатия можно использовать bz2, и этот формат также может быть разделен.
-121--2222157- Объявление CSS : active
выполнит то, что нужно. http://www.w3schools.com/CSS/pr_pseudo_active.asp
Пример.
a:active {
color: #C00;
}
NB.
a: active
ДОЛЖЕН наступать после a: hover
в определении CSS, чтобы быть эффективным!
... " является переменной "означает проверку типа переменной. Если тип E1 является значением переменной (т.е. не из списка типов и не является постоянным значением), то сделайте что-нибудь.