Substring/Top and tail: Difference between revisions

Content added Content deleted
(Emacs Lisp: Simplify solution)
Line 1,398: Line 1,398:
echo substr("brooms", 1, -1), "\n"; // strip both first and last characters
echo substr("brooms", 1, -1), "\n"; // strip both first and last characters
?></lang>
?></lang>

=={{header|Picat}}==
Approach 1: Functions.
<lang Picat>go =>
test("upraisers"),
test("Δημοτική"),
nl.

test(S) =>
println(s=S),
println(butfirst=S.slice(2)),
println(butfirst=S.tail),
println(butfirst=S[2..S.len]),
println(butlast=S.but_last()),
println(butfirst_butlast=S.tail.but_last),
println(butfirst_butlast=slice(S,2,S.length-1)),
println(butfirst_butlast=[S[I] : I in 2..S.length-1]),
println(butfirst_butlast=S[2..S.length-1]),
nl.

but_last(S) = S.slice(1,S.length-1).</lang>

{{out}}
<pre>s = upraisers
butfirst = praisers
butfirst = praisers
butfirst = praisers
butlast = upraiser
butfirst_butlast = praiser
butfirst_butlast = praiser
butfirst_butlast = praiser
butfirst_butlast = praiser

s = Δημοτική
butfirst = ημοτική
butfirst = ημοτική
butfirst = ημοτική
butlast = Δημοτικ
butfirst_butlast = ημοτικ
butfirst_butlast = ημοτικ
butfirst_butlast = ημοτικ
butfirst_butlast = ημοτικ</pre>

Approach 2:
{{trans|Prolog}}
<lang Picat>go2 =>
test2("upraisers"),
nl,
test2("Δημοτική"),
nl.

test2(L) :-
L = [_|L1],
remove_last(L, L2),
remove_last(L1, L3),
writef("Original string : %s\n", L),
writef("Without first char : %s\n", L1),
writef("Without last char : %s\n", L2),
writef("Without first/last chars : %s\n", L3).
remove_last(L, LR) :-
append(LR, [_], L).</lang>

{{out}}
<pre>Original string : upraisers
Without first char : praisers
Without last char : upraiser
Without first/last chars : praiser

Original string : Δημοτική
Without first char : ημοτική
Without last char : Δημοτικ
Without first/last chars : ημοτικ</pre>



=={{header|PicoLisp}}==
=={{header|PicoLisp}}==