2010-01-01 100 views
1

目前,我的代码如下所示:标准ML:如何在函数内执行另一个函数?

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 *内部 - >图像 - >单元的功能。本质上它在提供的图像上运行。

函数看起来丑陋VAL无效= ...

我怎么能消除?

+0

其他人殴打我的答案,所以我只需添加注释,在'val = ...'后面的分号是不必要的。我也倾向于使用只有副作用的下划线val:'val _ = mapi',但这只是一种风格。 – ZoogieZork 2010-01-01 21:59:27

回答

2

您可以在let表达有inend之间的表达式列表。所以,你可以重写你的代码

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

这是一个十年,因为我已经使用SML,但我相信你正在寻找的是这样的:

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

在这里实际上并不需要调用'ignore'。 – 2010-01-01 22:03:13

1

其实我更喜欢额外的类型检查由

val() = mapi gradient iImg 

提出如果长相难看,应该—它不是很实用,和标准ML绝对是一个功能性的语言。

相关问题