Advertisement
C4Cypher

Greenspanning like a boss

Aug 5th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.30 KB | None | 0 0
  1. %-----------------------------------------------------------------------------%
  2. %
  3. % Lua Variables.
  4. %
  5.  
  6.     % This type represents the Mercury equivalent to Lua's variable list
  7.     % espression, used to pass varadic function arguments and return
  8.     % values.
  9.    
  10. :- type vars
  11.     --->    some [T] (var(T))
  12.     ;   some [T] (cons_var(T, vars))
  13.     where equality is unify_vars.
  14.    
  15.     % Due to nil's special status as the abscence of value, a single
  16.     % nil value is passed in place of the empty list and will unify
  17.     % with lists of nil.
  18.     %
  19. :- pred unify_vars(vars::in, vars::in) is det.
  20.  
  21. :- implementation. % TODO: Move to main implementation
  22.  
  23. unify_vars(var(T1), var(T2)) :- dynamic_cast(T1, T2).
  24.  
  25. unify_vars(cons_var(T1, Vars1), cons_var(T2, Vars2) :-
  26.     dynamic_cast(T1, T2),
  27.     unify_vars(Vars1, Vars2).
  28.    
  29. unify_vars(var(T1), cons_var(T2, var(nil))) :- dynamic_cast(T1, T2).
  30.  
  31. unify_vars(cons_var(T1, var(nil)), var(T2)) :- dynamic_cast(T1, T2).
  32.  
  33. :- interface.
  34.  
  35. :- func vars(T, vars) = vars.
  36. :- mode vars(in, in) = out is det.
  37. :- mode vars(unused, out) = in is det.
  38. :- mode vars(out, out) = in is semidet.
  39.  
  40. :- implementation. % TODO: Move to main implementation
  41.  
  42. vars(T::in, Vars::in) = ('new cons_var'(T, Vars)::out).
  43.  
  44. vars(_, Vars) = cons_var(_, Vars).
  45.  
  46. vars(T1, Vars) = cons_var(T2, Vars) :- dynamic_cast(T1, T2).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement