我正在寻找Scheme中的一个函数,用一个值替换一个等式中的元素。
例如:'(+ a b c a)
(1 2 3)
应该给我'(+ 1 2 3 1)
。 (我不想解决这个等式,它只是一个例子)
基本上,我想说a = 1,b = 2,c = 3
要继续,我会在另一个列表中提取我的第一个列表的变量。 然后,我在另一个列表中收到了预期的值。 现在,我想为变量赋值。
有关我如何进行的任何提示? 非常感谢。
答案 0 :(得分:3)
您可以使用看似((a 1) (b 2) (c 3))
的映射“关联列表”。
assq
可以检索匹配对。因此,对于原始列表中的所有内容,您可以使用assq
进行查找,然后将其替换。
所以:
(lambda (ls a-list)
(map (lambda (x)
(let ((lookup (assq x a-list)))
(if lookup
(cadr lookup)
x)))
ls)))
将获取列表和关联列表,并将原始列表中的所有内容替换为替换(如果有)。
答案 1 :(得分:1)
这不是let
做的吗?
> (let ((a 1) (b 2) (c 3))
(+ a b c b))
=> 8
如果您不想评估表达式:
> (let ((a 1) (b 2) (c 3))
`(+ ,a ,b ,c ,a))
=> (+ 1 2 3 1)