bea*_*rzk 3 scheme numbers racket
我想计算Scheme中数字的位数总和.它应该像这样工作:
>(sum-of-digits 123)
6
Run Code Online (Sandbox Code Playgroud)
我的想法是将数字转换123为字符串"123",然后将其转换为列表'(1 2 3)然后用于(apply + '(1 2 3))获取6.
但不幸的是,它没有像我想象的那样工作.
>(string->list(number->string 123))
'(#\1 #\2 #\3)
Run Code Online (Sandbox Code Playgroud)
显然'(#\1 #\2 #\3)和'(1 2 3)... 不一样,因为我racket在DrRacket下使用语言,所以我不能使用像char->digit.
谁能帮我解决这个问题?
另一种方法是使用模数循环数字.我不习惯语法,但这里有一个在Lisp中用于非负整数的函数(并且有一点工作可能包含小数和负值):
(defun sum-of-digits(x)
(if (= x 0) 0
(+ (mod x 10)
(sum-of-digits (/ (- x (mod x 10)) 10)))))
Run Code Online (Sandbox Code Playgroud)