home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / b / binprolog / !BinPro330 / progs / bbemul < prev    next >
Encoding:
Text File  |  1994-02-13  |  1.5 KB  |  68 lines

  1. % BinProlog compatibilty package for other Prologs.
  2. %
  3. % It allows execution of BinProlog-style bboard operations
  4. % which do not depend on the semantics (logical or immediate udate)
  5. % of the underlying assert/retarct operations: therefore it ensures
  6. % that code using it will be highly portable.
  7. %
  8. % Tested on: Aquarius 1.0 SB-Prolog 3.1, C-Prolog 1.4, SWI-prolog.
  9.  
  10. :-dynamic(bb/3).
  11. :-G=bb('$empty','$empty','$empty'),assert(G),retract(G),!.
  12.  
  13. term2key(T,NewT):-nonvar(T),functor(T,Tf,Tn),functor(NewT,Tf,Tn).
  14.  
  15. bb_def(N,K,_):-bb(N,K,_),!,fail.
  16. bb_def(N,K,X):-bb_assert(N,K,X).
  17.  
  18. bb_val(N,K,X):-nonvar(N),nonvar(K),bb(N,K,Y),!,X=Y.
  19.  
  20. bb_set(N,K,X):-nonvar(N),nonvar(K),retract(bb(N,K,_)),!,
  21.   bb_assert(N,K,X).
  22. bb_set(N,_,_):-
  23.   bb_error(N).
  24.  
  25. bb_rm(N,K):-nonvar(N),nonvar(K),
  26.   ( retract(bb(N,K,_))->true
  27.     ; bb_error(N)
  28.   ).
  29.  
  30. bb_error(T):-functor(T,F,N),
  31.   write(F/N),
  32.   write(' ??? bb_def/3 expected before bb_set/3, bb_rm/2'),nl,
  33.   fail.
  34.  
  35. bb_let(N,K,_):-bb_rm(N,K),fail.
  36. bb_let(N,K,X):-bb_set(N,K,X).
  37.  
  38. bb_def(K,X):-bb_def(K,K,X).
  39.  
  40. bb_set(K,X):-bb_set(K,K,X).
  41.  
  42. bb_val(K,X):-bb_val(K,K,X).
  43.  
  44. bb_rm(K):-bb_rm(K,K).
  45.  
  46. bb_let(K,X):-bb_let(K,K,X).
  47.  
  48. bb:-
  49.   bb(N,K,X),functor(N,Nf,Nn),functor(K,Kf,Kn),
  50.   write(Nf/Nn+Kf/Kn=X),nl,fail
  51. ; nl.
  52.  
  53. bb_assert(N,K,X):-
  54.   term2key(N,NewN),
  55.   term2key(K,NewK),
  56.   assert(bb(NewN,NewK,X)).
  57.  
  58. go:-
  59.   bb_def(a,13),bb_set(a,10),bb_val(a,X),write(X),nl,fail
  60. ; bb_set(b,5)
  61. ; bb_def(f(1,1),g(2,2)),fail
  62. ; bb_val(f(a,a),X),write(X),nl,fail
  63. ; bb_rm(c,d)
  64. ; bb_def(_,_,_)
  65. ; bb.
  66.  
  67. p:-reconsult('bb.pl').
  68.