问题如下,它在http://www.cs.indiana.edu/classes/b551-leak/scheme_practice.html中找到。
问题定义:编写一个函数 cxr,它是 Scheme 中提供的 car/cdr 运算符的泛化。cxr 应该接受一个字符串 "a"s 和 "d"s 代表要执行的 car 和 cdr 操作的序列,并返回一个能够执行该序列的函数。
因此 (cxr "ad") 等价于函数 cadr。
((cxr "ad") '(i ii iii iv v vi vii)) ==> ii
(define sixth (cxr "addddd"))
(sixth '(i ii iii iv v vi vii)) ==> vi
我的尝试:我使用 string-append 将 cxr "ad" 转换为字符串 "cadr"。[这很简单] .. 现在我如何在“cadr”和 cadr 之间进行链接...我尝试了字符串-> 符号,但是输出被引用并且函数没有被执行。- 那么有什么方法可以取消引用?!
真正的问题:如何解决这个问题?
更新:感谢所有这些答案。它们都是正确的,我什至在发布问题之前就已经通过这种方式解决了。我主要是在寻找一种在输入为 (cxr adddd) 时实际调用 caddddr 的方法...... Everbody 的功能与 caddddr 相同,但实际上并未调用 cadddr。
也就是说,如何使函数具有与 cadr cadr 等相同的命名类型。
更新:(我想我找到了解决方案,它如下 - 但正如下面所说,它不适用于更长的 d):
(define cxr
(lambda (ad l)
( (eval (string->symbol (string-append "c" ad "r"))) l)
)
)