PaweU

prolog6

Dec 11th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. %zad 1
  2.  
  3. func_call(F/_/Iout, Inputs, Output) :-
  4. !,
  5. L = [F | Inputs],
  6. nth0(Iout, Lista, Output, L),
  7. Predykat =.. Lista,
  8. call(Predykat).
  9.  
  10. %zad 2
  11. func_call(F/N, Inputs, Output) :-
  12. !,
  13. func_call(F/N/N, Inputs, Output).
  14.  
  15. %zad 3
  16.  
  17. :- op(700, xfx, <#).
  18. :- op(600, xfy, #).
  19.  
  20. %wersja ulepszona
  21. Result <# Function # ArgsChain :-
  22. parse_args_chain(ArgsChain, Args),
  23. func_call(Function, Args, Result).
  24.  
  25. parse_args_chain(H # T, [H|TArgs]) :-
  26. !,
  27. parse_args_chain(T, TArgs).
  28.  
  29. parse_args_chain(H, [H]).
  30.  
  31.  
  32. %zad 4
  33.  
  34. curry_call(function(Pred/N/I, List), InArg, Out) :-
  35. append(List, [InArg], NewList),
  36. ArgsExpected is N-1,
  37. (
  38. length(NewList, ArgsExpected) ->
  39. func_call(Pred/N/I, NewList, Out)
  40. ;
  41. Out = function(Pred/N/I, NewList)
  42. ).
  43.  
  44. Result <# Function/N # Arg :-
  45. curry_call(function(Function/N, []), Arg, Result).
  46.  
  47. Result <# CurryFun # Arg :-
  48. curry_call(CurryFun, Arg, Result).
  49.  
  50.  
  51.  
  52.  
  53.  
  54. ZAPYTANIA:
  55. func_call(length/2/2, [[1,2,3]], X).
  56. func_call(append/3/2, [[1,2],[1,2,3,4]], X).
  57. func_call(length/2, [[1,2,3]], X).
  58. X <# append/3 # [1,2] # [3,4].
  59.  
  60. curry_call(function(append/3/3, []), [1,2], X),
  61. curry_call(X, [3,4], Y).
  62.  
  63. X <# append/3/3 # [1,2],
  64. Y <# X # [3,4].
Add Comment
Please, Sign In to add comment