Update: f4
and f5
should work as is in version 8. Variants of f1
, f2
and f3
that avoid the functions and forms that are only available in later versions are:
ClearAll[f1b, f2b, f3b]
f1b[l_List, {p__}] := Boole[MatchQ[#, {p, ___}] & /@ l]
f2b[l_List, p_List] := Boole[MatchQ[#[[;; Min[Length@#, Length@p]]], p] & /@ l]
f3b[l_List, p_List] := Boole[Equal[#[[;; Min[Length@#, Length@p]]], p] & /@ l]
b = {{0}, {1, 0, 1, 1, 1, 1, 1}, {0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {0, 1, 1},
{1, 0, 0}, {1, 0, 1}, {1, 1, 0}, {1, 1, 1}};
f1b[b, {0}]
{1, 0, 1, 1, 1, 1, 0, 0, 0, 0}
f1b[b, {1, 0}]
{0, 1, 0, 0, 0, 0, 1, 1, 0, 0}
Equal @@ (#[b, {0}] & /@ {f1b, f2b, f3b})
True
Original answer:
ClearAll[f1, f2, f3, f4, f5]
f1[l_List, {p__}] := Boole[MatchQ[{p, ___}] /@ l]
f2[l_List, p_List] := Boole[MatchQ[p] /@ l[[All, ;; UpTo@Length@p]]]
f3[l_List, p_List] := Boole[EqualTo[p] /@ l[[All, ;; UpTo @ Length@p]]]
f4[a_, {p__}] := Block[{f}, f[{p, ___}] = 1; f[_] := 0; f /@ a];
f5[a_, {p__}] := Replace[a, {{p, ___} :> 1, {__} :> 0}, 1]
f1[a, {0}]
{1, 1, 1, 1, 0, 0, 0, 0}
f1[a, {1, 0}]
{0, 0, 0, 0, 1, 1, 0, 0}
f5[a, {0}] == f4[a, {0}] == f3[a, {0}] == f2[a, {0}] == f1[a, {0}]
True
f3[a, {1, 0}] == f2[a, {1, 0}] == f1[a, {1, 0}]
True
b= {{0}, {1, 0, 1, 1, 1, 1, 1}, {0, 0, 0}, {0, 0, 1}, {0, 1, 0},
{0, 1, 1}, {1, 0, 0}, {1, 0, 1}, {1,1, 0}, {1, 1, 1}} ;
f1[b, {0}]
{1, 0, 1, 1, 1, 1, 0, 0, 0, 0}
f1[b, {0}] == f2[b, {0}] == f3[b, {0}] == f4[b, {0}] == f5[b, {0}]
True
f1[b, {1,0}]
{0, 1, 0, 0, 0, 0, 1, 1, 0, 0}
f1[b, {1, 0}] == f2[b, {1, 0}] == f4[b, {1, 0}] == f5[b, {1, 0}]
True