init
This commit is contained in:
4
README.txt
Normal file
4
README.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Kişisel kullanım amacıyla yaptığım için
|
||||
herhangi bir arayüz ya da executable build yok.
|
||||
Emacs + Slime kullanılmalı.
|
||||
Emacsta toggle-input-method fonksiyonu ile Japonca yazabilirsiniz.
|
||||
13
japonca.asd
Normal file
13
japonca.asd
Normal file
@@ -0,0 +1,13 @@
|
||||
(defsystem japonca
|
||||
:author "Emre Akan"
|
||||
;; :license ""
|
||||
;; :depends-on ()
|
||||
:description "Japonca bilgisini pekiştirmek amaçlı soru soran program"
|
||||
:components ((:file "paket")
|
||||
(:file "util")
|
||||
;; (:file "kana")
|
||||
(:file "kelime")
|
||||
(:file "okur")
|
||||
(:file "sayı")
|
||||
;; (:file "japonca")
|
||||
(:file "soru")))
|
||||
72
kelime.lisp
Normal file
72
kelime.lisp
Normal file
@@ -0,0 +1,72 @@
|
||||
(in-package :japonca)
|
||||
|
||||
(defclass kelime ()
|
||||
((kanji :accessor kanji :initarg :kanji :initform nil)
|
||||
(kana :accessor kana :initarg :kana :initform nil)
|
||||
(anlam :accessor anlam :initarg :anlam :initform nil)
|
||||
(grup :accessor grup :initarg :grup :initform nil)
|
||||
(altgrup :accessor altgrup :initarg :altgrup :initform nil)))
|
||||
|
||||
(defmethod print-object ((kelime kelime) stream)
|
||||
(print-unreadable-object (kelime stream :type t)
|
||||
(with-slots (kanji kana anlam) kelime
|
||||
(if (null kanji)
|
||||
(format stream "~a : ~{~a~^, ~}" kana anlam)
|
||||
(format stream "~a ~a : ~{~a~^, ~}" kanji kana anlam)))))
|
||||
|
||||
(defun kelime-yap (kanji kana anlam)
|
||||
(make-instance 'kelime :kanji kanji :kana kana :anlam anlam))
|
||||
|
||||
(defmethod kanji= ((kelime kelime) kanji)
|
||||
(string= (kanji kelime) kanji))
|
||||
|
||||
(defmethod kana= ((kelime kelime) kana)
|
||||
(find kana (kana kelime) :test #'string=))
|
||||
|
||||
(defmethod anlam= ((kelime kelime) anlam)
|
||||
(find anlam (anlam kelime) :test #'string=))
|
||||
|
||||
(let* ((son-sayısı 5)
|
||||
(son-kelimeler (make-array son-sayısı
|
||||
:initial-element (make-instance 'kelime)
|
||||
:element-type 'kelime :fill-pointer 0))
|
||||
(i 0))
|
||||
(labels ((tarih-ekle (kelime)
|
||||
(if (= son-sayısı (fill-pointer son-kelimeler))
|
||||
(setf (aref son-kelimeler i) kelime
|
||||
i (mod (incf i) son-sayısı))
|
||||
(vector-push kelime son-kelimeler))))
|
||||
(defun rastgele-kelime (kelimeler &key (test #'identity) (baş 0) son)
|
||||
;; (declare (type number son))
|
||||
(let* ((len (length kelimeler))
|
||||
(son (if (and (not (null son)) (<= son len))
|
||||
son
|
||||
len))
|
||||
(kelime (loop :for kelime := (aref kelimeler (+ baş (random (- son baş))))
|
||||
:while (or (not (funcall test kelime))
|
||||
(find kelime son-kelimeler :test #'eql))
|
||||
:finally (return kelime))))
|
||||
(tarih-ekle kelime)
|
||||
kelime)))
|
||||
(defun son-rastgele-kelimeler ()
|
||||
son-kelimeler)
|
||||
(defun son-kelimeler-reset ()
|
||||
(setf (fill-pointer son-kelimeler) 0)))
|
||||
|
||||
(defun kelime-bul (kelimeler &key kanji)
|
||||
(let ((index (position kanji kelimeler :test #'string-equal :key #'kanji)))
|
||||
(if index
|
||||
(values (aref kelimeler index) index))))
|
||||
|
||||
;; (defun son-n-kelime-tut (n)
|
||||
;; (setf son-kelimeler
|
||||
;; (make-array n :initial-element (make-instance 'kelime)
|
||||
;; :element-type 'kelime :fill-pointer 0)))
|
||||
|
||||
;; (defun rastgele-kelime (kelimeler &optional if-fn)
|
||||
;; (let ((len (length kelimeler)))
|
||||
;; (if if-fn
|
||||
;; (loop :for kelime = (aref kelimeler (random len))
|
||||
;; :until (funcall if-fn kelime)
|
||||
;; :finally (return kelime))
|
||||
;; (aref kelimeler (random len)))))
|
||||
259
kelime/kelimeler.txt
Normal file
259
kelime/kelimeler.txt
Normal file
@@ -0,0 +1,259 @@
|
||||
; learnihongo
|
||||
|
||||
行く いく gitmek | fiil 1
|
||||
見る みる bakmak,görmek,izlemek | fiil 2
|
||||
多い おおい çok | sıfat i
|
||||
家 いえ、うち ev | isim
|
||||
- これ bu | zamir
|
||||
- それ şu | zamir
|
||||
私 わたし ben | zamir
|
||||
仕事 しごと iş | isim
|
||||
- いつ ne zaman | soru
|
||||
- する yapmak | fiil 3
|
||||
出る でる çıkmak,ayrılmak | fiil 2
|
||||
使う つかう kullanmak | fiil 1
|
||||
所 ところ yer,mahal | isim
|
||||
作る つくる yapmak,oluşturmak | fiil 1
|
||||
思う おもう düşünmek | fiil 1
|
||||
持つ もつ sahip olmak,taşımak | fiil 1
|
||||
買う かう satın almak | fiil 1
|
||||
時間 じかん zaman,vakit | isim, zarf
|
||||
知る しる bilmek,tanımak | fiil 1
|
||||
同じ おなじ aynı | isim, zarf
|
||||
今 いま şimdi | zarf
|
||||
新しい あたらしい yeni | sıfat i
|
||||
成る なる olmak | fiil 1
|
||||
- まだ hala,henüz | zarf
|
||||
- あと sonra,daha sonra | isim
|
||||
聞く きく duymak,sormak | fiil 1
|
||||
言う いう söylemek | fiil 1
|
||||
少ない すくない az,nadir | sıfat i
|
||||
高い たかい yüksek,pahalı | sıfat i
|
||||
子供 こども çocuk | isim
|
||||
- そう şöyle,öyle | zarf
|
||||
- もう zaten,hala,henüz,artık | zarf
|
||||
学生 がくせい öğrenci | isim
|
||||
熱い あつい sıcak | sıfat i ; (nesne)
|
||||
- どうぞ lütfen,buyrun | zarf
|
||||
午後 ごご öğleden sonra,PM | zarf
|
||||
長い ながい uzun | sıfat i
|
||||
本 ほん kitap | isim
|
||||
今年 ことし bu yıl | zarf
|
||||
- よく sık sık | zarf
|
||||
彼女 かのじょ o, sevgili | zamir ; o bayan
|
||||
- どう ne,nasıl | soru
|
||||
言葉 ことば kelime, söz | isim
|
||||
顔 かお yüz,surat | isim
|
||||
終わる おわる bitmek, son bulmak | fiil 1
|
||||
一つ ひとつ bir | isim
|
||||
- あげる vermek | fiil 2
|
||||
- こう böyle | zarf
|
||||
学校 がっこう okul | isim
|
||||
- くれる vermek | fiil 2
|
||||
始める はじめる başlamak | fiil 2
|
||||
起きる おきる kalkmak, uyanmak | fiil 2
|
||||
春 はる ilkbahar | isim, zarf
|
||||
午前 ごぜん sabah,öğleden önce,AM | isim, zarf
|
||||
別 べつ diğer,farklı,başka | sıfat
|
||||
- どこ nere,neresi | soru
|
||||
部屋 へや oda | isim
|
||||
若い わかい genç | sıfat i
|
||||
車 くるま araba | isim
|
||||
置く おく koymak,bırakmak | fiil 1
|
||||
住む すむ yaşamak | fiil 1
|
||||
働く はたらく çalışmak | fiil 1
|
||||
難しい むずかしい zor | sıfat i
|
||||
先生 せんせい öğretmen,hoca | isim
|
||||
立つ たつ ayakta durmak, ayağa kalkmak | fiil 1
|
||||
呼ぶ よぶ çağırmak,seslenmek | fiil 1
|
||||
大学 だいがく üniversite | isim
|
||||
安い やすい ucuz | sıfat i
|
||||
- もっと daha,daha fazla | zarf
|
||||
帰る かえる eve dönmek | fiil 1
|
||||
分る わかる anlamak | fiil 1
|
||||
広い ひろい geniş | sıfat i
|
||||
数 かず sayı | isim
|
||||
近い ちかい yakın | sıfat i
|
||||
- そこ şurası,şura | zamir
|
||||
走る はしる koşmak | fiil 1
|
||||
入れる いれる içine koymak | fiil 2
|
||||
教える おしえる öğretmek,anlatmak | fiil 2
|
||||
歩く あるく yürümek | fiil 1
|
||||
会う あう buluşmak | fiil 1
|
||||
畫く かく yazmak | fiil 1
|
||||
頭 あたま kafa,baş | isim
|
||||
売る うる satmak | fiil 1
|
||||
先月 せんげつ geçen ay | zarf
|
||||
体 からだ vücut, beden | isim
|
||||
直ぐ すぐ hemen | zarf
|
||||
飛ぶ とぶ uçmak | fiil 1
|
||||
- とても çok | zarf
|
||||
誰 だれ kim | soru
|
||||
好き すき sevmek, sevilen | sıfat na
|
||||
読む よむ okumak | fiil 1
|
||||
次 つぎ sonraki | isim, sıfat
|
||||
- あなた sen | zamir
|
||||
飲む のむ içmek | fiil 1
|
||||
古い ふるい eski | sıfat i
|
||||
質問 しつもん soru | isim
|
||||
今日 きょう bugün | zarf
|
||||
友達 ともだち arkadaş | isim
|
||||
早い はやい erken | sıfat i
|
||||
- どれ hangisi | soru
|
||||
美しい うつくしい güzel | sıfat i
|
||||
- いつも her zaman | zarf
|
||||
足 あし bacak, ayak | isim
|
||||
起こす おこす uyandırmak | fiil 1
|
||||
見せる みせる göstermek | fiil 2
|
||||
娘 むすめ kız evlat | isim
|
||||
楽しむ たのしむ eğlenmek, sevinmek | fiil 1
|
||||
色 いろ renk | isim
|
||||
取る とる almak, tutmak, çıkarmak | fiil 1
|
||||
勉強 べんきょう çalışma, öğrenme | isim
|
||||
- できる yapılmak, yapabilmek | fiil 2
|
||||
短い みじかい kısa | sıfat i
|
||||
- みんな herkes | isim
|
||||
落る おちる düşmek, sınavda kalmak | fiil 2
|
||||
息子 むすこ erkek evlat, oğul | isim
|
||||
白い しろい beyaz | sıfat i
|
||||
飛行機 ひこうき uçak | isim
|
||||
病気 びょうき hastalık | isim, sıfat
|
||||
冬 ふゆ kış | isim, zarf
|
||||
年 とし、ねん yıl, yaş | isim
|
||||
重い おもい ağır | sıfat i
|
||||
胸 むね göğüs | isim
|
||||
払う はらう ödemek | fiil 1 ; para
|
||||
軽い かるい hafif | sıfat i
|
||||
見つける みつける bulmak | fiil 2 ; 見付ける?
|
||||
忘すれる わすれる unutmak | fiil 2
|
||||
酒 さけ içki, alkol | isim
|
||||
- どちら hangisi, ne taraf, kim | soru
|
||||
姉 あね abla | isim
|
||||
覚える おぼえる ezberlemek, hatırlamak | fiil 2
|
||||
狭い せまい dar, küçük | sıfat i
|
||||
赤い あかい kırmızı | sıfat i
|
||||
着る きる giymek | fiil 2
|
||||
笑う わらう gülmek | fiil 1
|
||||
一番 いちばん en | zarf
|
||||
授業 じゅぎょう ders | isim
|
||||
週 しゅう hafta | isim
|
||||
漢字 かんじ kanji | isim
|
||||
自転車 じてんしゃ bisiklet | isim
|
||||
電車 でんしゃ tren | isim
|
||||
探す さがす aramak | fiil 1
|
||||
紙 かみ kağıt | isim
|
||||
歌う うたう şarkı söylemek | fiil 1
|
||||
遅い おそい geç | sıfat i
|
||||
首 くび boyun | isim
|
||||
速い はやい hızlı, çabuk | sıfat i
|
||||
一緒に いっしょに beraber | zarf
|
||||
今月 こんげつ bu ay | zarf
|
||||
遊ぶ あそぶ oynamak | fiil 1
|
||||
遠く とおく uzak | zarf
|
||||
弱い よわい zayıf, güçsüz | sıfat i
|
||||
耳 みみ kulak | isim
|
||||
座る すわる oturmak | fiil 1
|
||||
右 みぎ sağ | isim
|
||||
浴びる あびる duş almak, yıkanmak | fiil 2
|
||||
肩 かた omuz | isim
|
||||
寝る ねる uyumak, uyumaya gitmek | fiil 2
|
||||
消す けす söndürmek, kapatmak (elektrik) | fiil 1
|
||||
元気 げんき iyi, sağlıklı, enerjik | sıfat na
|
||||
全部 ぜんぶ hepsi, tüm | isim, zarf
|
||||
去年 きょねん geçen yıl | isim, zarf
|
||||
引く ひく çekmek, çıkarmak, çizmek | fiil 1
|
||||
図書館 としょかん kütüphane | isim
|
||||
上げる あげる yükseltmek, kaldırmak | fiil 2
|
||||
緑 みどり yeşil | sıfat na
|
||||
腕 うで kol | isim
|
||||
- ドア kapı | isim
|
||||
女の子 おんなのこ küçük kız çocuk, kız çocuk | isim
|
||||
男の子 おとこのこ küçük erkek çocuk, erkek çocuk, oğlan | isim
|
||||
私たち わたしたち biz | zamir
|
||||
近く ちかく yakın, yakın gelecek | zarf
|
||||
遣る やる yapmak, vermek | fiil 1
|
||||
国 くに ülke | isim
|
||||
- かなり epey, oldukça | zarf
|
||||
起こる おこる olmak, meydana gelmek | fiil 1
|
||||
秋 あき sonbahar | isim
|
||||
送る おくる göndermek | fiil 1
|
||||
死ぬ しぬ ölmek | fiil 1
|
||||
気持ち きもち hal, hissiyat, keyf | isim
|
||||
乗る のる binmek | fiil 1
|
||||
- いる var olmak, bulunmak | fiil 2 ; canlılar için
|
||||
木 き ağaç | isim
|
||||
開ける あける açmak | fiil 2 ; kapı, pencere...
|
||||
閉める しめる kapamak | fiil 2 ; ^
|
||||
続く つづく devam etmek, sürmek | fiil 1
|
||||
医者 いしゃ doktor | isim
|
||||
円 えん yen | isim
|
||||
- ここ bura, burası | zamir
|
||||
待つ まつ beklemek | fiil 1
|
||||
低い ひくい alçak | sıfat i ; yükselik olarak, 川の水位が低い (水位、すいい su seviyesi)
|
||||
- もらう almak | fiil 1
|
||||
食べる たべる yemek yemek | fiil 2
|
||||
兄 あに abi | isim
|
||||
名前 なまえ isim, ad | isim
|
||||
夫 おっと koca, eş | isim
|
||||
- すごい harika, epey, süper | sıfat i
|
||||
結婚 けっこん evlilik | isim
|
||||
親 おや ebeveyn, anne baba | isim
|
||||
話す はなす konuşmak | fiil 1
|
||||
少し すこし biraz | zarf
|
||||
閉じる とじる kapatmak | fiil 2
|
||||
時 とき zaman | isim
|
||||
米 こめ pirinç | isim
|
||||
切る きる kesmek | fiil 1
|
||||
楽しい たのしい eğlenceli, keyifli | sıfat i
|
||||
服 ふく elbise, kıyafet, giysi | isim
|
||||
後ろ うしろ arka | isim
|
||||
嬉しい うれしい mutlu | sıfat i
|
||||
腰 こし bel | isim
|
||||
日曜日 にちようび pazar | zarf
|
||||
昼 ひる öğlen, öğle | isim, zarf
|
||||
お母さん おかあさん anne | isim
|
||||
大学生 だいがくせい üniversite öğrencisi | isim
|
||||
終り おわり son, bitiş | isim
|
||||
背 せ boy, endam | isim
|
||||
手伝う てつだう yardım etmek | fiil 1
|
||||
鼻 はな burun | isim
|
||||
起きる おきる olmak, uyanmak | fiil 2
|
||||
悲しい かなしい üzgün, hüzünlü | sıfat i
|
||||
載せる のせる üzerine koymak, arabaya yüklemek | fiil 2
|
||||
喋る しゃべる konuşmak | fiil 1
|
||||
甘い あまい tatlı | sıfat i ; tat
|
||||
- テーブル masa | isim
|
||||
食べ物 たべもの yiyecek, gıda | isim
|
||||
始まる はじまる başlamak | fiil 1
|
||||
- ゲーム oyun | isim
|
||||
親切 しんせつ kibar, nazik | sıfat na
|
||||
天気 てんき hava | isim
|
||||
暑い あつい sıcak | sıfat i ; (hava)
|
||||
太い ふとい şişman, kalın | sıfat i
|
||||
; 231 furui 95 le aynı ??
|
||||
晩 ばん akşam | isim, zarf
|
||||
土曜日 どようび cumartesi | zarf
|
||||
痛い いたい acı | sıfat i
|
||||
お父さん おとうさん baba | isim
|
||||
多分 たぶん belki, galiba, muhtemelen | isim, zarf
|
||||
|
||||
|
||||
; ******************************
|
||||
; ekstra
|
||||
一 いち bir
|
||||
着物 きもの kimono
|
||||
家族 かぞく aile
|
||||
嫌い きらい nefret etmek
|
||||
映画 えいが film
|
||||
明日 あした yarın
|
||||
中国 ちゅうごく Çin
|
||||
簡単 かんたん kolay
|
||||
傘 かさ şemsiye
|
||||
間 あいだ arasında
|
||||
|
||||
来る きる gelmek
|
||||
止まり とまり durmak
|
||||
遅れる おくれる geç kalmak
|
||||
; sözlük haline bak
|
||||
; sözlük : jisho.org
|
||||
; quail-jp : /usr/local/share/emacs/29.4/lisp/leim/quail/
|
||||
158
okur.lisp
Normal file
158
okur.lisp
Normal file
@@ -0,0 +1,158 @@
|
||||
;;; **************************************************
|
||||
;;;; Kelimeler dosyasındaki tanımlı kelimeleri okuma *
|
||||
;;; **************************************************
|
||||
(in-package :japonca)
|
||||
|
||||
(defclass okur ()
|
||||
((dosya :accessor dosya :initarg :dosya)
|
||||
(metin :accessor metin)
|
||||
(durum :accessor durum :initform :baş)
|
||||
(i :accessor i :initform 0)
|
||||
(kelimeler :accessor kelimeler
|
||||
:initform (make-array 10 :adjustable t :fill-pointer 0))))
|
||||
|
||||
(defmethod metni-yükle ((okur okur))
|
||||
(setf (metin okur)
|
||||
(dosya-metni-oku (dosya okur))))
|
||||
|
||||
(defmethod metin-bitti? ((okur okur))
|
||||
(eq :son (durum okur)))
|
||||
|
||||
(defmethod ++kar ((okur okur))
|
||||
(incf (i okur))
|
||||
(if (array-in-bounds-p (metin okur) (i okur))
|
||||
(i okur)
|
||||
(setf (durum okur) :son)))
|
||||
|
||||
(defmethod kar++ ((okur okur))
|
||||
(let ((i (i okur)))
|
||||
(++kar okur)
|
||||
i))
|
||||
|
||||
(defmethod kar-oku ((okur okur))
|
||||
(unless (metin-bitti? okur)
|
||||
(char (metin okur) (kar++ okur))))
|
||||
|
||||
(defmethod kar-bak ((okur okur))
|
||||
(char (metin okur) (i okur)))
|
||||
|
||||
(defmethod boşluğa-kadar ((okur okur))
|
||||
(loop :until (or (metin-bitti? okur)
|
||||
(char= #\Space (kar-bak okur)))
|
||||
:do (++kar okur)))
|
||||
|
||||
(defmethod boşluk-geç ((okur okur))
|
||||
(loop :until (metin-bitti? okur)
|
||||
:do (let ((kar (kar-bak okur)))
|
||||
(if (char= #\Space kar)
|
||||
(kar-oku okur)
|
||||
(return)))))
|
||||
|
||||
(defmethod yeni-satıra-geç ((okur okur))
|
||||
(loop :until (metin-bitti? okur)
|
||||
:do (let ((kar (kar-oku okur)))
|
||||
(when (char= #\Newline kar)
|
||||
(return)))))
|
||||
;; (setf (durum okur) :yeni-satır)
|
||||
|
||||
;; (defparameter +öbek-son-ch+ '(#\Space #\Newline #\; #\, #\、))
|
||||
(defmethod sonraki-öbek ((okur okur) son-kar)
|
||||
(let ((baş (i okur)))
|
||||
(loop :until (metin-bitti? okur)
|
||||
:do (let ((kar (kar-bak okur)))
|
||||
(if (find kar son-kar :test #'char=)
|
||||
(loop-finish)
|
||||
(++kar okur)))
|
||||
:finally (loop :while (char= #\Space
|
||||
(char (metin okur)
|
||||
(- (i okur) 1)))
|
||||
:do (decf (i okur))))
|
||||
(make-array (- (i okur) baş)
|
||||
:element-type 'character
|
||||
:displaced-to (metin okur)
|
||||
:displaced-index-offset baş)))
|
||||
|
||||
(defmethod kanji-oku ((okur okur))
|
||||
(let ((öbek (sonraki-öbek okur '(#\Space))))
|
||||
(unless (string= "-" öbek)
|
||||
öbek)))
|
||||
|
||||
(defmethod kana-oku ((okur okur))
|
||||
(let ((öbek (sonraki-öbek okur '(#\Space #\、))))
|
||||
(boşluk-geç okur)
|
||||
(cons öbek
|
||||
(when (char= #\、 (kar-bak okur))
|
||||
(kar-oku okur)
|
||||
(boşluk-geç okur)
|
||||
(kana-oku okur)))))
|
||||
|
||||
(defmethod anlam-oku ((okur okur))
|
||||
(let ((öbek (sonraki-öbek okur '(#\, #\Newline #\; #\|))))
|
||||
(boşluk-geç okur)
|
||||
(cons öbek
|
||||
(when (and (not (metin-bitti? okur))
|
||||
(char= #\, (kar-bak okur)))
|
||||
(kar-oku okur)
|
||||
(boşluk-geç okur)
|
||||
(anlam-oku okur)))))
|
||||
|
||||
(defmethod kelime-oku ((okur okur))
|
||||
(let (kanji kana anlam grup altgrup)
|
||||
(setf kanji (kanji-oku okur))
|
||||
(boşluk-geç okur)
|
||||
(setf kana (kana-oku okur))
|
||||
(setf anlam (anlam-oku okur))
|
||||
(when (and (not (metin-bitti? okur))
|
||||
(char= #\| (kar-bak okur)))
|
||||
;; (yeni-satıra-geç okur)
|
||||
(kar-oku okur)
|
||||
(boşluk-geç okur)
|
||||
(setf grup (sonraki-öbek okur '(#\Newline #\Space #\; #\,)))
|
||||
(cond ((or (string= grup "fiil")
|
||||
(string= grup "sıfat"))
|
||||
(boşluk-geç okur)
|
||||
(setf altgrup (sonraki-öbek okur '(#\Newline #\Space #\;))))
|
||||
((char= #\, (kar-bak okur))
|
||||
(kar-oku okur)
|
||||
(boşluk-geç okur)
|
||||
(push (sonraki-öbek okur '(#\Newline #\Space #\;)) grup))))
|
||||
(make-instance 'kelime :kanji kanji :kana kana :anlam anlam
|
||||
:grup grup :altgrup altgrup)))
|
||||
|
||||
(defmethod işle ((okur okur))
|
||||
(unless (eq :baş (durum okur))
|
||||
(error "Okur zaten işlenmiş"))
|
||||
(loop :until (metin-bitti? okur)
|
||||
:do (case (kar-bak okur)
|
||||
(#\; (yeni-satıra-geç okur))
|
||||
(#\Newline (yeni-satıra-geç okur))
|
||||
(#\Space (boşluk-geç okur))
|
||||
(otherwise (vector-push-extend (kelime-oku okur)
|
||||
(kelimeler okur)))))
|
||||
(kelimeler okur))
|
||||
|
||||
(defmacro okurla ((isim dosya-ismi) &body beden)
|
||||
`(let ((,isim (make-instance 'okur :dosya ,dosya-ismi)))
|
||||
,@beden))
|
||||
|
||||
;; (defparameter *okur* nil)
|
||||
|
||||
;; (defun test-okuru-yap ()
|
||||
;; (setf *okur*
|
||||
;; (make-instance 'okur :dosya "/home/riton/projects/japonca/örnek.txt"))
|
||||
;; (metni-yükle *okur*))
|
||||
|
||||
|
||||
|
||||
;; (buffer :accessor buffer :initform (make-array 1028 :element-type 'character
|
||||
;; :fill-pointer 0))
|
||||
|
||||
;; (defmethod yeni-satır ((okur okur))
|
||||
;; (let* ((yeni-poz (position #\Newline (metin okur) :start (i okur)))
|
||||
;; (fark (- yeni-poz (i okur))))
|
||||
;; (setf (fill-pointer (buffer okur)) fark)
|
||||
;; (replace (buffer okur) (metin okur)
|
||||
;; :start1 0 :end1 fark
|
||||
;; :start2 (i okur) :end2 yeni-poz)
|
||||
;; (setf (i okur) (+ yeni-poz 1))
|
||||
;; (buffer okur)))
|
||||
2
paket.lisp
Normal file
2
paket.lisp
Normal file
@@ -0,0 +1,2 @@
|
||||
(defpackage :japonca
|
||||
(:use :common-lisp))
|
||||
46
sayı.lisp
Normal file
46
sayı.lisp
Normal file
@@ -0,0 +1,46 @@
|
||||
(let ((sayılar (vector "" "一" "二" "三" "四" "五" "六" "七" "八" "九" "十"))
|
||||
(basamaklar (vector "" "" "十" "百" "千" "万")))
|
||||
(defun sayı->yazılış (sayı &optional (stream *standard-output*))
|
||||
(labels ((öz (sayı basamak)
|
||||
(multiple-value-bind (sayı rakam) (truncate sayı 10)
|
||||
(when (> sayı 0)
|
||||
(öz sayı (+ basamak 1)))
|
||||
(case basamak
|
||||
(1 (format stream "~a" (aref sayılar rakam)))
|
||||
(t (case rakam
|
||||
(0)
|
||||
(1 (format stream "~a" (aref basamaklar basamak)))
|
||||
(t (format stream "~a~a"
|
||||
(aref sayılar rakam)
|
||||
(aref basamaklar basamak)))))))))
|
||||
(cond ((= sayı 0) (format stream "れい"))
|
||||
((> sayı 99999) (error "sayı->yazılış: sayı 99999 dan küçük olmalı"))
|
||||
(t (when (< sayı 0)
|
||||
(format stream "マイナス"))
|
||||
(öz (abs sayı) 1))))))
|
||||
|
||||
;; (defun sayı-sor (tip)
|
||||
;; (let* ((sayı (random 99999))
|
||||
;; (yazılış (with-output-to-string (str)
|
||||
;; (sayı->yazılış sayı str))))
|
||||
;; (case tip
|
||||
;; (:rakam
|
||||
;; (format t "~a hangi sayıdır? " yazılış)
|
||||
;; (let ((girdi (read)))
|
||||
;; (if (= girdi sayı)
|
||||
;; (format t "doğru.~%")
|
||||
;; (format t "yanlış, ~d." sayı))))
|
||||
;; (:yazılış
|
||||
;; (format t "~a nasıl yazılır? " sayı)
|
||||
;; (let ((girdi (string-left-trim '(#\Space) (read-line))))
|
||||
;; (if (string-equal girdi yazılış)
|
||||
;; (format t "doğru.~%")
|
||||
;; (format t "yanlış, ~d." yazılış)))))))
|
||||
|
||||
;; (let ((sayılar (vector "" "一" "二" "三" "四" "五" "六" "七" "八" "九" "十")))
|
||||
;; (declare (ignorable sayılar))
|
||||
;; (defun sayı->yazılış (sayı)
|
||||
;; (let (rakam)
|
||||
;; (loop :do (multiple-value-setq (sayı rakam) (truncate sayı 10))
|
||||
;; :collect rakam
|
||||
;; :while (> sayı 0)))))
|
||||
101
soru.lisp
Normal file
101
soru.lisp
Normal file
@@ -0,0 +1,101 @@
|
||||
(in-package :japonca)
|
||||
|
||||
(setf *random-state* (make-random-state t))
|
||||
|
||||
(defparameter *kelimeler* nil)
|
||||
(defparameter *kelimeler-dosyası* "/home/riton/projects/japonca/kelimeler.txt")
|
||||
|
||||
(defun kelimeleri-yükle (&optional (dosya *kelimeler-dosyası*))
|
||||
(setf *kelimeler*
|
||||
(okurla (okur dosya)
|
||||
(metni-yükle okur)
|
||||
(işle okur))))
|
||||
|
||||
(defun kullanıcı-cevap ()
|
||||
(let ((cevap (string-left-trim '(#\Space) (read-line))))
|
||||
(cond ((string= "" cevap) :çık)
|
||||
((string= "?" cevap) :kopya)
|
||||
((char= #\: (char cevap 0)) (read-from-string cevap))
|
||||
(t cevap))))
|
||||
|
||||
(defparameter *soru-sayısı* nil)
|
||||
|
||||
(defmethod kelime-soru :before (kelime tip)
|
||||
(when *soru-sayısı*
|
||||
(format t "~a. " *soru-sayısı*)))
|
||||
|
||||
(defmethod kelime-soru ((kelime kelime) (tip (eql :okunuş)) )
|
||||
(block soru
|
||||
(let (cevap sonuç)
|
||||
(format t "~a nasıl okunur ? " (kanji kelime))
|
||||
(setf sonuç (loop :do (case (setf cevap (kullanıcı-cevap))
|
||||
(:çık (return-from soru :çık))
|
||||
(:kopya (format t "anlam: ~{~a~^, ~} : " (anlam kelime)))
|
||||
(t (return (kana= kelime cevap))))))
|
||||
(when (not sonuç)
|
||||
(format t "yanlış. ~{~a~^、~} olmalı~%" (kana kelime)))
|
||||
sonuç)))
|
||||
|
||||
(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*))
|
||||
(when (not son)
|
||||
(setf son (length *kelimeler*)))
|
||||
(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)
|
||||
(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))))))
|
||||
|
||||
;; (defmacro soru-tanım (args &body beden)
|
||||
;; `(block soru
|
||||
;; (let (cevap sonuç)
|
||||
;; (format t "~a nasıl okunur ? " (kanji kelime))
|
||||
;; (setf sonuç
|
||||
;; (loop :do (case (setf cevap (kullanıcı-cevap))
|
||||
;; (:çık (return-from soru))
|
||||
;; (:kopya (format t "anlam: ~{~a~^, ~} : " (anlam kelime)))
|
||||
;; (t (return (kana= kelime cevap))))))
|
||||
;; (when (not sonuç)
|
||||
;; (format t "yanlış. ~{~a~^、~} olmalı~%" (kana kelime))))))
|
||||
;; (soru-tanım (kelime :okunuş)
|
||||
;; ;; (:doğru-cevap (kana kelime))
|
||||
;; (:soru "~a nasıl okunur ?" (kanji kelime))
|
||||
;; (:cevap
|
||||
;; (:kopya (format t "anlamı : ~a" (anlam kelime))
|
||||
;; (setf cevap (kullanıcı-cevap))))
|
||||
;; (:d "doğru.~%")
|
||||
;; (:y "yanlış, doğrusu ~s.~%" (kana kelime)))
|
||||
|
||||
;; (defmethod cevap-kontrol ((kelime kelime) cevap fn))
|
||||
;; (defmacro cevapla )
|
||||
|
||||
;; (defmethod kelime-soru ((kelime kelime) (tip (eql :okunuş)))
|
||||
;; (block soru
|
||||
;; (labels ((cevapla ()
|
||||
;; (let ((cevap (kullanıcı-cevap)))
|
||||
;; (case cevap
|
||||
;; (:çık (return))
|
||||
;; (:kopya (format t "anlam: ~{~a~^, ~} : " (anlam kelime))
|
||||
;; (cevapla))
|
||||
;; (t (kana= kelime cevap))))))
|
||||
;; (format t "~a. ~a nasıl okunur ? " *soru-sayısı* (kanji kelime))
|
||||
;; (loop :for cevap := (kullanıcı-cevap)
|
||||
;; :do (case cevap
|
||||
;; (:çık (return-from soru))
|
||||
;; (:kopya (format t "anlam: ~{~a~^, ~} : " (anlam kelime)))
|
||||
;; (t (return (kana= kelime cevap)))))
|
||||
;; (if (cevapla)
|
||||
;; (format t "doğru.~%")
|
||||
;; (format t "yanlış. ~{~a~^、~} olmalı~%" (kana kelime))))))
|
||||
39
util.lisp
Normal file
39
util.lisp
Normal file
@@ -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))
|
||||
Reference in New Issue
Block a user