首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Double列表返回List[Double],Map[String,Double]

从Double列表返回List[Double],Map[String,Double]
EN

Stack Overflow用户
提问于 2020-10-13 13:09:13
回答 1查看 176关注 0票数 0

我正在尝试返回一个列表和映射的元组。我已经获得了可以正确编译的列表,但是我不确定如何使用映射和列表来获得与列表中的内容相匹配的键和值的映射。这是我到目前为止所知道的:

我已经能够实现返回一个列表。但是我需要返回(ListDouble,MapString,Double)

代码语言:javascript
复制
    def emulateSingleInstruction(stack: List[Double],
                             env: Map[String, Double],
                             ins: StackMachineInstruction): (List[Double], Map[String, Double]) = {
    ins match{
        case AddI => stack match{
            case i1 :: i2 :: tail => (i1 + i2 :: tail, env)
            case _ => throw new IllegalArgumentException()
        }
        //USE V1 and V2
        case SubI => stack match{
            case i1 :: i2 :: tail => (i1 - i2 :: tail, env)
            case _ => throw new IllegalArgumentException()

        }
        case MultI => stack match{
            case i1 :: i2 :: tail => (i1 * i2 :: tail, env)
            case _ => throw new IllegalArgumentException()
        }
        //USE V1 and V2
        case DivI => stack match{
            case i1 :: i2 :: tail => (i1 / i2 :: tail, env)
            case _ => throw new IllegalArgumentException()
        }
        case ExpI => stack match{
            case Nil => throw new IllegalArgumentException()
            case head :: tail => {
                (scala.math.exp(head) :: tail,env)
            }
        }
        case LogI => stack match{
            case Nil => throw new IllegalArgumentException()
            case head :: tail => {
                if (head > 0){(scala.math.log(head) :: tail,env)}
                else{ throw new IllegalArgumentException()}
            }
        }
        case SinI => stack match{
            case Nil => throw new IllegalArgumentException()
            case head :: tail => {
                (scala.math.sin(head) :: tail,env)
            }
        }
        case CosI => stack match{
            case Nil => throw new IllegalArgumentException()
            case head :: tail => {
                (scala.math.cos(head) :: tail,env)
            }
        }
        case PushI(f) => (f :: stack,env)

        case PopI => stack match{
            case Nil => throw new IllegalArgumentException()
            case i1 :: tail => {
                (tail,env)
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 13:36:48

由于您的示例操作似乎不修改环境,而只是修改堆栈,我理解您只是在询问如何在返回值中组合新的堆栈和环境。

代码语言:javascript
复制
def emulateSingleInstruction(stack: List[Double],
                             env: Map[String, Double],
                             ins: StackMachineInstruction): (List[Double], Map[String, Double]) = {
    val newStack = ins match {
        case AddI => // your code. Looks good...
    }
    val newEnv = // expression that evaluates to the updated environment
    (newStack, newEnv)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64328864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档