在计划中将数字分成三组

时间:2014-02-06 04:09:07

标签: list scheme

我正在尝试创建一个函数,该函数接收一个数字并将其分成三个一组:(group of of 3 12345) - > '(12 345)

这是我一直在研究的代码:

(define (group-of-three n)
  (cond ((< n 1000) n))
  (cond ((> n 1000) 
         (cons (group-of-three (quotient n 1000)) (remainder n 1000)))))

当我打电话(三人组9999)时,我得到'(#。999)

任何帮助都会非常感激,我对计划很新,所以我确信解决方案可能非常简单,我只是没有看到它。

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题:

  • cond使用不当,需要一个cond,并且有两个相互排斥的条件。或者甚至更简单,使用if表达式
  • 递归的基本情况是错误的,请记住:我们正在构建一个列表,因此结果必须以空列表结尾
  • 要以正确的顺序输出列表,输入的数字应该从右到左处理。如果我们使用带有额外参数的辅助程序来累积结果,这样做会更容易 - 顺便说一句,这将产生尾递归解决方案。或者,我们可以使用名为let
  • 的名称

这就是我的意思:

(define (group-of-three n)
  (helper n '()))

(define (helper n acc)
  (cond ((< n 1000) (cons n acc))
        (else (helper (quotient n 1000)
                      (cons (remainder n 1000) acc)))))

按预期工作:

(group-of-three 12345)
=> '(12 345)

(group-of-three 12345678)
=> '(12 345 678)