2010-01-01 104 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絕對是一個功能性的語言。

相關問題