/** * Copyright (c): Uwe Schmidt, FH Wedel * * You may study, modify and distribute this source code * FOR NON-COMMERCIAL PURPOSES ONLY. * This copyright message has to remain unchanged. * * Note that this document is provided 'as is', * WITHOUT WARRANTY of any kind either expressed or implied. */ /** * eine Klasse fuer Paare * * hier sind nur die absolut notwendigen * Basisoperationen realisiert * * Listen werden mit Hilfe von Paaren realisiert */ //-------------------- class Pair extends SExpr { protected final SExpr left,right; //-------------------- public Pair(SExpr left) { this.left = left; this.right = nil; } public Pair(SExpr left, SExpr right) { this.left = left; this.right = right; } //-------------------- public SExpr car() { return left; } public SExpr cdr() { return right; } //-------------------- public SExpr isPair() { return t; } // nil ist eine Liste // Paare mit nil als // rechtestem Knoten sind Listen public SExpr isList() { return right.isList(); } //-------------------- public SExpr isEqual(SExpr e2) { if ( this == e2 ) return t; if ( ! ( e2 instanceof Pair ) ) return nil; { Pair l2 = (Pair)e2; if ( left.isEqual(l2.left) == t && right.isEqual(l2.right) == t ) return t; } return nil; } //-------------------- // eine sehr einfache Ausgabe // in dotted pair Format: ( a . b ) public String toString() { return "( " + left.toString() + " . " + right.toString() + " )"; } }