List 在Scheme中将数字分成三组
我试图创建一个函数,它接受一个数字并将其分成三组:(三组12345)->'(12345) 这是我一直在研究的代码:List 在Scheme中将数字分成三组,list,scheme,List,Scheme,我试图创建一个函数,它接受一个数字并将其分成三组:(三组12345)->'(12345) 这是我一直在研究的代码: (define (group-of-three n) (cond ((< n 1000) n)) (cond ((> n 1000) (cons (group-of-three (quotient n 1000)) (remainder n 1000))))) (定义(三人一组) (秒(n 1000) (cons(三人组(商n1000))(
(define (group-of-three n)
(cond ((< n 1000) n))
(cond ((> n 1000)
(cons (group-of-three (quotient n 1000)) (remainder n 1000)))))
(定义(三人一组)
(秒(n 1000)
(cons(三人组(商n1000))(余数n1000(щ)))
当我打电话给(三人组9999)时,我得到“(#.999)
如果有任何帮助,我将不胜感激。我对scheme非常陌生,因此我确信解决方案可能非常简单,我只是没有看到它。您的代码有几个问题:
使用不正确,需要一个cond
,有两个相互排斥的条件。或者更简单,使用cond
表达式if
- 递归的基本情况是错误的,请记住:我们正在构建一个列表,因此结果必须以空列表结束
- 为了以正确的顺序输出列表,输入的数字应该从右到左进行处理。如果我们使用带有额外参数的helper过程来累加结果,这将更容易做到——顺便说一句,这将产生一个尾部递归解决方案。或者,我们可以使用命名的
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)