2014-05-11 16 views
0

我想在列表中做一些操作,如果謂詞返回true。但謂詞在命令行中作爲輸入提供,它是一個函數。讓我舉個例子。如何控制謂詞是否在命令提示符下給出?

(define (delete-rows table predicate) 
    do_something) 

而命令行看起來像這樣。

(delete-rows student-table 
    (lambda (table row) 
     (eq? (get table row 'name) 'ali))) 
=> '(students (name id gpa) (ayse 2 3.7)) 

感謝您的幫助提前。

+0

你將不得不使用'read'和' eval'將其從文本轉換爲數據到代碼。 – leppie

回答

1

這是在拍一個很天真的和低效的實施,只是爲了讓你在正確的軌道上:

(define (list-index e lst) 
    (- (length lst) (length (memq e lst)))) 

(define (get table row col) 
    (list-ref row (list-index col (second table)))) 

(define (delete-rows table pred) 
    (list* (first table) 
     (second table) 
     (filter (lambda (r) (not (pred table r))) (cddr table)))) 

然後

(define student-table '(students (name id gpa) (ali 1 2) (ayse 2 3.7) (zalde 3 5))) 
(delete-rows student-table (lambda (table row) (eq? (get table row 'name) 'ali))) 
=> '(students (name id gpa) (ayse 2 3.7) (zalde 3 5)) 
相關問題