我如何将数字翻译成Scheme中的单词?

时间:2011-11-10 08:45:07

标签: numbers scheme words

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

我们将编写一个程序,将数字翻译成单词, EG:1到“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定义为1)。

1 个答案:

答案 0 :(得分:2)

  • 您不能“作弊”并且(定义1个)因为1已被定义为数字:)

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

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

这里唯一的“难”问题是你需要用英语编码arbritrary规则所以......

//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))
    ...

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