1 prolog
打印列表中两个原子的第一个字母。我什至无法打印列表中两个原子之一的第一个字母。
grab_letter([],[]).
grab_letter([A],[B]) :- A = [First|_], B = [Second|_].
?- grab_letter([apple,pie]).
true ?
Run Code Online (Sandbox Code Playgroud)
我如何让它打印“a”?
ISO Prolog 标准指定了sub_atom/5
可以将原子分解为子原子的内置谓词。第一个参数是原子,第二个参数是子原子前的字符数,第三个参数是子原子的长度,第四个参数是子原子后的字符数,第五个参数是参数是子原子。例如:
| ?- sub_atom(apple, 0, 1, _, First).
First = a
yes
| ?- sub_atom(pie, 0, 1, _, First).
First = p
yes
Run Code Online (Sandbox Code Playgroud)
您可以从处理包含原子的列表的代码中调用此谓词。您可以尝试使用更新后的代码编辑您的问题吗?
替代地atom_chars/2
,如评论中所建议的那样,使用标准谓词并不是一个好主意,因为它会导致创建一个临时列表(最终将被垃圾收集)只是为了访问第一个字符。