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很短,可能是一个很好的候选人.)
但是,由于格式的输出没有精确指定,因此不会有一个简单易用的解决方案可以用于每个实现的格式输出.为此,您可能需要执行类似于您在问题中建议的内容.