【问题标题】:processing tuples in SML在 SML 中处理元组
【发布时间】:2012-04-02 13:25:24
【问题描述】:

我有一个任务,我需要获取一个元组并返回另一个相同大小的元组,其中某些元素发生了变化。问题是我不知道如何处理未定义大小的元组。该函数需要能够处理任何大小的元组。我的想法是使元组成为一个我可以更容易处理的列表,方法是创建一个递归辅助函数来获取元组的元素#1,并将其用于调用相同的函数,这将使元素#2 被 consed 到再次递归,直到没有元素为止,但是当我到达 #n+1 时,这只会给出一个错误,其中 n 是元组中的项目总数。 我会以错误的方式解决这个问题吗?有没有办法找到元组的大小?有没有办法处理这个错误?我知道异常处理,但我不确定如何将其应用于他的案例,如果可能的话。

问题是创建一个名为 subst 的函数,这样 subst (e',x) e = [e'/x]e 即函数 subst 将用表达式 e.为元组添加适当的大小写。

【问题讨论】:

    标签: list size tuples sml


    【解决方案1】:

    该函数需要能够处理任意大小的元组。

    这是无法做到的。不同大小的元组是完全不同且不相关的类型;没有任何类型的函数具有足够的多态性,可以同时成为'a * 'b -> ...'a * 'b * 'c -> ...,除非它只是'a -> ... 类型(即,它完全接受任何参数,对元组没有特殊的理解)。

    (内置符号# 1# 2等是适用于任何元组类型的重载函数,但这是你无法复制的魔法。你甚至不能写像@987654326这样的东西@ 没有为编译器提供足够的信息来推断 f 的确切类型;您必须编写例如 val f : 'a * 'b -> 'a = # 1 来指定 f 返回第一个字段一对。)

    【讨论】:

    • 那么我不知道如何做这个赋值......我必须制作一个程序,通过一个未确定大小的元组来查找某些变量,然后用其他变量替换它们。
    • @Arsarcanum:你可能误解了你的任务,因为你所描述的实际上是不可能的。标准 ML 根本没有任何“未确定大小的元组”的概念。
    • 我也被它弄糊涂了,所以我特地问我的教授“你的意思是元组可以是任意大小吗?” (因为作业说 (t0, t1, ..., tn) 的元组,她说是的...
    • @Arsarcanum:您可以编辑您的问题以包含作业的确切文本吗?
    • 创建一个名为 subst 的函数,这样 subst (e',x) e = [e'/x]e 即函数 subst 将替换表达式 e' 中任意出现的变量 x由表达式 e。为元组添加适当的大小写。
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2018-03-19
    • 1970-01-01
    相关资源
    最近更新 更多