func (list *Pair) Adjoin(elements ...interface{}) *Pair {
	for _, element := range elements {
		if list.Member(element) == nil {
			list = &Pair{Car: element, Cdr: list}
		}
	}
	return list
}
Adjoin adds the elements not already in the list parameter to the result list. The result
shares a common tail with the list parameter. The new elements are added to the front of
the list, but no guarantees are made about their order. Elements are compared using ==.

The list parameter is always a suffix of the result -- even if the list parameter contains
repeated elements, these are not reduced.

Adjoin(List("a", "b", "c", "d", "c", "e"), "a", "e", "i", "o", "u")
=> ("u" "o" "i" "a" "b" "c" "d" "c" "e")
package list
func lset2le(list1, list2 *Pair) bool {
	return list1.Every(func(x interface{}) bool {
		return list2.Member(x) != nil
	})
}
func SetLessThanEqual(lists ...*Pair) bool {
	if len(lists) < 2 {
		return true
	}
	for index, s1 := range lists[:len(lists)-1] {
		s2 := lists[index+1]
		if s1 != s2 && !lset2le(s1, s2) {
			return false
		}
	}
	return true
}
func SetEqual(lists ...*Pair) bool {
	if len(lists) < 2 {
		return true
	}
	for index, s1 := range lists[:len(lists)-1] {
		s2 := lists[index+1]
		if s1 != s2 && !(lset2le(s1, s2) && lset2le(s2, s1)) {
			return false
		}
	}
	return true
}