Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scheme中找到乘法持久性_Scheme - Fatal编程技术网

如何在Scheme中找到乘法持久性

如何在Scheme中找到乘法持久性,scheme,Scheme,我试图在Scheme语言中找到一个数字的乘法持久性。持久性是指函数在继续之前可以应用的次数。例如,231变为2*3*1=6*1=6,持久性为2。我已尝试开始解决此问题,但无法继续/我不知道如何继续 (define (mp a) (define (num-digits n) (cond (( < n 10) 1) (else (+ 1 (num-digits (/ n 10)))))) (cond ((< a 10) 1)

我试图在Scheme语言中找到一个数字的乘法持久性。持久性是指函数在继续之前可以应用的次数。例如,231变为
2*3*1=6*1=6
,持久性为2。我已尝试开始解决此问题,但无法继续/我不知道如何继续

(define (mp a)
  (define (num-digits n)
    (cond (( < n 10) 1)
          (else
           (+ 1 (num-digits (/ n 10))))))
  (cond ((< a 10) 1)
        (else
         (floor (/ a (expt 10 (- (num-digits a) 1)))))))
(定义(mp a)
(定义(数字n)
(cond(
(mp 4098)


);上面的代码得到的是数字4,我考虑不断减少数字,这样我就可以得到每个数字。然而,这将使代码太长,我不确定我将如何继续从那里。如有任何帮助,我们将不胜感激。

您可以将此问题分成若干部分来解决

第一部分是制作一个简单的函数,将数字的位数相乘。例如:

(multiply-digits 231) ;=> 6
第二部分是制作一个函数,它接受一个函数和一个输入,并将函数应用于输入,直到它不变

(功能持久性fn x)

然后您可以这样定义乘性持久性:

(define (multiplicative-persistence x)
  (functional-persistence multiply-digits x))

要完成第(A)部分,您可以使用递归和
余数
函数将数字重复除以10。使用以值1开始的累加器参数将这些值相乘


要完成第(B)部分,您可以再次使用递归循环,并将新值
(fn x)
与旧值
x
进行比较,当它们
相等时?
您可以返回值。

您可以通过将其分成几个部分来解决此问题

第一部分是制作一个简单的函数,将数字的位数相乘。例如:

(multiply-digits 231) ;=> 6
第二部分是制作一个函数,它接受一个函数和一个输入,并将函数应用于输入,直到它不变

(功能持久性fn x)

然后您可以这样定义乘性持久性:

(define (multiplicative-persistence x)
  (functional-persistence multiply-digits x))

要完成第(A)部分,您可以使用递归和
余数
函数将数字重复除以10。使用以值1开始的累加器参数将这些值相乘

为了完成第(B)部分,您可以再次使用递归来循环并比较新值
(fn x)
与旧值
x
,当它们
相等时?
您可以返回值