English 中文(简体)
Standard ML: how to execute another function within a function?
原标题:
  • 时间:2010-01-01 21:38:55
  •  标签:
  • sml

Currently, my code looks like this:

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 is a function with type intint->intint*int->image->unit. Essentially it operates on the image supplied.

The function looks ugly with val void = ...

How could I eliminate that?

最佳回答

You can have a list of expressions between in and end in a let expression. So you could rewrite your code to

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

I assume mapi modifies iImg in place, as the code seems to be written that way. That doesn t sound very functional; it would feel more natural to have mapi return the modified image, but from what I can see of the Gdimage interface, it looks like how it s done there, and I understand it s probably better from efficiency perspective.

问题回答

It s been a decade since I ve used SML, but I believe what you re looking for is this:

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

I actually prefer the additional type-checking offered by

val () = mapi gradient iImg

If this looks ugly, it should—it s not very functional, and Standard ML is definitely a functional language.





相关问题
Standard ml function in datatype problem

I have to create a function about peano numbers defined as the following datatype: datatype a peano = P of ( a -> a) * a -> a val zero = P(fn (f, x) => x) The function that I have to ...

convert string to list in Standard ML [duplicate]

Possible Duplicate: Open file in ML(SMLNJ) I have a string value which has value like this: "[(1,2,3),(2,3),(6,8)]" -> string but I want to have these values in int type like this: [(1,2,3),...

Open file in ML(SMLNJ)

I need to read file in ML (SLMNJ) and save it in some structures. I need to read some data that points to graph declaration: [( 1 , 2 , 13 ),( 2 , 3 , 3 ),( 2 , 4 , 8 ),( 2 , 5 , 4 ),( 3 , 1 , 5 ),( ...

Line Comments in Standard ML

I m learning ML, with the SML/NJ dialect. What I m trying to figure out is if there is a line comment operator. I found the block comment operator, (* ... *), but I really miss line comments. ...

How to fix the SML/NJ interactive system to use Arrow Keys

I m having some trouble using SML/NJ interactive system, namely, that when I try to use my arrow keys (either left or right to make a correction in the expression I ve typed, up to repeat the last ...

What causes this Standard-ML type error?

I was trying to make a tail-recursive version of this very simple SML function: fun suffixes [] = [[]] | suffixes (x::xs) = (x::xs) :: suffixes xs; During the course of this, I was using type ...

热门标签