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。