mirror of
https://github.com/kanaka/mal.git
synced 2024-09-11 21:57:38 +03:00
- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
95 lines
1.4 KiB
Objective-C
95 lines
1.4 KiB
Objective-C
#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;
|
|
- (Env *) find:(MalSymbol *)key;
|
|
- (NSObject *) get:(MalSymbol *)key;
|
|
|
|
@end
|
|
|
|
//
|
|
// Mal Types
|
|
//
|
|
|
|
@interface MalTrue : NSObject
|
|
@end
|
|
|
|
@interface MalFalse : NSObject
|
|
@end
|
|
|
|
@interface MalSymbol: NSString
|
|
@end
|
|
|
|
BOOL string_Q(NSObject * obj);
|
|
|
|
// Lists
|
|
|
|
BOOL list_Q(id obj);
|
|
|
|
NSArray * _rest(NSArray * obj);
|
|
|
|
|
|
// 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
|
|
|
|
NSDictionary * assoc_BANG(NSMutableDictionary * d, NSArray * kvs);
|
|
NSDictionary * hash_map(NSArray *kvs);
|
|
|
|
|
|
// Mal Functions
|
|
|
|
BOOL block_Q(id obj);
|
|
|
|
|
|
// Atoms
|
|
|
|
@interface MalAtom : NSObject
|
|
|
|
@property (copy) NSObject * val;
|
|
|
|
- (id)init:(NSObject *)val;
|
|
|
|
+ (id)fromObject:(NSObject *)val;
|
|
|
|
@end
|
|
|
|
BOOL atom_Q(id obj);
|
|
|
|
|
|
// General functions
|
|
|
|
BOOL equal_Q(NSObject * a, NSObject * b);
|