我是计划的初学者,我正在尝试学习一些算术递归。我似乎无法使用方案来完成这项工作并产生正确的结果。对于我的示例,我试图通过对字符串中的每个字符进行算术运算来为字符串生成一个整数键。在这种情况下,字符串是一个列表,例如:'(hello). 我需要执行的算术是:
对于字符串中的每个字符,执行 --> (33 * 常量 + 字母在字母表中的位置) 其中常量是输入,字符串作为列表输入。
到目前为止,我有这个:
(define alphaTest
(lambda (x)
(cond ((eq? x 'a) 1)
((eq? x 'b) 2))))
(define test
(lambda (string constant)
(if (null? string) 1
(* (+ (* 33 constant) (alphaTest (car string))) (test (cdr string)))
我正在尝试测试一个简单的字符串 (test '(ab) 2),但我无法产生正确的结果。我意识到我的递归一定是错误的,但我一直在玩弄它几个小时,每次都碰壁。任何人都可以为实现这种算术递归提供任何帮助吗?谢谢,麻烦您了。请记住,我是 Scheme 语言的业余爱好者 :)
编辑 我想通过使新常量 = (+ (* 33 常量) (alphaTest (car string))) 在字符串的每次迭代中更改输入的常量。我期望输入字符串 '(ab) 和常量 2 的输出应如下所示:
第一次迭代 '(a): (+ (* 33 2) (1)) = 67 sum = 67, 常数变为 67
第二次迭代 '(b): (+ (* 33 67) (2)) = 2213 sum = 2213 , 常数变为 2213
(test '(a b) 2) => 2280