Functional programming 重写代码以减少Scheme中的过程

Functional programming 重写代码以减少Scheme中的过程,functional-programming,scheme,procedure,Functional Programming,Scheme,Procedure,我写了一个程序,给定两个指定一个范围的数字,应该返回该范围内的数字计数,这些数字以八进制形式表示,由许多相同的数字组成。例如,72->111符合此标准,因为所有数字都相同。输出示例: HW118->7,HW119->8,HW1118->9,HW1165->14等等 我的问题是,为了正确,我的程序必须只定义2个过程,而目前我有更多的过程,不知道如何减少它们。因此,欢迎您提供有关重写代码的任何帮助:。代码如下: 您可能有限制,并且没有说明正在使用的方案实现;下面是一个在球拍和诡计上测试过的例子: (

我写了一个程序,给定两个指定一个范围的数字,应该返回该范围内的数字计数,这些数字以八进制形式表示,由许多相同的数字组成。例如,72->111符合此标准,因为所有数字都相同。输出示例:

HW118->7,HW119->8,HW1118->9,HW1165->14等等

我的问题是,为了正确,我的程序必须只定义2个过程,而目前我有更多的过程,不知道如何减少它们。因此,欢迎您提供有关重写代码的任何帮助:。代码如下:


您可能有限制,并且没有说明正在使用的方案实现;下面是一个在球拍和诡计上测试过的例子:

(define (hw11 a b)
  (define (iter i count)
    (if (<= i b)
        (let* ((octal (string->list (number->string i 8))) 
               (allc1 (make-list (length octal) (car octal))))
          (iter (+ i 1) (if (equal? octal allc1) (+ count 1) count)))
        count))
  (iter a 0))

您的代码未编译且未格式化。如果没有正确的标识,LISP代码将无法读取。现在,您可以很容易地看到SameGits有一些错误。如果过早结束,则一个括号将结束内部。如果使用括号匹配的IDE或编辑器,则不会发生这种情况。
(define (hw11 a b)
  (define (iter i count)
    (if (<= i b)
        (let* ((octal (string->list (number->string i 8))) 
               (allc1 (make-list (length octal) (car octal))))
          (iter (+ i 1) (if (equal? octal allc1) (+ count 1) count)))
        count))
  (iter a 0))
> (hw11 1 8)
7
> (hw11 1 9)
8
> (hw11 1 18)
9
> (hw11 1 65)
14