【发布时间】:2020-04-10 06:25:14
【问题描述】:
找到大于
start的第一个数字,这是2, 3, 4, 5, 6, 7, 8, 9, 10列表中最少b碱基的回文数。
我有一个函数可以转换以 b 为底的数字列表中的数字,以及一个检查列表是否为回文的函数。我不明白为什么我的“x”总是 0。
(define (num->base n b)
(if (= n 0)
'()
(append
(num->base (quotient n b) b)
(list (modulo n b)))))
(define (rev L)
(if (null? L) '() (append (rev (cdr L)) (list (car L)))))
(define (palindrome? L)
(equal? L (rev L)))
(define (first-b-pal start b)
(define x 0)
(for ([i '(2 3 4 5 6 7 8 9 10)])
(if (equal? (palindrome? (num->base start i)) #t)
(+ x 1)
(+ x 0)
)
)
(display start)
(display "\n")
(display x)
(display "\n")
(if (> x (+ b 1))
start
(first-b-pal (+ start 1) b)
)
)
我的想法是,检查有多少个碱基开始回文,如果大于 b 则返回数字,否则使用 start + 1 调用函数,我不明白为什么 x 永远不会递增..
【问题讨论】:
-
+不会增加任何东西,它只是计算一个总和。所以(+ x 1)不会增加x。 -
@Renzo 那么我应该如何处理它?
-
100是回文吗?00100是并且是100的有效表示。顺便说一句,您正在这样做x + 1。在 C# 或 JavaScript 中,这会增加x吗? -
@Sylwester 不,100 不是回文,不,但我不知道如何在 Racket 中使用
x += 1。 -
您基本上是在说回文数是奇数,因为偶数以
0结尾,并且您永远不会假设第一个非零数字前面的任何无限零都是一部分,因此不是以 2 为基数的回文。
标签: functional-programming racket