RosettaCodeData/Task/String-matching/Tailspin/string-matching-2.tailspin

37 lines
805 B
Plaintext

composer startsWith&{s:}
@: 0;
(<='$s;'>? -> @:1; <'.*'>) $@
end startsWith
composer endsWith&{s:}
@: 0;
(<ends|'.*'>) $@
rule ends: (<'.'>* <='$s;'> -> @:1;)
end endsWith
composer contains&{s:}
@: 0;
(<~='$s;'>? <='$s;'>? -> @:1; <'.*'>) $@
end contains
templates find&{s:}
when <?($ -> startsWith&{s:$s} <=1>)> do '$; starts with $s;' !
when <?($ -> endsWith&{s:$s} <=1>)> do '$; ends with $s;' !
when <?($ -> contains&{s:$s} <=1>)> do '$; contains $s;' !
otherwise '$s; cannot be found in $;' !
end find
'abcd' -> find&{s:'ab'} -> !OUT::write
'
' -> !OUT::write
'abcd' -> find&{s:'cd'} -> !OUT::write
'
' -> !OUT::write
'abcd' -> find&{s:'bc'} -> !OUT::write
'
' -> !OUT::write
'abcd' -> find&{s:'e'} -> !OUT::write
'
' -> !OUT::write
'banana' -> find&{s:'na'} -> !OUT::write