minik refactor ve rastgele sırayla tüm kelimeleri sorma
This commit is contained in:
53
soru.lisp
53
soru.lisp
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user