concat( строка1, строка2, строкаЗ)
(string,string,string):(i,i,i)(i,i,o)(i,o,i)(o,i,i)
В зависимости от конкретизации выполняется лексикографическая
операция строка1+строка2=строкаЗ.
frontchar( строка, первый_знак_строки,остаток_строки)
(string,char,string): (l,1, i)( i, i,o)( i,o; i)(o,1,l)(i,o,o)
В зависимости от конкретизации выполняется лексикографическая
операция строка = первы_знак_строки + остаток_строки.
Например, преобразование строки в список отдельных знаков и
наоборот:
domains .
charlist =char*
predicates
str_lst(string,charlist)
clauses
str..lst("", []):-!'
str_lst(S,[H|T]):-.
bound(S),!, /* имеется строка? */
frontchar(S,H,Rs),
str_lst(Rs,T).
str_lst(S,[H|T]):-
bound(H), /* имеется список знаков? */
str_lst(Rs,T),
frontchar(S,H,Rs).
После-запуска программы (Run) возможно указать разные цели:
Goal: str_lst("Это строка",X)
Х=[' Э',' т',' о',' ',' с',' т',' р',' о',' к',' а' ]
1 Solution (одно решение)
Goal: str_lst(X,[' з','н','а',' к',' и' ])
Х=знаки
1 Solution
Goal:<ESC> (ключ для выхода в главное меню)
frontstr(количество,строка,передняя_строка,остаток_строки)
(integer,string,string,string): (i,i,o,o)
Из указанной строки количество знаков возвращается в передней
строке, а остальные в остатке строки.
fronttoken(строка,токен,остаток_строки)
(string,string,string): (i,i,i)(i,i,o)(i,o,i)(o,i,i)(i,o,o)
В зависимости от конкретизации выполняется лексикографическая
операция строка = токен + остаток_строки. При этом один или
несколько знаков образуют токен в следующих случаях:
- они образуют имя Турбо-Пролога;
- они представляют целое или действительное число;
- знаки "+" и "-" являются отдельными знаками;
- имеется отдельно стоящий знак (кроме пробела).
Например fronttoken("это тест",Х,У) дает Х="это", Y=" тест".
str_len(строка,длина) ' .
(string,integer):(i,i)(i,o)
Проверяется (i,i) или возвращается (i,o) длина строки.