1 |
;;; erbutils.el --- |
;;; erbutils.el --- |
2 |
;; Time-stamp: <2005-07-06 10:30:48 deego> |
;; Time-stamp: <2005-07-28 15:00:04 deego> |
3 |
;; Copyright (C) 2002 D. Goel |
;; Copyright (C) 2002 D. Goel |
4 |
;; Emacs Lisp Archive entry |
;; Emacs Lisp Archive entry |
5 |
;; Filename: erbutils.el |
;; Filename: erbutils.el |
191 |
(nth (random (length list)) list)) |
(nth (random (length list)) list)) |
192 |
(t |
(t |
193 |
(let* ((len (length list)) |
(let* ((len (length list)) |
194 |
(revw (reverse weights)) |
(revw (reverse weights)) |
195 |
(fir (car revw)) |
(fir (car revw)) |
196 |
) |
) |
197 |
|
;; If weights are partially specified, fill in missing entries. |
198 |
(while (< (length revw) len) |
(while (< (length revw) len) |
199 |
(setq revw (cons fir revw))) |
(setq revw (cons fir revw))) |
200 |
(setq weights (reverse revw)) |
(setq weights (reverse revw)) |
201 |
(let* ((total (apply '+ weights)) |
(let* ((total (apply '+ weights)) |
202 |
(choice (random total)) |
(choice (random total)) |
203 |
(curw weights) |
(curw weights) |
204 |
(ctr 0) |
(ctr 0) |
205 |
(num 0)) |
(num 0)) |
206 |
|
|
207 |
(while (>= choice (+ ctr (car curw))) |
(while (>= choice (+ ctr (car curw))) |
208 |
(setq ctr (+ ctr (car curw))) |
(setq ctr (+ ctr (car curw))) |
209 |
(incf num) |
(incf num) |
210 |
(setq curw (cdr curw))) |
(setq curw (cdr curw))) |
211 |
(nth num list)))))) |
(nth num list)))))) |
212 |
|
|
213 |
|
|
214 |
|
|