簡體   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