supplicatory model: Difference between revisions
mNo edit summary |
(No difference)
|
Revision as of 17:11, 4 November 2013
Robin's Palm Writings Category: misc
Navigation: misc Index Robin's Palm Writings Top-Level Index
- Convert a list of scheme objects into mooix's string representation
- numbers, strings, mooix objects, ?? are OK
(define (scheme->mooix-string slist)
(display
- map the elements of slist into a list of newline-terminated mooix strings, which we then output
(map
(lambda (x)
(cond
[jbocre: string? x) (string-join x "\n")
[jbocre: number? x) (string-join (number->string x) "\n")
- If x is a procedure, then either it's a mooix object or an error
[jbocre: procedure? x)
(let dir (x "dir")
(if (directory? dir)
(string-join "mooix:" dir "\n")
(and (display "Procedure which is not a mooix object not a legal return value." (current-error-port] #f)
)
)
)
)
)
slist
)
)
)
- Convert a mooix string representation to a list of Scheme objects - numbers, strings, mooix-obj, ??
(define (mooix-string->scheme mstring)
- Read all STDIN lines, and map each into a Scheme object, returning the resulting list
(map
(lambda (x)
(let (
(num (string->number x]
(mobj (string-prefix? "mooix:" x])
(cond
num
)
(mobj
(mooix-obj
(string-copy x 7)
)
)
- Return all others as strings
(else x)
)
)
)
(read-string)
)
- Retrieve or set a file-based field
(define (file-field this method args)
(let (
(num (length args]
(file (this "fieldfile" (list method])
)
- Behaviour is based on number of arguments; zero means return the file, one means set it, more is an error
(cond
[jbocre: = num 0)
(read-string file)
)
[jbocre: = num 1)
(display (car args) (open-output-file file]
)
(else (and (display "Non-method field " method " on object mooix:" (make-absolute-pathname (this "dir"] " passed more than one argument.\n" (current-error-port] #f]
)
)
- **********
- Regular dispatch table methods follow
- **********
- Returns #t iff the first argument is in the built-in mooix object method list (that is, in dispatch-table), else returns #f
(define (can-dispatch this args)
(if (equal? #f (assoc (car args) dispatch-table]
- f
- t
)
)
(define (get this args)
(mooix-obj (car args]
)
(define (hybridgetfield this args)
(let* (
(field (car args]
(file (this "fieldfile" args]
(dot (string-prefix? "." field]
- True if not a symlink or dir
(reg (regular-file? file]
(exe (file-execute-access? file]
(hybrid (this "test" (list (string-join "." field "-hybrid"]
)
(and
file
dot
reg
(or (not exe) (and exe hybrid]
- NB
- this relies on file fields and methods never being able to return #f as *data* - if that changes (and it seems a piss-poor idea to change it) this will need to be looked at again
(this (car args]
)
)
)
- Get the field named and return a boolean based on treating its value as Perl/C true/false (TODO
- empty string, no such file, and 0 are false, else true)
(define (test this args)
(let (
(file (this "fieldfile" args]
)
(cond
[jbocre: equal? file "") #f)
jbocre: not (file-exists? file #f)
(else (let* (
(string (this (car args])
(num (string->number string]
)
(cond
jbocre: not (equal? string "" #t)
(else #f)
)
]
)
)
)