Paste: simple markov chain
Author: | bb |
Mode: | factor |
Date: | Sat, 27 Dec 2008 06:54:57 |
Plain Text |
USING: splitting random-weighted grouping random fry hashtables ;
: <chain> H{ } ;
: union-add
[ '[ swap _ at+ ] assoc-each ] keep ;
: add
[ '[ swap _ [ H{ } clone or union-add ] change-at ] assoc-each ] keep ;
: weighted-choice
swap at dup [ >alist [ swap ] assoc-map random-weighted* ] [ ] if ;
: add-line
" " split 2 clump
[ first2 1 swap associate swap associate add ] each ;
: sentence
tuck 1 -rot
[ dupd weighted-choice rot 1+ dup 15 < [ -rot ] dip dupd and ] [ dup ] [ 3drop ] produce
" " join ;
New Annotation