Recursion DrRacket和递归语句二进制到十进制

Recursion DrRacket和递归语句二进制到十进制,recursion,racket,Recursion,Racket,我试图使用递归将输入为“1010”的二进制数转换为10。我似乎无法理解让它工作的语法 (定义(mod N M) (模N M)) (定义(二进制到十进制b) (let([s0]) (b)(s) (定义(辅助对象b和s) (如果(=b 0) (开始(+s0)) (begin(*+(mod b2)(expt2s)helper((/b10)+s1())) 谢谢 下面是一个简单的递归解决方案: (定义(bin->dec n) (如果(零?n) N (+(模n10)(*2(bin->dec(商n10‘‘‘

我试图使用递归将输入为“1010”的二进制数转换为10。我似乎无法理解让它工作的语法

(定义(mod N M)
(模N M))
(定义(二进制到十进制b)
(let([s0])
(b)(s)
(定义(辅助对象b和s)
(如果(=b 0)
(开始(+s0))
(begin(*+(mod b2)(expt2s)helper((/b10)+s1()))

谢谢

下面是一个简单的递归解决方案:

(定义(bin->dec n)
(如果(零?n)
N
(+(模n10)(*2(bin->dec(商n10‘‘‘‘‘)’)
测试:

>(bin->dec1010)
10
>(bin->dec101)
5.
>(bin->dec 10000)
16
如果您想将
“1010”
翻译成
10
(或
#b1010
#o12
#xa
),您可以实现
字符串-/code>

(定义(字符串->数字)
(let循环((acc 0)(n(字符串->列表字符串)))
(如果(空?n)
行政协调会
(循环(+*acc基数)
(让((a(n车)))
(-(字符->整数a)
(cond)(字符[0-9]

((字符(+s0)它有点像s,不是吗?但是,当它内置于Scheme中时,为什么你要手动实现
string->number
?@ChrisJester-Young我可以称之为
binstr->number
,并使其具体化,但既然我会使用
string->number
,我想我可以实现它。感觉就像实现
leng一样当学习计划时,th
列表
。此外,我正在计划一个编译器,这并不是难的部分,但使用
读取字符
实现
读取
可能是:-)简单的。我更喜欢这个答案。