为什么以下代码有误? 即使前两个结果是正确的,但最后一个结果应该返回false,它返回true。为什么这样?
let rec is_sorted x = match x with
|h::h2::[] -> if h <= h2 then true else false
|h::h2::t -> if h <= h2 then is_sorted h2::t else false
# is_sorted [4;5;6;5;9];;
- : bool = false
# is_sorted [4;5;6;7;9];;
- : bool = true
# is_sorted [4;5;6;18;9];;
- : bool = true
答案 0 :(得分:1)
我将写下以下内容:
let rec is_sorted x = match x with
| [] -> true
| h::[] -> true
| h::h2::t -> if h <= h2 then is_sorted (h2::t) else false;;
然后:
# is_sorted [];;
- : bool = true
# is_sorted [1];;
- : bool = true
# is_sorted [4;5;6;5;9];;
- : bool = false
# is_sorted [4;5;6;7;9];;
- : bool = true
# is_sorted [4;5;6;18;9];;
- : bool = false
答案 1 :(得分:0)
稍短一些:
let rec is_sorted = function
| x::y::l -> x <= y && is_sorted (y::l)
| _ -> true
答案 2 :(得分:0)
这就是我要做的。
let rec sorted x =
match x with
| [] -> true
| [_] -> true
| a::b::t when a <= b -> sorted (b::t)
| _ -> false
;;