使用Prolog与列表和字符串进行模式匹配

使用Prolog与列表和字符串进行模式匹配,prolog,Prolog,一个开场白新手 我在网上找到了以下代码: string_to_list_of_characters(String, Characters) :- name(String, Xs), maplist( number_to_character, Xs, Characters ). number_to_character(Number, Character) :- name(Character, [Number]). 我想用它做一些模式匹配 这就是我迄今

一个开场白新手

我在网上找到了以下代码:

string_to_list_of_characters(String, Characters) :-
     name(String, Xs),
     maplist( number_to_character,
        Xs, Characters ).
number_to_character(Number, Character) :-
     name(Character, [Number]).
我想用它做一些模式匹配

这就是我迄今为止所尝试的:

wordH1(H1) :-
    word(H1),
    string_length(H1,6),
    string_to_list_of_characters(H1, X) = a,_,_,_,_,_.

我想得到所有长度为6且以a开头的字符串。

您似乎正在使用一些非常古老的学习资源。您可以直接使用内置的
atom\u字符
,而不是自己将此
string\u写入\u字符列表中:

?- atom_chars(apple, Chars).
Chars = [a, p, p, l, e].

?- atom_chars(amazon, Chars).
Chars = [a, m, a, z, o, n].
对于模式匹配,您可以编写类似于您尝试这样做的列表,但需要在元素周围使用方括号。您也不会像在其他编程语言中那样在“函数应用程序表达式”之类的对象上进行模式匹配。而是应用一个谓词,然后编写一个单独的统一。所以它不是像原子字符(A,B)=某个东西,而是:

?- atom_chars(apple, Chars), Chars = [a,_,_,_,_,_].
false.

?- atom_chars(amazon, Chars), Chars = [a,_,_,_,_,_].
Chars = [a, m, a, z, o, n].

你似乎在使用一些非常古老的学习资源。您可以直接使用内置的
atom\u字符
,而不是自己将此
string\u写入\u字符列表中:

?- atom_chars(apple, Chars).
Chars = [a, p, p, l, e].

?- atom_chars(amazon, Chars).
Chars = [a, m, a, z, o, n].
对于模式匹配,您可以编写类似于您尝试这样做的列表,但需要在元素周围使用方括号。您也不会像在其他编程语言中那样在“函数应用程序表达式”之类的对象上进行模式匹配。而是应用一个谓词,然后编写一个单独的统一。所以它不是像原子字符(A,B)=某个东西,而是:

?- atom_chars(apple, Chars), Chars = [a,_,_,_,_,_].
false.

?- atom_chars(amazon, Chars), Chars = [a,_,_,_,_,_].
Chars = [a, m, a, z, o, n].

问题是什么?问题是什么?谢谢,我写了更多的代码<代码>交叉词(H1,H2,V1,V2):-单词(H1),单词(H2),单词(V1),单词(V2),单词(H2)\=单词(V2),单词(H1)\=单词(V1),字符串长度(H1,6),字符串长度(H2,5),字符串长度(V1,4),字符串长度(V2,5)。
我想做的是使用atom\u char进行匹配,例如,H1的第三个字母到V1的第四个字母。我可以在程序文件中使用它吗?我想你的建议是写原子字符。。。在候机楼。对吗?您可以在程序文件的定义中使用atom\u chars,是的。谢谢,我已经编写了更多的代码<代码>交叉词(H1,H2,V1,V2):-单词(H1),单词(H2),单词(V1),单词(V2),单词(H2)\=单词(V2),单词(H1)\=单词(V1),字符串长度(H1,6),字符串长度(H2,5),字符串长度(V1,4),字符串长度(V2,5)。
我想做的是使用atom\u char进行匹配,例如,H1的第三个字母到V1的第四个字母。我可以在程序文件中使用它吗?我想你的建议是写原子字符。。。在候机楼。对吗?您可以在程序文件的定义中使用原子字符,是的。