我想解决的问题的描述如下, 注意:应该编写scheme函数并且能够在DrRacket中运行
make5 - 取两个整数,并返回一个5位整数,由第一个输入的最右边3位数和第二个输入的最左边2位数构成。例如,(make5 561432 254)将返回43225。
任何一个输入数字的负号都应该被忽略 - 也就是说,(make5 561432 -254)也会返回43225.
如果第一个数字少于三位数或最后三个数字以零开头,和/或第二个数字少于两位数,则您的函数应返回-2。注意:您可能想要定义一些辅助功能。
到目前为止我的代码就是这个,
(define (right-digits x)
(* (modulo abs x 1000) 100))
(define (left-digits y)
(modulo abs y 100))
(define (make5 x y)
(cond ((= (modulo abs x 10000) 0)
-2)
((= (modulo abs y 1000) 0)
-2)
(else make5(+ (* 100 (right-digits 3 x)) (left-digits 2 y)))))
当我用类似(make5 12345 6789)测试函数时,我收到一条错误,说“预期的参数数量与给定数字不匹配”,“预期2,给定3”。
所以在某个地方我搞砸了这个论点,但我找不到错误。 有关如何让这只小狗工作的任何帮助,请告诉我。还在学习,要温柔。
答案 0 :(得分:1)
您应首先测试辅助函数,然后在它们工作时向前迭代。我不会给你完整的源代码解决方案,因为你应该学到一些东西。两个提示:
(modulo abs x 1000)
,但模数函数需要两个参数,您正在移交三个。 答案 1 :(得分:0)
这似乎有点过时了:
(define (right-digits x)
(* (modulo abs x 1000) 100))
modulo
需要2个参数,abs
甚至不是数字。然而,它是一个函数,当应用于数字时,评估为绝对值。也许您实际上在考虑使用该功能?
(define (right-digits x)
(* (modulo (abs x) 1000) 100))
答案 2 :(得分:0)
添加围绕make5的另一个引用。这允许您调用函数并传递参数。
(else (make5( (* 100 (right-digits 3 x)) (left-digits 2 y))))))