gpt4 book ai didi

prolog - 找出给定格式中所有可能的单词组合

转载 作者:行者123 更新时间:2023-12-02 06:31:39 25 4
gpt4 key购买 nike

我有 100 000 行长的字典:

w([w,o,r,d]).
w([h,a,p,p,y]).
w([q,u,e,s,t,i,o,n]).
...

现在我正在编写一个脚本,该脚本将返回满足给定格式的所有可能的单词。

例如:

w([A,B,C]), w([B,C]), A \== B, A \== C, B \== C.

我找到了使所有变量不同的来源:

alldif([]).
alldif([E|Es]) :-
maplist(dif(E), Es),
alldif(Es).

所以现在我打电话:

w([A,B,C]), w([B,C]), alldif([A,B,C]).

现在我希望变量 A 是 [a,e,i,o,t,l] 之一。我可以使用以下方法做到这一点:

member(A, [a,e,i,o,t,l]).

但是使用约束编程会更快吗(?):

A in [a,e,i,o,t,l]

all_different([A,B,C]).

我现在有点陷入困境。这个想法是在 .txt 文件中逐行生成所有可能的选项。

我设法使用以下方法将单词连接成语句:

g([A,B,C], W1), g([B,C], W2), alldif([A,B,C]), buildStat([W1,W2], Statement).

地点:

g(Format, Word):-
list_to_set(Format, Uniques),
alldif(Uniques),
w(Format),
atomic_list_concat(Format, '', Atom), atom_string(Atom, Word).

insertSpaces([A], [A]).
insertSpaces([Word | Rest], OutWords):-
insertSpaces(Rest, OutWordsRest),
OutWords = [Word, " " | OutWordsRest].


buildStat(Words, Statement):-
insertSpaces(Words, OutWords),
with_output_to(atom(Statement), maplist(write, OutWords)).

但我不知道如何将所有可能的语句逐行保存到文件中。如有帮助,我们将不胜感激。

最佳答案

发出所有解决方案的一个简单技巧是通过 false/0强制回溯

例如,假设您有一个谓词,可以产生回溯的所有解决方案:

?- solution(S).

您可以发出所有解决方案,如下所示:

?- solution(S),   print_solution(S),   false.

您必须在其中定义print_solution/1,因为您想要产生所需的格式。

例如,您可以将此类解决方案打印到标准输出,然后将输出通过管道传送到文件。具体细节取决于您的 Prolog 系统,可能如下所示:

$ prolog --goal 'ignore((solution(S),portray_clause(S),false)),halt' > output.txt

关于prolog - 找出给定格式中所有可能的单词组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44860119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com