如何在Scheme中找到乘法持久性
我试图在Scheme语言中找到一个数字的乘法持久性。持久性是指函数在继续之前可以应用的次数。例如,231变为如何在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)
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
,当它们相等时?
您可以返回值