2013-06-05 31 views
1

我正在學習序言。如何在prolog中的列表中寫入元素,其中列表可能包含以大寫字母開頭的元素。在序言中的列表中寫入元素

例如:我謂詞my_write/1

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

但是,當我運行my_write([你是怎樣])。我得到[_G749,是,你]

我知道這與大寫字母開頭的單詞都在序言變量。

我知道你可以把這個單詞放在一個以引號中的大寫字母開頭的列表中,但是它可以做到這一點,而不必這樣做。

回答

2

我不認爲這是一個(更好)的方式來做到這一點,而不是my_write(['How', are, you]).

順便說一句,你需要引用不僅開始以大寫字母方面,也開始術語以下劃線符號,或名稱中有空格的術語。

+0

謝謝。我只知道你必須在大寫字母后面加上引號。那麼你如何在列表中將詞語轉換爲大寫。 – Ishan

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