【问题标题】:Scheme function using association lists and Mapping使用关联列表和映射的方案函数
【发布时间】:2016-05-24 20:36:56
【问题描述】:

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

这是一个例子:

输入:

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

输出:

(allen (carl cooper) doug). 

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

目前我有这个sn-p的代码:

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

但我正在努力实现使用 map 将键的每个元素与关联列表匹配的逻辑。任何帮助将不胜感激,因为我对计划很陌生。谢谢。

【问题讨论】:

  • 对于第一个列表中的每个元素 e,您想要获取与第二个列表中的 e 关联的值。您可以使用在第二个列表中搜索 assoc 的函数在第一个列表中调用 map

标签: dictionary recursion lambda scheme map-function


【解决方案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)

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 2017-09-18
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多