diff --git a/wordgen.scm b/wordgen.scm new file mode 100644 index 0000000..71981ce --- /dev/null +++ b/wordgen.scm @@ -0,0 +1,39 @@ +;; A word generator designed for use in an interactive environment + +(define (fold-right f init seq) + (if (null? seq) + init + (f (car seq) + (fold-right f init (cdr seq))))) + +(define (pick-random lst) + (let ((index (random (length lst)))) + (list-ref lst index))) + +(define (C) + (pick-random '("s" "v" "ch" "j"))) + +(define (V) + (pick-random '("a" "e" "u"))) + +(define (N) + (pick-random '("n" "l"))) + +(define (string->procs str) + (define (randomize chars) + (cond ((null? chars) '()) + ((char=? (car chars) #\?) + (if (zero? (random 2)) + (cons (cadr chars) (randomize (cddr chars))) + (randomize (cddr chars)))) + (else (cons (car chars) (randomize (cdr chars)))))) + (map (lambda (c) (eval (string->symbol (string c)))) + (randomize (string->list str)))) + +(define (generate-word template) + (apply string-append + (map (lambda (f) (f)) + (string->procs template)))) + +;; Example: (generate-word "CVNVN") +;; => "jenel"