Running queries against a list of lists in Scheme

烈酒焚心 提交于 2019-12-20 07:38:02

问题


I'm stuck in the middle of my project. I have a list of lists like:

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

Now I want to make a query in the form of a list and have it display the correct entry in my list of lists. For example, if I input '(a for what) or '(what in cat) it will display (a for apple) or (c in cat). If I input '(ronn live in where) it will show (ronn live in NY).

Can anyone help me solve this problem?


回答1:


How about running a filter routine across the list, and using a lambda object initialized with your query information that will then be applied to the list until it finds a match.

So for instance, you would have a lamda that would look something like

(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)))

Now with the filter-object initialized, run a filter across your list

(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)

This should return a one-element list of the matches (providing you aren't placing more than one copy in your list set.

Hope this helps,

Jason




回答2:


Structure and Interpretation of Computer Programs, Video Lectures by Hal Abelson and Gerald Jay Sussman

Lecture 4a, Pattern Matching and Rule-based Substitution



来源:https://stackoverflow.com/questions/5765313/running-queries-against-a-list-of-lists-in-scheme

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!