2016-03-04 08:08:47 +03:00
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
|
|
|
|
//
|
|
|
|
// Env definition
|
|
|
|
//
|
|
|
|
|
|
|
|
@class MalSymbol;
|
|
|
|
|
|
|
|
@interface Env : NSObject
|
|
|
|
|
|
|
|
@property (copy) NSMutableDictionary * data;
|
|
|
|
@property (copy) Env * outer;
|
|
|
|
|
|
|
|
- (id)initWithBindings:(Env *)outer binds:(NSArray *)binds exprs:(NSArray *)exprs;
|
|
|
|
- (id)initWithOuter:(Env *)outer;
|
|
|
|
- (id)init;
|
|
|
|
|
|
|
|
+ (id)fromOuter:(Env *)outer;
|
|
|
|
+ (id)fromBindings:(Env *)outer binds:(NSArray *)binds exprs:(NSArray *)exprs;
|
|
|
|
|
|
|
|
- (NSObject *) set:(MalSymbol *)key val:(NSObject *)val;
|
|
|
|
- (NSObject *) get:(MalSymbol *)key;
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
//
|
|
|
|
// Mal Types
|
|
|
|
//
|
|
|
|
|
|
|
|
@interface MalTrue : NSObject
|
|
|
|
@end
|
|
|
|
|
|
|
|
@interface MalFalse : NSObject
|
|
|
|
@end
|
|
|
|
|
|
|
|
@interface MalSymbol: NSString
|
|
|
|
@end
|
|
|
|
|
2016-03-04 10:56:54 +03:00
|
|
|
BOOL string_Q(NSObject * obj);
|
2016-03-04 08:08:47 +03:00
|
|
|
|
|
|
|
// Lists
|
|
|
|
|
|
|
|
BOOL list_Q(id obj);
|
|
|
|
|
2016-03-04 10:56:54 +03:00
|
|
|
NSArray * _rest(NSArray * obj);
|
|
|
|
|
2016-03-04 08:08:47 +03:00
|
|
|
|
|
|
|
// Vectors
|
|
|
|
|
|
|
|
@interface MalVector : NSArray
|
|
|
|
|
|
|
|
@property (copy) NSArray * array;
|
|
|
|
@property(readonly) NSUInteger count;
|
|
|
|
|
|
|
|
- (id)initWithArray:(NSArray *)arr;
|
|
|
|
- (id)init;
|
|
|
|
|
|
|
|
+ (id)fromArray:(NSArray *)arr;
|
|
|
|
|
|
|
|
- (id)objectAtIndex:(NSUInteger)index;
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
// Hash Maps
|
|
|
|
|
2016-03-04 10:56:54 +03:00
|
|
|
NSDictionary * assoc_BANG(NSMutableDictionary * d, NSArray * kvs);
|
2016-03-04 08:08:47 +03:00
|
|
|
NSDictionary * hash_map(NSArray *kvs);
|
|
|
|
|
|
|
|
|
|
|
|
// Mal Functions
|
|
|
|
|
|
|
|
BOOL block_Q(id obj);
|
|
|
|
|
|
|
|
|
2016-03-04 10:56:54 +03:00
|
|
|
// Atoms
|
|
|
|
|
|
|
|
@interface MalAtom : NSObject
|
|
|
|
|
|
|
|
@property (copy) NSObject * val;
|
|
|
|
|
|
|
|
- (id)init:(NSObject *)val;
|
|
|
|
|
|
|
|
+ (id)fromObject:(NSObject *)val;
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
BOOL atom_Q(id obj);
|
|
|
|
|
2016-03-04 08:08:47 +03:00
|
|
|
|
|
|
|
// General functions
|
|
|
|
|
|
|
|
BOOL equal_Q(NSObject * a, NSObject * b);
|