5 @implementation MalFunc
7 @synthesize ast
= _ast
;
8 @synthesize env
= _env
;
9 @synthesize params
= _params
;
10 @synthesize isMacro
= _isMacro
;
11 @synthesize
meta = _meta
;
13 - (id
)init
:(NSArray
*)ast env
:(Env
*)env params
:(NSArray
*)params
{
20 _meta
= [NSNull alloc
];
25 - (id
)apply
:(NSArray
*)args
{
26 return EVAL(_ast
, [Env fromBindings
:_env binds
:_params exprs
:args
]);
29 - (id
)copyWithZone
:(NSZone
*)zone
31 MalFunc
* copy
= [[[self
class] alloc
] init
:_ast env
:_env params
:_params
];
33 copy.isMacro
= _isMacro
;
42 NSObject
* apply
(id f
, NSArray
*args
) {
43 if ([f isKindOfClass
:[MalFunc
class]]) {
44 return [f apply
:args
];
46 NSObject
* (^ fn
)(NSArray
*) = f
;