summaryrefslogtreecommitdiff
path: root/sayı.lisp
blob: 3cbb2731763ae8c750eb8daaedfe5ffadc09d483 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)))))