Files
japonca/sayı.lisp
2025-02-11 23:03:13 +03:00

47 lines
2.0 KiB
Common Lisp
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(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)))))