/// L1 ⊕k L2 = {w | (w = xy, x ∈ L1, y ∈ L2, |xy| 6 k) ∨ (w = γ, xy = γβ, x ∈ L1, y ∈ L2, |γ| = k)}. let plus k (L1 : List) (L2 : List ) = List.fold (fun (acc : list ) (x : string) -> (List.map (fun (y : string) -> if (x.Length + y.Length) < k then x + y else (x + y).Substring(0, k) ) L2 ) @ acc ) [] L1
хотя мне не нравится то, как пришлось использовать fold и @. это снижает его скорость к сожалению