如何将断言条件应用于更改列表?
How to apply assert condition to change list?
对于此方法,我应该复制满足 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.
您的代码复制了满足谓词的元素。但它也应该保留不满足预测的元素不变。您正在删除这些元素。想想你的函数的最后一行。这就是删除(有效地)发生的地方。
(由于您的代码有效地复制了经过修改的列表,删除元素的方法就是不将其包含在副本中。这就是您正在做的。)
顺便说一句,assert
并没有什么特别或神秘的地方。它只是一行代码,用于测试您的函数是否适用于某个特定输入。如果断言失败,则说明您的函数有错误。
对于此方法,我应该复制满足 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.
您的代码复制了满足谓词的元素。但它也应该保留不满足预测的元素不变。您正在删除这些元素。想想你的函数的最后一行。这就是删除(有效地)发生的地方。
(由于您的代码有效地复制了经过修改的列表,删除元素的方法就是不将其包含在副本中。这就是您正在做的。)
顺便说一句,assert
并没有什么特别或神秘的地方。它只是一行代码,用于测试您的函数是否适用于某个特定输入。如果断言失败,则说明您的函数有错误。