func NewPair(car, cdr interface{}) *Pair {
	return &Pair{Car: car, Cdr: cdr}
}
NewPair returns &Pair{Car: car, Cdr: cdr}
package list
import (
	"bytes"
	"fmt"
)
type Pair struct {
	Car, Cdr interface{}
}
func Nil() *Pair {
	return nil
}
func (list *Pair) String() string {
	if list == nil {
		return "()"
	}
	var buf bytes.Buffer
	fmt.Fprint(&buf, "(", list.Car)
	for {
		nextPair, ok := list.Cdr.(*Pair)
		if !ok {
			fmt.Fprint(&buf, " . ", list.Cdr)
			break
		}
		if nextPair == nil {
			break
		}
		fmt.Fprint(&buf, " ", nextPair.Car)
		list = nextPair
	}
	fmt.Fprint(&buf, ")")
	return buf.String()
}