/*------------------------------------------------------------------- * Interface.c Alair Pereira do Lago 17/09/96 *------------------------------------------------------------------- */ #include <stdio.h> #include <math.h> #include "Interface.h" YYSTYPE InterfaceZero = Zero; YYSTYPE InterfaceOne = One; YYSTYPE InterfaceNextNil = Nil; YYSTYPE InterfaceMultiply(YYSTYPE x,YYSTYPE y) { return Multiply(x,y); } YYSTYPE InterfacePower(YYSTYPE x, int n) { YYSTYPE power; switch (n) { case 0: return One; case 1: return x; case 2: return Multiply(x, x); case 3: return Multiply(Multiply(x, x), x); case 4: power = Multiply(x, x); return Multiply(power, power); default: power = x; while (--n) { while (n % 2 == 0) { x = Multiply(x, x); n = n/2; } power = Multiply(x, power); } return power; } } YYSTYPE InterfaceIdempotent(YYSTYPE x) { YYSTYPE power = x; while ((Multiply(power, power)) != power) power = Multiply(power, x); return power; } YYSTYPE InterfaceElement(char *word) { return InterfaceNextNil; } void InterfacePrintElement(YYSTYPE x) { printf("%d", x); } YYSTYPE InterfaceFirstElement = 0; YYSTYPE InterfaceNextElement(YYSTYPE x) { return ++x < N ? x : Nil; } YYSTYPE InterfaceFirstIdempotent = 0; YYSTYPE InterfaceNextIdempotent(YYSTYPE x) { do { x++; } while (x < N && (Multiply(x, x) != x) ); return x < N ? x : Nil; }