car とか cdr とか caddar とかの読み方

twitter での会話を勢いで実装してみた。

  • 最初の ca は「か」、cd は「くだ」
  • その後は a は「あ」、d は「だ」
  • 最後の r は「ー」
(defun pronounce (function)
  (let ((name (coerce (symbol-name function) 'list)))
    (unless (and (eql (first name) #\c)
                 (eql (car (last name)) #\r))
      #1=(error "その関数しらね: ~S" function))
    (with-output-to-string (ans)
      (format ans "~A" (case (second name)
                         (#\a "か")
                         (#\d "くだ")
                         (t #1#)))
      (dolist (char (nthcdr 2 name))
        (format ans "~A" (case char
                           (#\a "あ")
                           (#\d "だ")
                           (#\r "ー")
                           (t #1#)))))))
=> pronounce

(pronounce 'car)
=> "かー"

(pronounce 'cdr)
=> "くだー"

(pronounce 'caddar)
=> "かだだあー"

(pronounce 'caddr)
=> "かだだー"