Prolog 打印atom序言的第一个字母

Prolog 打印atom序言的第一个字母,prolog,Prolog,打印列表中两个原子的第一个字母。我甚至无法打印列表中两个原子之一的第一个字母 grab_letter([],[]). grab_letter([A],[B]) :- A = [First|_], B = [Second|_]. ?- grab_letter([apple,pie]). true ? 我怎样才能让它打印一张照片 ISO Prolog标准指定了一个sub_atom/5内置谓词,可以将一个原子分解为一个子原子。第一个参数是原子,第二个参数是子原子之前的字符数,第三个参数是子原

打印列表中两个原子的第一个字母。我甚至无法打印列表中两个原子之一的第一个字母

grab_letter([],[]).
grab_letter([A],[B]) :- A = [First|_], B = [Second|_]. 

?- grab_letter([apple,pie]).

true ? 

我怎样才能让它打印一张照片

ISO Prolog标准指定了一个sub_atom/5内置谓词,可以将一个原子分解为一个子原子。第一个参数是原子,第二个参数是子原子之前的字符数,第三个参数是子原子的长度,第四个参数是子原子之后的字符数,第五个参数是子原子。例如:

| ?- sub_atom(apple, 0, 1, _, First).

First = a
yes

| ?- sub_atom(pie, 0, 1, _, First).  

First = p
yes
您可以从处理包含原子的列表的代码中调用此谓词。你能试一下用更新的代码编辑你的问题吗


另一种选择是使用标准的atom_chars/2谓词,如注释中所建议的,这不是一个好主意,因为它会导致创建一个临时列表,最终只为了访问第一个字符而对其进行垃圾收集。

ISO Prolog标准指定了一个sub_atom/5内置谓词,可以将一个原子分解为一个子原子。第一个参数是原子,第二个参数是子原子之前的字符数,第三个参数是子原子的长度,第四个参数是子原子之后的字符数,第五个参数是子原子。例如:

| ?- sub_atom(apple, 0, 1, _, First).

First = a
yes

| ?- sub_atom(pie, 0, 1, _, First).  

First = p
yes
您可以从处理包含原子的列表的代码中调用此谓词。你能试一下用更新的代码编辑你的问题吗


在另一种选择中,使用标准的atom_chars/2谓词(如注释中所建议的那样)不是一个好主意,因为它会创建一个临时列表,最终只为了访问第一个字符而对其进行垃圾收集。

atom_chars/2是您的朋友!那么...怎么样有一个原子没有第一个字符。atom_chars/2是你的朋友!那么...怎么样有一个原子没有第一个字符。