标准ML:如何在函数中执行另一个函数?

时间:2010-01-01 21:38:55

标签: 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是类型为int int-> int int * int-> image-> unit的函数。基本上它在提供的图像上运行。

使用val void = ...

,函数看起来很难看

我怎么能消除它?

3 个答案:

答案 0 :(得分:2)

您可以在in表达式中的endlet之间添加表达式列表。所以你可以将你的代码重写为

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返回修改后的image会感觉更自然,但从我可以看到的Gdimage界面来看,它看起来就像是在那里完成的,我理解它从效率的角度来看可能更好。

答案 1 :(得分:1)

自从我使用SML已经十年了,但我相信你所寻找的是:

fun gradImage () =
    let val iImg = Gdimage.image(640,480) (0,0,0)
    in
        ignore (mapi gradient iImg);
        Gdimage.toPng iImg "gradient.png"
    end;

答案 2 :(得分:1)

我实际上更喜欢

提供的额外类型检查
val () = mapi gradient iImg

如果这看起来很丑陋,它应该 - 它不是很实用,而且标准ML绝对是一种功能性语言。