当前位置:  开发笔记 > 编程语言 > 正文

Prolog - 在回溯上生成交替符号:[a]; [A,B].[A,B,A]; [A,B,A,B]

如何解决《Prolog-在回溯上生成交替符号:[a];[A,B].[A,B,A];[A,B,A,B]》经验,为你挑选了1个好方法。

我已经把我的思绪包裹了很多,无法理解.是否可以使用回溯生成以这种格式生成列表的脚本:

[a]
[a,b]
[a,b,a]
[a,b,a,b]
...

我已经制作了一个一次生成两个元素但我的头开始受伤试图制作一个产生"a",下一次"b"和下一个"a"等等.

这是一次两个元素的脚本:

ab([a]).
ab([b,a|T]):-ab([a|T]).
ab([a,b|T]):-ab([b|T]).

mat.. 8

在描述列表时,请始终考虑使用DCG表示法.

这使得它非常方便地集中在一个本质的你想描述的东西,没有那么多额外的变量和参数.

例如,考虑:

abs --> [a], abs_rest.

abs_rest --> [].
abs_rest --> [b], ( [] | abs ).

示例查询和答案:

?- phrase(abs, ABs).
ABs = [a] ;
ABs = [a, b] ;
ABs = [a, b, a] ;
ABs = [a, b, a, b] ;
ABs = [a, b, a, b, a] ;
ABs = [a, b, a, b, a, b] .

有关这种方便的形式主义的更多信息,请参阅dcg!



1> mat..:

在描述列表时,请始终考虑使用DCG表示法.

这使得它非常方便地集中在一个本质的你想描述的东西,没有那么多额外的变量和参数.

例如,考虑:

abs --> [a], abs_rest.

abs_rest --> [].
abs_rest --> [b], ( [] | abs ).

示例查询和答案:

?- phrase(abs, ABs).
ABs = [a] ;
ABs = [a, b] ;
ABs = [a, b, a] ;
ABs = [a, b, a, b] ;
ABs = [a, b, a, b, a] ;
ABs = [a, b, a, b, a, b] .

有关这种方便的形式主义的更多信息,请参阅dcg!

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有