1

我正在学习序言。如何在 prolog 中的列表中写入元素,其中列表可能包含以大写字母开头的元素。

例如:我有谓词my_write/1

我的写([])。 /* Base case: An empty list */

my_write([X|R]):- 写(X),nl,my_write(R)。 /* Recursive case: */

但是当我运行my_write([How, are, you]). 我得到[_G749,是,你]

我知道以大写字母开头的单词是序言中的变量。

我知道您可以将单词括在以大写字母开头的列表中,但是否可以不必这样做。

4

2 回答 2

2

我认为没有(更好的)方法可以代替my_write(['How', are, you]).

顺便说一句,您不仅需要引用以大写字母开头的术语,还需要引用以下划线符号开头的术语,或者名称中带有空格的术语。

于 2013-06-05T02:52:05.710 回答
1

SWI-Prolog 有code_type /2 来处理字符职责,语法不是很友好。

如果您需要将原子的第一个字母大写:

upcase_first_char(Plain, Proper) :-
    atom_codes(Plain, [First|Cs]),
    code_type(First, to_lower(Upcase)),
    atom_codes(Proper, [Upcase|Cs]).

产量

?- upcase_first_char(carlo, V).
V = 'Carlo'.

在您的情况下使用,例如

my_write([First|Rest]) :-
   upcase_first_char(First, Upper),
   maplist(writeln, [Upper|Rest]).

产量

?- my_write([how, are, you]).
How
are
you
于 2013-06-05T05:40:44.693 回答