String 在prolog中输入字符串

String 在prolog中输入字符串,string,prolog,String,Prolog,我对prolog相当陌生,并且是为家庭作业修改的gven代码。然而,我被困在输入刺痛。我知道prolgo中输入的字符串是ascii代码列表。 即abc=[97,98,99] 这是给定的代码 accept(W) :- start(S), path(S, W). path(S, []) :- final(S). path(S, [H|T]) :- arc(S, H, N), path(N, T). start(1). final(3). arc(1, a, 1). arc(1, b, 2). arc

我对prolog相当陌生,并且是为家庭作业修改的gven代码。然而,我被困在输入刺痛。我知道prolgo中输入的字符串是ascii代码列表。 即abc=[97,98,99]

这是给定的代码

accept(W) :- start(S), path(S, W).
path(S, []) :- final(S).
path(S, [H|T]) :- arc(S, H, N), path(N, T).
start(1).
final(3).
arc(1, a, 1).
arc(1, b, 2).
arc(2, a, 2).
arc(2, b, 3).
arc(3, a, 3). 
这是一个不确定的机器,有了字符串是如何实现的知识,我假设arc事实的变化类似于

arc(1, 97, 1).
arc(1, 98, 2).
arc(2, 97, 2).
arc(2, 98, 3).
arc(3, 97, 3). 
可以让我输入一串a和b,但这不起作用,有人能帮我怎么做吗?
谢谢

Prolog中的数据类型是数字、变量、原子和复合项。从概念上讲,Prolog认为字符串是原子,而不是字符代码列表。请阅读此处了解更多详细信息:

此外,如果您想了解更多有关从字符到ASCII码转换的信息,请阅读以下问题:

您可以通过给谓词一个列表来测试a和b的列表,以查看它们是否形成路径,例如:

accept([a,a,b,a]).

希望有帮助

您可以保持语法的可读性,并将字符代码转换为字符:

3 ?- maplist(char_code, W, "aabaabaaa"), accept(W).
W = [a, a, b, a, a, b, a, a, a] 

否则,字符文本的语法为

arc(1, 0'a, 1).
arc(1, 0'b, 2).
arc(2, 0'a, 2).
arc(2, 0'b, 3).
arc(3, 0'a, 3). 
更改后,或使用数字表示法arc1、97、1


同样要输入,您可以编写类似于accept[list of a's and b's]的内容,这就是为什么我认为作为ascii代码列表的字符串可以用于修改的arc。
arc(1, 0'a, 1).
arc(1, 0'b, 2).
arc(2, 0'a, 2).
arc(2, 0'b, 3).
arc(3, 0'a, 3). 
% /home/carlo/prolog/stackoverflow compiled 0.01 sec, 23 clauses
10 ?- read_line_to_codes(user_input, W), accept(W).
|: abab
W = [97, 98, 97, 98]