Guest User

Untitled

a guest
Jun 25th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. type_of(return(Values), _, [Arity]) :- length(Values, Arity).
  2.  
  3. type_of(if(Then, Else), Env, T) :-
  4. type_of(Then, Env, T1),
  5. type_of(Else, Env, T2),
  6. union(T1, T2, T).
  7.  
  8. type_of(fun([]), _, [] -> []).
  9. type_of(fun([Args->Body|Cdr]), Env, TArity->TBody) :-
  10. length(Args, TArityCar),
  11. type_of(Body, Env, TBodyCar),
  12. type_of(fun(Cdr), Env, TArityCdr->TBodyCdr),
  13. union([TArityCar], TArityCdr, TArity),
  14. union(TBodyCar, TBodyCdr, TBody).
  15.  
  16. union2(S1, S2, U) :-
  17. is_list(S1),
  18. is_list(S2),
  19. union(S1, S2, U).
  20. union2(S1, (S2, Var), (U2, Var)) :-
  21. is_list(S1),
  22. is_list(S2),
  23. union(S1, S2, U1),
  24. lowpass(U1, Var, U2).
  25. union2((S1, Var), S2, X) :-
  26. is_list(S1),
  27. is_list(S2),
  28. union2(S2, (S1, Var), X).
  29. union2((S1, Var1), (S2, Var2), X) :-
  30. is_list(S1),
  31. is_list(S2),
  32. Var1 >= Var2, !,
  33. union2(S1, (S2, Var2), X).
  34. union2((S1, Var1), (S2, Var2), X) :-
  35. is_list(S1),
  36. is_list(S2),
  37. Var1 < Var2,
  38. union2(S2, (S1, Var1), X).
  39.  
  40. lowpass([], _, []).
  41. lowpass([H|T], Cutoff, X) :-
  42. H >= Cutoff,
  43. lowpass(T, Var, X).
  44. lowpass([H|T], Cutoff, [H|L]) :-
  45. H < Cutoff,
  46. lowpass(T, Var1, L).
Add Comment
Please, Sign In to add comment