2013-10-27 23 views
1

使用地圖,我創建了一個名爲電影,滿足過程:在方案

(define movies-satisfying   
    (lambda (movies pred selector) 
     (map (pred movies)))) 

這是我如何調用該過程。

(movies-satisfying our-movie-database 
       (lambda (movie) 
       (= (movie-year-made movie) 1974)) 
       movie-title) 

電影標題=車。 我們的電影數據庫是一個電影數據庫。

從電影標題,導演,製作日期和演員開始,它會從數據庫返回大量電影信息。如何僅返回電影標題而不是整個列表?

這是目前獲取返回的內容:

(((amarcord) 
    (federico fellini) 
    1974 
    ((magali noel) (bruno zanin) (pupella maggio) (armando drancia))) 
+2

該代碼無法工作。你調用'map'的方式是錯誤的:它需要_two_參數。什麼是「選擇器」,爲什麼不被使用?你確定你不打算使用'filter'而不是'map'嗎?你應該發佈一個'our-movie-database'的實例,否則我們將無法重現這個問題。編輯問題並確保發佈的代碼編譯並自行運行,而不會丟失依賴關係 –

回答

2

這是不可能給出一個完美的答案不知道更多的代碼(在我的評論說),但我可以勾勒出答案,關鍵是做兩遍 - 當然,假設謂詞和選擇符都被正確定義。例如,在特定的搜索將是這樣的:

(map (lambda (movie) ; 2nd pass: obtain the names of the movies returned by 1st pass 
     (movie-title movie)) 
    (filter (lambda (movie) ; 1st pass: obtain only the movies of a given year 
       (= (movie-year-made movie) 1974)) 
      our-movie-database)) 

編寫以上的參數化功能,只需通過lambdas一起,作爲參數:

(define movies-satisfying   
    (lambda (movies pred selector) 
    (map selector (filter pred movies)))) 

另外要注意的是filter絕用於查找給定謂詞的匹配,map將始終返回與原始輸入列表大小相同的列表。

+1

非常感謝大綱,它解決了我的問題!很抱歉,簡單地說,你非常有幫助! – Ganondalf

+0

@ user2872793我的榮幸!如果你花時間把問題寫成一個[SSCCE](http://sscce.org) - 你可以得到更好,更快的答案 - 簡短的,獨立的,可編譯的例子 –