Для этого метода я должен дублировать элементы списка, которые удовлетворяют условию, выраженному в операторе assert. Вот скелет:
let rec cond_dup l f =
(* YOUR CODE HERE *)
raise (Failure "Not implemented")
assert (cond_dup [3;4;5] (fun x -> x mod 2 = 1) = [3;3;4;5;5])
По какой-то причине мой код продолжает давать сбой, но я не понимаю, почему. В настоящее время я изучаю OCaml, но мне трудно понять его, особенно когда есть одно или несколько утверждений assert. Вот код, который я написал до сих пор:
let rec cond_dup l f =
(* YOUR CODE HERE *)
match l with
| [] -> []
|h::[] ->
if f h then h::h::[]
else h::[]
|h::t ->
if f h then h::h::(cond_dup t f)
else (cond_dup t f)
let f()= raise (Failure "Not implemented1")
let f() = assert (cond_dup [3;4;5] (fun x -> x mod 2 = 1) = [3;3;4;5;5])
;;
Please if you can tell me what I am doing wrong that would be great.