Выполнение запросов к списку списков в схеме
Я застрял в середине моего проекта. У меня есть список списков, как:
'((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)
Это должно вернуть список совпадений из одного элемента (при условии, что вы не помещаете более одной копии в свой набор списков.
Надеюсь это поможет,
Джейсон
Лекция 4a, Сопоставление с образцом и подстановка на основе правил