Lojban
The Logical Language
Log in
Username:
Password:
I forgot my password |
CapsLock is on.
Log in
History: Robin's Palm Writings: ; mooix2
View page
Source of version: 3
(current)
Robin's Palm Writings Category: misc Navigation: ((Robin's Palm Writings: misc|misc Index)) ((Robin's Palm Writings|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 ((string? x) (string-join x "\n") ((number? x) (string-join (number->string x) "\n") ; If x is a procedure, then either it's a mooix object or an error ((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 ((not (equal? num #f)) 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 ((= num 0) (read-string file) ) ((= 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 ((equal? file "") #f) ((not (file-exists? file)) #f) (else (let* ( (string (this (car args))) (num (string->number string)) ) (cond ((and num (= 1 num)) #t) ((not (equal? string "")) #t) (else #f) ) )) ) ) )
About
Introduction
What Others Say
FAQ
Learning
Books
Vocabulary
Lojbanic Software
Community
Web/Email Forums
IRC Chat
Links
News
Dictionary
Swag
Multimedia
Lojbanic Texts
Audio
Wiki
Recent Changes
Popular Pages
How To Edit
The LLG
Official Projects
Publications
Donate!
Contact Us
Search Lojban Resources