mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-18 23:35:25 +00:00
Implement higher-order functions.
Estimated hours taken: 12 Implement higher-order functions. Add higher-order function terms (function lambda expressions, e.g. `Func = (func(X) = Y :- Y is 2 * X)' and higher-order function calls (apply/N, e.g. `Z = apply(Func, 42)'). Add higher-order function insts and modes. hlds_goal.m: Add a new field pred_or_func to lambda_goal. prog_data.m: Add a new field pred_or_func to pred_inst_info. prog_io.m: Add support for parsing higher-order function terms and higher-order function insts and modes. make_hlds.m: Add support for parsing higher-order function terms. typecheck.m: Add support for type-checking higher-order function calls and higher-order function terms. modes.m, mode_errors.m: Add support for mode-checking higher-order function calls and higher-order function terms. higher_order.m: Handle higher-order function types and insts. hlds_pred.m: Add new predicate pred_args_to_func_args, for extracting the function arguments and function return from the arguments of a predicate that is really a function. *.m: Minor changes to handle new pred_or_func field in lambda_goals and pred_inst_infos.
This commit is contained in:
@@ -210,10 +210,18 @@
|
||||
|
||||
:- type pred_inst_info
|
||||
---> pred_inst_info(
|
||||
pred_or_func, % is this a higher-order func
|
||||
% mode or a higher-order pred
|
||||
% mode?
|
||||
list(mode), % the modes of the additional
|
||||
% (i.e. not-yet-supplied)
|
||||
% arguments of the pred
|
||||
determinism % the determinism of the pred
|
||||
% arguments of the pred;
|
||||
% for a function, this includes
|
||||
% the mode of the return value
|
||||
% as the last element of the
|
||||
% list.
|
||||
determinism % the determinism of the
|
||||
% predicate or function
|
||||
).
|
||||
|
||||
:- type bound_inst ---> functor(cons_id, list(inst)).
|
||||
|
||||
Reference in New Issue
Block a user