2013-11-01 4 views

ответ

4

с небольшой помощью sub_atom/5, очень удобный ISO встроено:

?- sub_atom(abdef, _, 1, 0, C). 
C = f. 
+1

Отличное решение, я всегда узнаю о Prolog, прочитав ваши ответы. Я по-прежнему писал свою попытку, хотя она немного читаема :) – l4mpi

+0

Отличное решение! Большое спасибо. Я новичок в Prolog, я пытаюсь изучить все сам. Ты действительно помог мне, спасибо! – renatov

+1

@ l4mpi: спасибо. Я подробно просмотрел детали, особенно об отличиях в сравнении с строками ... – CapelliC

1

Вы можете использовать name и reverse, чтобы преобразовать строку в список и обратно:

last_char(S, X) :- 
    name(S, N), 
    reverse(N, [F|_]), 
    name(X, [F]). 

В зависимости на вашей версии Prolog вам, возможно, придется импортировать библиотеку list для предиката reverse, например :- use_module(library(lists)). для SICStus.

+0

Я также попытался использовать имя/2 и reverse/2, но он возвращает код char, а не сам символ. – renatov

+1

@renatov Вот почему я снова использовал 'name', чтобы преобразовать его. Вы можете использовать либо строку, либо список символов в качестве входного аргумента, а другую в качестве выходного аргумента. – l4mpi

Смежные вопросы