使用关联列表和映射的Scheme函数

时间:2016-02-13 18:45:32

标签: dictionary recursion lambda scheme map-function

我试图在方案中创建一个名为allAssociation的函数。它包含2个参数,一个符号列表和一个关联列表。调用此函数应该返回一个数据列表,其中的元素对应于assoc-list的键。

以下是一个例子:

输入:

(allAssociation '(a c d) '((a allen)(b bob)(c (carl cooper))(d doug))) 

输出:

(allen (carl cooper) doug). 

我正在尝试使用map和lambda来实现这个功能,但我有点难过。

目前我有这段代码:

(define AllAssociation
  (lambda (key alist)
    (if (null? alist)
        '()
        [insert rest of logic]
           )))

但我正在努力实现使用map来匹配键的每个元素与关联列表的逻辑。任何帮助都会非常感激,因为我对计划很新。谢谢。

1 个答案:

答案 0 :(得分:1)

基本上,您遍历keys列表,并使用assoc检索列表lst中的第一个匹配元素。

如果您需要使用map(正如您的文字所示),那么这样的事情就可以了:

(define all-association
    (lambda (keys lst)
      (map (lambda (key) (cadr (assoc key lst)))
           keys)))

如果必须在没有map的情况下执行此操作(正如您的代码所示),则相当于:

(define all-association
  (lambda (keys lst)
    (if (null? keys)
        '()
        (cons (cadr (assoc (car keys) lst))
              (all-association (cdr keys) lst)))))

测试:

> (all-association '(a c d) '((a allen)(b bob)(c (carl cooper))(d doug)))
'(allen (carl cooper) doug)