SuguruDab
SuguruDab

Reputation: 11

Printing first letter of an atom Prolog

Print the first letter of two atoms in a list. I can't even get the first letter of one of the two atoms in the list to print.

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

?- grab_letter([apple,pie]).

true ? 

How do I get it to print "a"?

Upvotes: 1

Views: 470

Answers (1)

Paulo Moura
Paulo Moura

Reputation: 18663

The ISO Prolog standard specifies a sub_atom/5 built-in predicates that can decompose an atom into a sub-atom. The first argument is the atom, the second argument is the number of characters before the sub-atom, the third argument is the length of the sub-atom, the fourth argument is the number of characters after the sub-atom, and the fifth argument is the sub-atom. For example:

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

First = a
yes

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

First = p
yes

You can call this predicate from your code that processes the list containing the atoms. Can you give it a try and edit your question with the updated code?

Using in alternative the also standard atom_chars/2 predicate, as suggested in a comment, is not a good idea as it results in creating a temporary list (that will eventually be garbage-collected) just to access the first character.

Upvotes: 5

Related Questions