summaryrefslogtreecommitdiff
path: root/util.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'util.lisp')
-rw-r--r--util.lisp39
1 files changed, 39 insertions, 0 deletions
diff --git a/util.lisp b/util.lisp
new file mode 100644
index 0000000..4180bd7
--- /dev/null
+++ b/util.lisp
@@ -0,0 +1,39 @@
+(in-package :japonca)
+
+(defun ağırlıklı-rastgele (options weights &optional length)
+ ;; (declare (type simple-array options) (type simple-array weights))
+ (let ((len (or length (length weights))))
+ (loop :with rand := (* (random 1.0) (aref weights (- len 1)))
+ :for i :from 0 :below (length weights)
+ :when (> (aref weights i) rand)
+ :do (return (aref options i)))))
+
+(defun ağırlık-ata (weights &optional length)
+ (let ((len (or length (length weights))))
+ (loop :for i :from 1 :below len
+ :do (incf (aref weights i)
+ (aref weights (- i 1))))
+ weights))
+
+(defun dosya-metni-oku (dosya)
+ (let* ((uzunluk 0)
+ (metin
+ (with-output-to-string (out)
+ (with-open-file (in dosya :external-format :utf-8)
+ (loop :with buffer := (make-array 8192 :element-type 'character)
+ :for n := (read-sequence buffer in)
+ :while (< 0 n)
+ :do (incf uzunluk n)
+ (write-sequence buffer out :start 0 :end n))))))
+ (values metin uzunluk)))
+
+
+
+;; (defun random-test (options weigths)
+;; (let ((opts options)
+;; (weights (set-weights-array weigths))
+;; (times (make-array 3 :initial-element 0)))
+;; (loop :for i :from 0 :below 1000
+;; :for choice := (weighted-random opts weights)
+;; :do (incf (aref times choice)))
+;; times))