【问题标题】:Recursive search in SchemeScheme中的递归搜索
【发布时间】:2013-04-03 22:23:54
【问题描述】:

我目前遇到以下问题:

我有一个包含 n 个元素的数据库,我想进行递归搜索,以便获得所有可能的匹配项。

所以,可以说,我得到了第一个模式的 k 个匹配项。对于我发现的每 k 个匹配项,我使用下一个模式重新搜索数据库并获取新的关联列表 ....等等。这是我的问题,我无法制作一个能够给我所有结果的函数。

我实在想不出解决这个问题的“计划”。我总是想知道如何保存我当前的 assoc-list,同时,当我走到尽头时将其删除。

我的想法总结:如果我有一个 database=db 并且需要匹配 n 个模式。我从模式 0 开始,得到 k assoc-list 并且我想继续匹配模式 1 ,记住我有前一个的 k assoc-lists。我完成模式 1 并获得 M assoc-list ,对于每个 m assoc-list 我前进......最后我要么得到一个大小为 n(模式数)的 assoc-list 要么得到错误。

我真的只想要一些想法,这样我就可以越过这堵“砖墙”。请判断,刺伤,扼杀我的想法,任何事情。谢谢。

【问题讨论】:

    标签: recursion


    【解决方案1】:

    我不确定您是希望根据后续搜索缩小还是扩大搜索范围。这是扩展的伪代码:

    recursive_search (list_of_patterns)
      if is_empty(list_of_patterns)
        return empty_list
      pattern = pop_first(list_of_patterns)
      return query(pattern) + recursive_search(list_of_patterns)
    

    编辑以将您的模式与查询保持为 alist...我的方案 foo 很弱,但这里是:

    (define query_alist (lambda x)(x . query-exec(x)))
    
    (define r_query (lambda pattern__list)
      (cond
        ((null pattern_list) ())
        (else ((query_alist (first pattern_list) (r_query (rest pattern_list)))
      )
    ) 
    

    【讨论】:

    • 这就是我现在正在做的事情。我遇到的问题是,我想随身携带关联列表并扩展它们,所以最后,我得到了一个大的关联列表列表,其中包含尊重初始模式的所有元素。
    • 我没有尝试运行方案代码,所以它可能有问题,但这是否更接近您正在寻找的内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多