繁体   English   中英

Scheme中的递归搜索

[英]Recursive search in Scheme

我目前遇到以下问题:

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

因此,可以说,我得到第一个模式的k个匹配项。 对于每找到的k个匹配项,我都会使用下一个模式重新搜索数据库,并获取新的关联列表....依此类推。 这是我的问题,我无法做一个能给我所有结果的函数。

我真的无法使自己想到解决这个问题的“计划”。 我一直想知道如何保存当前的assoc-list,并在结束时将其同时删除。

我的想法摘要:如果我有一个database = db并且需要匹配n个模式。 我从模式0开始,获取k个assoc-list,我想向前移动以匹配模式1,请记住我有前一个的k个assoc-list。 我完成模式1并得到M assoc-list,对于前进的每一个m assoc-list ...最后,我要么得到大小为n(模式数)的assoc-list,要么为false。

我真的只想要一些想法,这样我才能克服这堵“砖墙”。 请判断,刺,杀死我的想法,任何事情。 谢谢。

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

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)

编辑以使您的模式与查询保持一致...我的scheme-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)))
  )
) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM