44 lines
788 B
Plaintext
44 lines
788 B
Plaintext
{def S.in
|
|
{def S.in.r {lambda {:c :w :i :n}
|
|
{if {= :i :n}
|
|
then -1
|
|
else {if {W.equal? :c {W.get :i :w}}
|
|
then :i
|
|
else {S.in.r :c :w {+ :i 1} :n}}}}}
|
|
{lambda {:c :w}
|
|
{S.in.r :c :w 0 {W.length :w}}}}
|
|
-> S.in
|
|
|
|
|
|
|
|
{def startswith
|
|
{lambda {:w1 :w2}
|
|
{= {S.in _ {S.replace :w2 by _ in :w1}} 0}}}
|
|
-> startswith
|
|
|
|
{def endswith
|
|
{lambda {:w1 :w2}
|
|
{= {S.in _ {S.replace :w2 by _ in :w1}}
|
|
{- {W.length :w1} {W.length :w2}}}}}
|
|
-> endswith
|
|
|
|
{def isin
|
|
{lambda {:w1 :w2}
|
|
{S.in _ {S.replace :w2 by _ in :w1}}}}
|
|
-> isin
|
|
|
|
{startswith nabuchodonosor nabu}
|
|
-> true
|
|
{startswith nabuchodonosor abu}
|
|
-> false
|
|
|
|
{endswith nabuchodonosor sor}
|
|
-> true
|
|
{endswith nabuchodonosor oso}
|
|
-> false
|
|
|
|
{isin nabuchodonosor oso}
|
|
-> 10 // is in at 10
|
|
{isin nabuchodonosor xyz}
|
|
-> -1 // is not in
|