使用关联列表和映射的方案功能
Scheme function using association lists and Mapping
我正在尝试在名为 allAssociation 的方案中创建一个函数。它有两个参数,一个符号列表和一个关联列表。调用此函数应该 return 一个数据列表,其中的元素对应于 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 将键的每个元素与关联列表匹配的逻辑。任何帮助将不胜感激,因为我对计划很陌生。谢谢。
基本上,您遍历 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)
我正在尝试在名为 allAssociation 的方案中创建一个函数。它有两个参数,一个符号列表和一个关联列表。调用此函数应该 return 一个数据列表,其中的元素对应于 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 将键的每个元素与关联列表匹配的逻辑。任何帮助将不胜感激,因为我对计划很陌生。谢谢。
基本上,您遍历 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)