【问题标题】:How would I translate numbers to words in Scheme?我如何将数字转换为 Scheme 中的单词?
【发布时间】:2011-11-10 08:45:07
【问题描述】:

我们刚从大学的计划开始,我需要一些帮助来完成我的任务。

我们将编写一个将数字翻译成单词的程序,EG: 1 to "one"

它必须适用于 10 ^ 9 以内的所有数字。我不知道如何做到这一点。
我的基本想法是创建某种数组或列表,在其中我将这些数字定义为这样的词:

('ZERO', 0) ('ONE', 1) ('TWO', 2) ('THREE', 3) ('FOUR', 4) ('FIVE', 5) ('SIX', 6)
('SEVEN', 7) ('EIGHT', 8) ('NINE', 9) ('TEN', 10) ('ELEVEN', 11) ('TWELVE', 12)
('THIRTEEN', 13) ('FOURTEEN', 14) ('FIFTEEN', 15) ('SIXTEEN', 16)
('SEVENTEEN', 17) ('EIGHTEEN', 18) ('NINETEEN', 19) ('TWENTY', 20) ('THIRTY', 30)
('FORTY', 40) ('FIFTY', 50) ('SIXTY', 60) ('SEVENTY', 70) ('EIGHTY', 80) 
('NINETY', 90) ('HUNDRED', 100) ('THOUSAND', 1000) ('MILLION', 1000000) 
('BILLION', 1000000000) ('TRILLION', 1000000000000) 
('QUADRILLION', 1000000000000000)

然后以某种方式使用此列表检查输入值并用单词替换数字。

但实现这一点给我带来了一些麻烦。

困扰我的主要问题是,Scheme 是否可以处理子字符串,以及我是否可以制作一个列表,在其中将这些数字定义为单词(因此将 1 定义为一个)。

【问题讨论】:

  • 我对Scheme不熟悉,只能协助解决方案背后的逻辑。先看看能不能把 0 到 999 之间的数字转换成单词形式。然后按照自己的方式转换更大数量级的数字。此外,如果您以相反的顺序定义这些对可能会有所帮助,即 (0, 'zero') (1, 'one') 等。如果方案具有像 python 那样的字典结构,那么它真的有助于解决问题.

标签: numbers scheme words


【解决方案1】:
  • 您不能“作弊”并做(定义 1 个),因为 1 已经定义为一个数字 :)

  • 我认为你不需要担心这个问题中的子字符串,你是从子字符串中构建一个字符串,而不是相反......

    • 您确实需要一个字符串连接操作。我不记得他们是如何在方案中处理字符串的......

这里唯一的“硬”问题是您需要从英语中编码任意规则,所以......

//pseudocode, doing things the "dumb way" tons of ifs, aka cond
define to_str n = 
    if n == 1 then "one"
    ...
    if n == 3 then "thirteen"
    ..
    if 20 <= n < 30 then
       'twenty-' concatenated to  (to_str (n - 20))
    ...

在获得这样的版本后,您可以考虑通过类似于您在问题中提到的字典或关联列表来抽象重复的控制流。

【讨论】:

  • 感谢您的帮助。但是使用这个系统,我必须手动定义千万亿个数字,不是吗?
  • 问题是英语有千万亿个数字:P。您只需要大致使用您已经列出的那些数字(例如:查看我如何只需要为 20 定义“20-”前缀 - 最后一个数字由递归处理)。我的主要建议是首先尝试“硬编码”数字和逻辑,然后再尝试做一些更复杂的事情,比如将数字列表作为参数传递......
  • string-append 将连接两个字符串。也可以尝试查找assq
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多