Выполнение запросов к списку списков в схеме - PullRequest
0 голосов
/ 23 апреля 2011

Я застрял в середине моего проекта.У меня есть список списков, таких как:

'((a for apple) (b is book) (c in cat) (ronn live in NY))

Теперь я хочу сделать запрос в виде списка, чтобы он отображал правильную запись в моем списке списков.Например, если я введу '(a for what) или '(what in cat), отобразится (a for apple) или (c in cat).Если я введу '(ronn live in where), он покажет (ronn live in NY).

Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011
0 голосов
/ 23 апреля 2011

Как насчет запуска подпрограммы filter по списку и использования лямбда-объекта, инициализированного информацией о вашем запросе, которая затем будет применяться к списку, пока не найдет совпадение.

Так, например, у вас была бы лямда, которая выглядела бы как

(define (filter-object query)
    (define (query-function list-input)
        ;;do something here for query function that will take the initialized
        ;;query and match it against the list-input to see if there's a match
        ;;it should return #t or #f
    )

    ;;the return of the filter-object is the query function
    query_function) 

;;my-filter-function is initialized with a specific query
(define my-filter-function (filter-object '(a for what)))

Теперь с инициализированной filter-object запустите фильтр по вашему списку

(define (filter filter-function list-of-lists)
    (cond ((eq? list-of-lists '()) '())
          ((filter-function (car list-of-lists))
           (cons (car list-of-lists)
              (filter filter-function (cdr list-of-lists)))
          (else (filter filter-function (cdr list-of-lists))))

(filter my-filter-function my-list)

Это должно вернуть список совпадений из одного элемента (при условии, что вы не помещаете более одной копии в свой набор списков.

Надеюсь, это поможет,

Jason

...