我有一个作业要填写以下代码存根:
let quad (x,y) =
match (x,y) with
| ... -> ...
...
其中quad
函数应该以整数元组作为其参数,并返回表示坐标所处象限的代数数据类型。我确切地知道如何使用if子句来做到这一点,但是如何使用匹配呢?有没有办法将整数与其符号匹配?我知道我什至可以通过匹配符号函数的值来做到这一点。我可以编写一个函数sign
,使sign 10 = 1
和sign (-10) = -1
依此类推,然后匹配这些值,但是根据代码存根,我什至不应该这样做。有关如何完成此操作的任何提示?我应该只对0进行匹配,然后如果不为0,则在->
之后使用if子句?还是使用匹配可以检测正整数和负整数?
答案 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
(我会从不在现实生活中以这种方式解决任务)