什么是嵌套模式?我无法理解为什么以下嵌套模式:
exception BadTriple
fun zip3 list_triple =
case list_triple of
([],[],[]) => []
| (hd1::tl1,hd2::tl2,hd3::tl3) => (hd1,hd2,hd3)::zip3(tl1,tl2,tl3)
| _ => raise BadTriple
fun unzip3 lst =
case lst of
[] => ([],[],[])
| (a,b,c)::tl => let val (l1,l2,l3) = unzip3 tl
in
(a::l1,b::l2,c::l3)
end
Run Code Online (Sandbox Code Playgroud)
另外,我无法理解嵌套模式和嵌套case-expression之间有什么不同我可以得到一些关于这些事情的例子吗?
long cread(long *xp) {
return (xp? *xp : 0);
}
Run Code Online (Sandbox Code Playgroud)
它无效,因为它可能尝试从空地址读取
所以解决方案建议使用此代码
long cread_alt(long *xp){
long tem = 0;
if(*xp > 0){
tem = *xp;
}
return tem;
Run Code Online (Sandbox Code Playgroud)
但我认为它也无效,因为if(*xp > 0)当xp指向空地址时仍然有缺陷.
所以我想到了这段代码
long cread_alt2(long *xp){
long tem = 0;
if(xp != NULL){
tem = *xp;
}
return tem;
}
Run Code Online (Sandbox Code Playgroud)
我有这个吗?