Files
to-hen/name-eugenics/name-eugenics.scm

49 lines
1.2 KiB
Scheme
Raw Permalink Normal View History

2026-03-14 07:23:00 +01:00
(random-seed (time-nanosecond (current-time)))
(define (sample elements)
(let* ((len (length elements))
(random-index (random len)))
(list-ref elements random-index)))
(define (flatten lst)
(cond
((null? lst) '())
((list? (car lst)) (append (flatten (car lst)) (flatten (cdr lst))))
(else (cons (car lst) (flatten (cdr lst))))))
(define (symbols-to-string symbol-list)
(apply string-append (map symbol->string symbol-list)))
(define V '(a e i o u))
(define C '(p t k b d g f s h v z m n r l y w))
(define syllable-types
'((C V)
(V)
(C V C)
(V C)))
(define (random-syllable)
(let* ((syllable-type (sample syllable-types)))
(map
(lambda (cover-symbol)
(sample (case cover-symbol
((C) C)
((V) V)
(else (error #f "Invalid symbol")))))
syllable-type)))
(define (multiple n f)
(if (= n 0) '()
(cons (f)
(multiple (- n 1) f))))
(let*
((max-syllables 5)
(syllable-count (+ 1 (random max-syllables)))
(syllables (multiple syllable-count random-syllable)))
(begin
(display (symbols-to-string (flatten syllables)))
(newline)))