格式 – Common Lisp:整数的基数英文数

Common Lisp为打印基数英文数字提供了可爱的~r指令.例如:

(format nil "~r" 27) -> "twenty-seven"

lisp是否提供了相反的指令(或某些库函数),从基数英文数字到整数值?我在Windows机器上使用Allegro CL.

编辑:我正在以更清洁的方式寻找这种类型的功能:

(defconstant +cardinal-number-map+
    (loop for number from 0 to 100
        collect (cons (format nil "~r" number) number)))

(defun cardinal->int (cardinal)
  (cdr (assoc cardinal +cardinal-number-map+ :test #'string-equal)))

最佳答案

Does lisp provide a directive (or some library function) that does the
reverse, from cardinal English numbers to integer values?

最简洁的答案是不”.您可以阅读不同的基数,但不能阅读英文文本.也就是说,做这种类型的阅读是一项很常见的练习,你可以在那里找到可以做到的代码.例如,在Code Golf网站上,有一个问题,Convert English to a number.我没有看到任何Lisp解决方案,但有一些简短的答案可以翻译而不会有太多麻烦. (Javascript answer很短,可能是一个很好的候选人.)

但是,由于格式的输出没有精确指定,因此不会有一个简单易用的解决方案可以用于每个实现的格式输出.为此,您可能需要执行类似于您在问题中建议的内容.

点赞