Выполнение запросов к списку списков в схеме

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

'((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 ответа

Как насчет запуска 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)

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

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

Джейсон

Другие вопросы по тегам