Symbol structures are often represented using the list data structure, where an element of a list may be either a symbol, or another list. For example, (friends jim (joe mary anne)) is a list. Manipulating symbol structures often involves pattern matching, where two patterns which partially specify symbol structures are matched against each other to test for compatibility. For example (friends jim X) might be matched with the above list, where X is a variable which can match anything. AI languages should therefore support flexible list-based data structures and pattern matching.