问题很简单.
如何在SML中使用Index变量访问元组?
val index = 5;
val tuple1 = (1,2,3,4,5,6,7,8,9,10);
val correctValue = #index tuple1 ??
Run Code Online (Sandbox Code Playgroud)
我希望,有人可以帮忙.提前致谢!
为了澄清一点,为什么你不能这样做,你需要更多关于SML中元组是什么的知识.
元组实际上表示为SML中的记录.请记住,记录的形式{id = expr, id = expr, ..., id = expr}
是每个标识符都是标签.
元组和记录的差异是通过索引元组中元素的方式给出的:#1,#2,... (1, "foo", 42.0)
是(等效于)的派生形式{1 = 1, 2 = "foo", 3 = 42.0}
.SML/NJ给出该记录的类型可能更好地看出这一点
- {1 = 1, 2 = "foo", 3 = 42.0};
val it = (1,"foo",42.0) : int * string * real
Run Code Online (Sandbox Code Playgroud)
请注意,类型未显示为记录类型,例如{1: int, 2: string, 3: real}
.元组类型也是记录类型的派生形式.
实际上#id
不是一个函数,因此它不能用变量作为"参数"调用.它实际上是一种派生形式(注意通配符模式行,在记录模式匹配中)
fn {id=var, ...} => var
Run Code Online (Sandbox Code Playgroud)
总而言之,你将无法做你想做的事,因为这些派生形式(或者如果你愿意的话,语法糖)在任何方面都不是动态的.
不存在采用整数值和元组的函数,并从元组中提取该元素.当然也有在#1
,#2
...功能,但这些不走整数参数.也就是说,"函数"的名称是#5
,它不是#
应用于该值的函数5
.因此,您不能替换名称index
而不是5
.
如果你事先不知道元组中你想要的元素在哪个位置,你可能会以一种他们不打算使用它们的方式使用它们.
您可能需要一个值列表,其'a list
类型更自然.然后,您可以使用访问第n
th个元素List.nth
.