diff options
Diffstat (limited to 'soru.lisp')
-rw-r--r-- | soru.lisp | 53 |
1 files changed, 34 insertions, 19 deletions
@@ -4,8 +4,7 @@ (defparameter *kelimeler* nil) (defparameter *kelimeler-dosyası* - (format nil "/home/~a/projects/japonca/kelime/kelimeler.txt" - (uiop:hostname))) + (asdf:system-relative-pathname :japonca "kelime/kelimeler.txt")) (defun kelimeleri-yükle (&optional (dosya *kelimeler-dosyası*)) (setf *kelimeler* @@ -26,7 +25,7 @@ (when *soru-sayısı* (format t "~a. " *soru-sayısı*))) -(defmethod kelime-soru ((kelime kelime) (tip (eql :okunuş)) ) +(defmethod kelime-soru ((kelime kelime) (tip (eql :okunuş))) (block soru (let (cevap sonuç) (format t "~a nasıl okunur ? " (kanji kelime)) @@ -40,25 +39,41 @@ (defgeneric alıştırma (tip &key &allow-other-keys)) -(defmethod alıştırma :before ((tip (eql :okunuş)) &key (baş 0) son &allow-other-keys) - (when (null *kelimeler*) - (kelimeleri-yükle)) - (format t "Tanımlı kelimeler: ~d~%" (fill-pointer *kelimeler*)) +(defmethod alıştırma :before ((tip (eql :okunuş)) &key (baş 0) son sırayla (kelimeler *kelimeler*) &allow-other-keys) + (when (null kelimeler) + (setf kelimeler (kelimeleri-yükle))) + (format t "Tanımlı kelimeler: ~d~%" (fill-pointer kelimeler)) (when (not son) - (setf son (length *kelimeler*))) - (format t "Aralık: ~d-~d, ~d kelime~%" baş (- son 1) (- son baş))) + (setf son (length kelimeler))) + (when (not sırayla) + (format t "Aralık: ~d-~d, ~d kelime~%" baş (- son 1) (- son baş)))) -(defmethod alıştırma ((tip (eql :okunuş)) &key (baş 0) son &allow-other-keys) +(defmethod alıştırma ((tip (eql :okunuş)) &key (baş 0) son sırayla (kelimeler *kelimeler*) &allow-other-keys) (let ((yanlış 0) (doğru 0)) - (loop :for *soru-sayısı* :from 1 - :for cevap := (kelime-soru (rastgele-kelime *kelimeler* :test #'kanji - :baş baş :son son) - :okunuş) - :do (cond ((eq :çık cevap) - (format t "~d/~d~%" doğru (+ doğru yanlış)) - (loop-finish)) - ((not cevap) (incf yanlış)) - (t (incf doğru)))))) + (if (not sırayla) + (loop :for *soru-sayısı* :from 1 + :for cevap := (kelime-soru (rastgele-kelime kelimeler :test #'kanji + :baş baş :son son) + :okunuş) + :do (cond ((eq :çık cevap) + (format t "~d/~d~%" doğru (+ doğru yanlış)) + (loop-finish)) + ((not cevap) (incf yanlış)) + (t (incf doğru)))) + (progn (kelimeleri-kar kelimeler) + (loop :with *soru-sayısı* := 1 + :for i :from 0 :below (length kelimeler) + :for cevap := (if (null (kanji (aref kelimeler i))) + :geç + (kelime-soru (aref kelimeler i) :okunuş)) + :do (cond ((eq :çık cevap) + (format t "~d/~d~%" doğru (+ doğru yanlış)) + (loop-finish)) + ((not cevap) (incf yanlış)) + (t (incf doğru))) + (unless (eq :geç cevap) + (incf *soru-sayısı*))) + (kelimeleri-sırala kelimeler))))) ;; (defmacro soru-tanım (args &body beden) ;; `(block soru |