【问题标题】:List search in PrologProlog 中的列表搜索
【发布时间】:2012-05-24 03:31:03
【问题描述】:

我正在尝试在 Prolog 中的列表中进行搜索,但我想从某个位置开始。我必须做那个无聊的递归搜索吗?

谢谢。

【问题讨论】:

  • 列表在 Prolog 中是连续的。除非您有对中间列表位置的引用,否则您无法访问它,除非通过顺序斩首(也称为“无聊的递归搜索”)。

标签: list search recursion prolog


【解决方案1】:

您可以使用 N 个 free_vars 跳过 N 个位置,并 append/3 以摆脱列表的标题:

?- [user].
|: find(Needle, Haystack, Skip) :-
|:       length(Header, Skip),
|:       append(Header, Actual, Haystack),
|:       memberchk(Needle, Actual).
|: % user://1 compiled 0,04 sec, 2 clauses
true.

?- find(3-X,[1-alfa,2-beta,3-gamma,4-delta,1-abba,2-bridge],1).
X = gamma.

?- find(3-X,[1-alfa,2-beta,3-gamma,4-delta,1-abba,2-bridge],3).
false.

?- find(3-X,[1-alfa,2-beta,3-gamma,4-delta,1-abba,2-bridge],2).
X = gamma.

如果有很多要搜索的内容,列表构建length(Header, Skip) 最好一次完成...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多