home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / PIE.ARC / PIE.OUT < prev    next >
Encoding:
Text File  |  1988-06-21  |  3.0 KB  |  92 lines

  1. /*****************************************************************************
  2.             Prolog Inference Engine
  3.             =======================
  4.  
  5.    Copyright (c) 1986, 88 by Borland International, Inc
  6.  
  7.    Module PIE.OUT: The term writer
  8. *****************************************************************************/
  9.  
  10. PREDICATES
  11.   wterm(DISPLAY,TERM)
  12.   wterm(DISPLAY,STERM)
  13.   wterml(DISPLAY,TERML)
  14.   wterml(DISPLAY,STERML)
  15.   wcmp(DISPLAY,REFSYMB,TERML)
  16.   wcmp(DISPLAY,STRING,STERML)
  17.   wop(DISPLAY,PRIOR,XFY,OP,TERML)
  18.   wop(DISPLAY,PRIOR,XFY,OP,STERML)
  19.   wleft(DISPLAY,ASSOC,PRIOR,STERM)
  20.   wleft(DISPLAY,ASSOC,PRIOR,TERM)
  21.   wright(DISPLAY,ASSOC,PRIOR,TERM)
  22.   wright(DISPLAY,ASSOC,PRIOR,STERM)
  23.   prefix(XFY,ASSOC)
  24.   suffix(XFY,ASSOC)
  25.   infix(XFY,ASSOC,ASSOC)
  26.   brackets_needed(ASSOC,PRIOR,TERM)
  27.   brackets_needed(ASSOC,PRIOR,STERM)
  28.   wlist(DISPLAY,TERM)
  29.   wlist(DISPLAY,STERM)
  30.  
  31. CLAUSES
  32.   wterm(_,TERM):-free(TERM),!,write('_').
  33.   wterm(_,int(X)):-!,write(X).
  34.   wterm("write",str(X)):-!,write(X).
  35.   wterm(_,str(X)):-!,write('"',X,'"').
  36.   wterm("write",char(X)):-!,write(X).
  37.   wterm(_,char(X)):-!,write('`',X).
  38.   wterm(_,atom(X)):-!,write(X).
  39.   wterm(_,var(X)):-!,write(X).
  40.   wterm(_,nill):-!,write("[]").
  41.   wterm(DISPLAY,list(HEAD,TAIL)):-!,
  42.     write('['),wlist(DISPLAY,list(HEAD,TAIL)),write(']').
  43.   wterm(DISPLAY,cmp(FID,TERML)):-wcmp(DISPLAY,FID,TERML).
  44.  
  45.   wcmp(DISPLAY,FID,TERML):-
  46.     DISPLAY><"display",
  47.     OP=FID,op(PRIOR,ASSOC,OP),
  48.     wop(DISPLAY,PRIOR,ASSOC,OP,TERML),!.
  49.   wcmp(DISPLAY,FID,TERML):-write(FID,'('),wterml(DISPLAY,TERML),write(')').
  50.  
  51.   prefix(fx,x).    prefix(fy,y).
  52.  
  53.   suffix(xf,x).    suffix(yf,y).
  54.  
  55.   infix(xfx,x,x). infix(xfy,x,y). infix(yfx,y,x). infix(yfy,y,y).
  56.  
  57.   wop(DISPLAY,PRIOR,ASSOC,OP,[TERM]):-prefix(ASSOC,XY),!,
  58.     write(OP),wright(DISPLAY,XY,PRIOR,TERM).
  59.   wop(DISPLAY,PRIOR,ASSOC,OP,[TERM]):-suffix(ASSOC,XY),!,
  60.     wleft(DISPLAY,XY,PRIOR,TERM),write(OP).
  61.   wop(DISPLAY,PRIOR,ASSOC,OP,[TERM1,TERM2]):-infix(ASSOC,LEFT_XY,RIGHT_XY),
  62.     wleft(DISPLAY,LEFT_XY,PRIOR,TERM1),
  63.     write(OP),
  64.     wright(DISPLAY,RIGHT_XY,PRIOR,TERM2).
  65.  
  66.   brackets_needed(_,PRIOR,TERM):-
  67.     bound(TERM),TERM=cmp(FID,_),
  68.     OP=FID, op(PRIOR1,_,OP), PRIOR1>PRIOR,!.
  69.   brackets_needed(x,PRIOR,TERM):-
  70.     bound(TERM),TERM=cmp(FID,_),
  71.     OP=FID, op(PRIOR,_,OP),!.
  72.  
  73.   wright(DISPLAY,XY,PRIOR,TERM):-
  74.     brackets_needed(XY,PRIOR,TERM),!,
  75.     write(" ("),wterm(DISPLAY,TERM),write(')').
  76.   wright(DISPLAY,_,_,TERM):-write(' '),wterm(DISPLAY,TERM).
  77.  
  78.   wleft(DISPLAY,XY,PRIOR,TERM):-
  79.     brackets_needed(XY,PRIOR,TERM),!,
  80.     write('('),wterm(DISPLAY,TERM),write(") ").
  81.   wleft(DISPLAY,_,_,TERM):-wterm(DISPLAY,TERM),write(' ').
  82.  
  83.   wterml(_,[]):-!.
  84.   wterml(DISPLAY,[H]):-!,wterm(DISPLAY,H).
  85.   wterml(DISPLAY,[H|T]):-wterm(DISPLAY,H),write(','),wterml(DISPLAY,T).
  86.  
  87.   wlist(_,nill):-!.
  88.   wlist(DISPLAY,list(H,T)):-free(T),!,wterm(DISPLAY,H),write("|_").
  89.   wlist(DISPLAY,list(H,var(VAR))):-!,wterm(DISPLAY,H),write("|"),write(VAR).
  90.   wlist(DISPLAY,list(H,nill)):-!,wterm(DISPLAY,H).
  91.   wlist(DISPLAY,list(H,T)):-wterm(DISPLAY,H),write(','),wlist(DISPLAY,T).
  92.