OCaml模式匹配整数

时间:2019-05-29 22:51:59

标签: pattern-matching ocaml

我有一个作业要填写以下代码存根:

let quad (x,y) = 
  match (x,y) with 
  | ... -> ...
  ...

其中quad函数应该以整数元组作为其参数,并返回表示坐标所处象限的代数数据类型。我确切地知道如何使用if子句来做到这一点,但是如何使用匹配呢?有没有办法将整数与其符号匹配?我知道我什至可以通过匹配符号函数的值来做到这一点。我可以编写一个函数sign,使sign 10 = 1sign (-10) = -1依此类推,然后匹配这些值,但是根据代码存根,我什至不应该这样做。有关如何完成此操作的任何提示?我应该只对0进行匹配,然后如果不为0,则在->之后使用if子句?还是使用匹配可以检测正整数和负整数?

1 个答案:

答案 0 :(得分:1)

丑陋的解决方案,但适合代码存根:)

let quad (x,y) = 
  match (x,y) with 
  | (0, 0) -> `Center
  | _ -> begin
    let sign = function
      | 0 -> 0
      | x -> if x < 0 then -1 else 1
    in
    match (sign x), (sign y) with
    | -1, -1 -> `LeftBottom
    | -1, 1 -> `LeftTop
    | 1, -1 -> `RightBottom
    | 1, 1 -> `RightTop
  end

(我会从不在现实生活中以这种方式解决任务)