1

我想打印用户输入的名称代码

begin:-read(X),
      name(X,L),
      write('Name Code: '),
      beginStr(L).

beginStr([H|T]):-
                 
                 put(H),
                 beginStr(T).

beginStr([]):-nl.

下面的名称代码是我想要得到的输出,还有什么应该添加到我的代码中

| ?- begin.
|: 'Jenny Liz Ane'.
Name Code: JLA
yes


4

3 回答 3

0

我的第二种方法是搜索大写字母

capital(C):-
    member(C, ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']).
   
beginStrCapital(Name):-
    string_chars(Name,L),
    capitals(L).

capitals([]):-
    nl.
capitals([H|T]):-
    (    capital(H)
    ->   write(H)
    ;    true
    ),
    capitals(T).

?- beginStrCapital("Hello There.").
HT
true.

这个想法是遍历字母列表,如果字母是大写字母,则打印它。我找不到即时的字符数转换,所以我只是问一个字符是否是大写字母列表的成员。该程序不会像“Ludwig van Beethoven”那样检测非大写字母。

于 2020-12-27T09:38:46.527 回答
0

1-首先用户输入他/她的名字/中间名/姓氏。

2- 已读。

3- string_chars 将字符串分解为字符:peter 将变为 p,e,t,e,r

4- getFirstLetter Predicate 从列表中提取第一个元素:从 peter 我们得到 p。

5- upcase_atom 将小写字母转换为大写:p 将变为 P。

6- 使用 write 显示答案。

 k:- 
  write('Enter First name: '),nl, 
  read(FName),nl, 
  string_chars(FName,N1),
  getFirstLetter(N1,L1),
  upcase_atom(L1,Str1),
  
    
  write('Enter Middle name: '),nl, 
  read(MName),nl, 
  string_chars(MName,N2),
  getFirstLetter(N2,L2),
  upcase_atom(L2,Str2),
  
    
  write('Enter Last name: '),nl, 
  read(LName),nl, 
  string_chars(LName,N3),
  getFirstLetter(N3,L3),
  upcase_atom(L3,Str3),
  write(Str1),write(' '),write(Str2),write(' '),write(Str3).  

 getFirstLetter([H|_],H).

例子:

?-k.

Enter First name:
peter

Enter Middle name:
jane

Enter Last name:
mary

P J M
于 2020-12-26T20:54:54.950 回答
0

好的,我有两种不同的方法,因此有 2 个答案。
第一种方法:打印第一个字符和空格后的每个字符:

beginStrSpace(Name):-
    string_chars(Name,[H|T]),
    write(H),
    spaces(T).

spaces([]):-
    nl.
spaces([' ',H|T]):-
    !,
    write(H),
    spaces(T).
spaces([_|T]):-
    spaces(T).

?- beginStrSpace("Hello there").
Ht
true.

这个想法是将字符串拆分为字符列表并打印第一个字符。然后将继续字符列表。如果列表的当前头部是空格 ( ' '),则打印以下字符,然后继续执行其余字符。如果第一个字符不是空格,则谓词只会在其余列表中搜索,直到最终列表为空。

于 2020-12-27T09:34:25.983 回答