Sml 标准ML:如何在函数中执行另一个函数?
目前,我的代码如下所示:Sml 标准ML:如何在函数中执行另一个函数?,sml,Sml,目前,我的代码如下所示: fun gradImage () = let val iImg = Gdimage.image(640,480) (0,0,0); val void = mapi gradient iImg; in Gdimage.toPng iImg "gradient.png" end; mapi是一个类型为intint->intint*int->image->unit的函数。基本上,它对提供的图像进行操作 val void
fun gradImage () =
let val iImg = Gdimage.image(640,480) (0,0,0);
val void = mapi gradient iImg;
in
Gdimage.toPng iImg "gradient.png"
end;
mapi是一个类型为intint->intint*int->image->unit的函数。基本上,它对提供的图像进行操作
val void=…,函数看起来很难看
我怎样才能消除这种情况呢?我已经十年没有使用SML了,但我相信您需要的是:
fun gradImage () =
let val iImg = Gdimage.image(640,480) (0,0,0)
in
ignore (mapi gradient iImg);
Gdimage.toPng iImg "gradient.png"
end;
我已经十年没有使用SML了,但我相信您需要的是:
fun gradImage () =
let val iImg = Gdimage.image(640,480) (0,0,0)
in
ignore (mapi gradient iImg);
Gdimage.toPng iImg "gradient.png"
end;
在let表达式中,可以有一个介于in和end之间的表达式列表。这样您就可以将代码重写为
fun gradImage () =
let
val iImg = Gdimage.image(640,480) (0,0,0)
in
mapi gradient iImg;
Gdimage.toPng iImg "gradient.png"
end;
我假设mapi修改了iImg,因为代码似乎是这样写的。这听起来不太实用;让mapi返回修改后的图像会让人感觉更自然,但从我看到的Gdimage界面来看,它看起来像是在那里完成的,而且从效率的角度来看,我理解这可能更好。您可以在let表达式的in和end之间有一个表达式列表。这样您就可以将代码重写为
fun gradImage () =
let
val iImg = Gdimage.image(640,480) (0,0,0)
in
mapi gradient iImg;
Gdimage.toPng iImg "gradient.png"
end;
我假设mapi修改了iImg,因为代码似乎是这样写的。这听起来不太实用;让mapi返回修改后的图像会感觉更自然,但从我看到的Gdimage界面来看,它看起来像是在那里完成的,从效率的角度来看,我理解它可能更好。我实际上更喜欢
val () = mapi gradient iImg
如果这看起来很难看,它应该不是很实用,而且标准ML肯定是一种功能性语言。我实际上更喜欢
val () = mapi gradient iImg
如果这看起来很难看,它应该不是很实用,而且标准ML肯定是一种功能性语言。其他人的回答比我强,所以我只想补充一点,val=。。。没有必要。我也倾向于使用下划线来表示副作用val:val=mapi,但这只是一种风格而已。其他人的答案比我更准确,所以我只需要在val=。。。没有必要。我也倾向于使用下划线来表示副作用val:val=mapi,但这只是一种风格。这里实际上不需要调用ignore。这里实际上不需要调用ignore。