aboutsummaryrefslogtreecommitdiffstats
path: root/markov.chicken.scm
blob: d079063a3a36d425dff432fa19b70c365a6117d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(module markov
  (make-table-from-file
   guess-sentence
   generate-next-word
   join-verses
   seed-from-entropy)
  (import scheme (chicken base) srfi-69
          (chicken format)
          (chicken random))
  (define (seed-from-entropy)
    (set-pseudo-random-seed! (random-bytes)))
  (define (join-verses* lst str book chapter verse)
    (if (null? lst)
        str
        (let* ((cur (car lst))
               (first-character (if (= (string-length cur) 0)
                                    #f
                                    (string-ref cur 0)))
               (rest (cdr lst)))
          (cond
            ((not (char? first-character)) (join-verses* rest str
                                                         book chapter verse))
            ((equal? cur "startofbook")
             (join-verses* rest (sprintf "~A~%~%~%" str) (+ book 1) 1 1))
            ((equal? cur "startofchapter")
             (join-verses* rest (sprintf "~A~%~%" str) book (+ 1 chapter) 1))
            ((equal? cur "startofverse")
             (join-verses* rest (sprintf "~A~%~A:~A:~A"
                                         str book chapter verse)
                           book chapter (+ 1 verse)))
            ((or (char-alphabetic? first-character)
                 (char-numeric? first-character))
             (join-verses* rest (string-append str " " cur)
                           book chapter verse))
            (else (join-verses* rest (string-append str cur)
                                book chapter verse))))))
  (define (join-verses lst)
    (string-append (join-verses* lst "THE BOOK OF MARKOV" 1 0 1)
                   "\n"))
  (include "markov.impl.scm"))