2016-02-13 74 views
0

我正在嘗試在名爲allAssociation的方案中創建一個函數。它需要2個參數,一個符號列表和一個關聯列表。調用這個函數應該返回一個數據列表,其中包含與關聯列表的鍵相對應的元素。使用關聯列表和映射的方案功能

下面是一個例子:

輸入:

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

輸出:

(allen (carl cooper) doug). 

我試圖使用地圖和lambda來實現這個功能,但我有點爲難。

目前我有這個代碼片段:

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

但我與執行使用地圖匹配每一個與關聯列表的關鍵要素的邏輯掙扎。任何幫助將非常感謝,因爲我對計劃非常陌生。謝謝。

+1

對於在第一各要素e列表中,您想要在第二個列表中獲取與e相關聯的值。您可以在第一個列表中調用'map',並使用'assoc'在第二個列表中搜索。 – coredump

回答

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)