2016-10-13 107 views
1

的名單上一個結構的領域應用過濾器請在下面找到我的代碼片段:球拍:在結構

(define (try los) 
    (filter (string=? (person-name (first los)) "Mike") los)) 

我在這裏得到一些語法錯誤。我不知道如何在結構列表中的結構的1個特定字段上應用過濾器。 (注意:我不想使用遞歸)。有人可以給我一個相同的例子,或幫助我糾正我想在這裏做什麼?

+0

注意:los是'Person'的列表,其中person被定義爲結構 – user3868051

回答

1

您需要過濾器來定義lambda表達式:

(filter 
    (lambda(x) (string=? (person-name x) 
         "Mike")) 
    los) 

這樣的lambda函數是非常有用的,並常與 '地圖', 'ormap', 'andmap', '過濾器' 使用,「每個','應用','memf','findf','foldl','foldr'等,以對給定列表的每個成員進行操作。查看here許多示例(搜索lambda)。

1

一個簡單的解決方案是創建一個幫助函數mike?,它接受一個人struct s並檢查名稱是否爲"Mike"

(define (mike? s) 
    (string=? (person-name s) "Mike") 

(define (try los) 
    (filter mike? los))