Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 我需要用不同的签名组合函数_Scala_Function_Composition - Fatal编程技术网

Scala 我需要用不同的签名组合函数

Scala 我需要用不同的签名组合函数,scala,function,composition,Scala,Function,Composition,在scala中,我有两个具有不同签名的函数。我想写一个函数,将这两个函数组合成一个具有公共签名的新函数 type CFunc = (Context)=>Context type UCFunc = (Context,CFunc)=>Context type CompF = (Context,UCFunc,CFunc)=>CFunc val combine: CompF = (c:Context,uc:UCFunc, f:CFunc ) => ??? 如果我要执行代码,我

在scala中,我有两个具有不同签名的函数。我想写一个函数,将这两个函数组合成一个具有公共签名的新函数

type CFunc = (Context)=>Context
type UCFunc = (Context,CFunc)=>Context
type CompF = (Context,UCFunc,CFunc)=>CFunc

val combine: CompF = (c:Context,uc:UCFunc, f:CFunc ) => ???
如果我要执行代码,我会

val doIt: UCFunc = (c:Context,f:CFunc) => f(c)

def clumsy(c:Context,f:CFunc):Context = doIt(c,f)
是那个???我必须弄清楚的部分。我试过很多种可能性,但都不管用。我不会列举不起作用的东西。我知道它们不起作用。我希望有人能帮忙。我看到的两个函数的所有示例都采用相同的参数列表。那真的没用

很多东西。他们都没有工作过。我不认为列出不起作用的东西有什么价值

见上文


当对输入求值时,求值为的新函数将产生与该方法相同的结果。

我得到了它。我希望我正确地抄写了答案。 Try的一个例子

> Context holds the context of the functions. 
> > I - input to function  (read by f)
> > R - result of function (updated by f)
> > E - exception causing an error (updated by TryF)
> > > Update - copies the old context, notes the exception 
> 
> > val tryF = (f:Context=>Context) => 
> > > Try(f(c)) match {
> > > > case Success(ok) => ok
> > > > case Failure(e)  => c.update(Option(e))
> > > > case _           => c.update(Option(new MatchError(f))
> > > }

我明白了。我希望我正确地抄写了答案。 Try的一个例子

> Context holds the context of the functions. 
> > I - input to function  (read by f)
> > R - result of function (updated by f)
> > E - exception causing an error (updated by TryF)
> > > Update - copies the old context, notes the exception 
> 
> > val tryF = (f:Context=>Context) => 
> > > Try(f(c)) match {
> > > > case Success(ok) => ok
> > > > case Failure(e)  => c.update(Option(e))
> > > > case _           => c.update(Option(new MatchError(f))
> > > }

你到底想怎么写?而且,你的类型对我来说没有太多意义,我的意思是,第一个是函数,第二个是函数,它接收另一个函数作为参数,你确定这就是你想要的吗?试着用文字来描述你想要达到的目标。这里有很多可能性:
(c1,f,g)=>c2=>c1
(c1,f,g)=>c2
(c1,f,g)=>c2=>g(c1,f,g)=>c2=>g(c2)
(c1,f,g)=>c2=>f(c1,g)
(c1,f,g)=>c2=>f(c1,g)
. 你没有解释这些typedef是什么,或者它们有什么好处。您的第二个代码段没有在任何地方使用
combine
。完全不清楚被问到了什么。“它们都不起作用”不是一个恰当的问题描述,因为如果我们不知道这些函数应该做什么,我们就无法确定其他解决方案是否起作用。答案可能在您提供的列表中。函数f接受一个上下文并生成一个新上下文。它的类型是(Context=>Context)。函数g接受一个上下文和一个类型为(Context,(Context=>Context))=>=(Context=>Context)的函数。一个新函数f',它是在context类型的上下文和(context=>context)类型的函数的输入上对函数g求值的结果。我想要一个新函数f',因此,当在上下文上求值时,会产生一个新上下文。A(上下文=>Context)。与f类型相同。如果我将f'绑定到fprime的一个值,那么我就可以在任何上下文中计算f'并生成一个新的上下文。doit的函数每次计算g。方法evaluate调用doit。生成一个新函数,然后在ctx上计算新函数。我想这就是我在scala中写的。我对这门语言不熟悉,所以可能语法有误。使用者通常会调用组合函数来创建新函数以传递给方法。我认为这在scala上下文中被称为“按名称”。这个问题的scala解决方案通常是单子(我认为)。单子是一个痛苦的问题,但对于这种问题。它要求使用者知道evaluate的实现,然后重写它以执行相同的功能,但需要额外的位。您希望如何准确地组合它们?而且,你的类型对我来说没有太多意义,我的意思是,第一个是函数,第二个是函数,它接收另一个函数作为参数,你确定这就是你想要的吗?试着用文字来描述你想要达到的目标。这里有很多可能性:
(c1,f,g)=>c2=>c1
(c1,f,g)=>c2
(c1,f,g)=>c2=>g(c1,f,g)=>c2=>g(c2)
(c1,f,g)=>c2=>f(c1,g)
(c1,f,g)=>c2=>f(c1,g)
. 你没有解释这些typedef是什么,或者它们有什么好处。您的第二个代码段没有在任何地方使用
combine
。完全不清楚被问到了什么。“它们都不起作用”不是一个恰当的问题描述,因为如果我们不知道这些函数应该做什么,我们就无法确定其他解决方案是否起作用。答案可能在您提供的列表中。函数f接受一个上下文并生成一个新上下文。它的类型是(Context=>Context)。函数g接受一个上下文和一个类型为(Context,(Context=>Context))=>=(Context=>Context)的函数。一个新函数f',它是在context类型的上下文和(context=>context)类型的函数的输入上对函数g求值的结果。我想要一个新函数f',因此,当在上下文上求值时,会产生一个新上下文。A(上下文=>Context)。与f类型相同。如果我将f'绑定到fprime的一个值,那么我就可以在任何上下文中计算f'并生成一个新的上下文。doit的函数每次计算g。方法evaluate调用doit。生成一个新函数,然后在ctx上计算新函数。我想这就是我在scala中写的。我对这门语言不熟悉,所以可能语法有误。使用者通常会调用组合函数来创建新函数以传递给方法。我认为这在scala上下文中被称为“按名称”。这个问题的scala解决方案通常是单子(我认为)。单子是一个痛苦的问题,但对于这种问题。它要求使用者知道evaluate的实现,然后覆盖它以执行相同的功能,但需要额外的位。Oops“c”由val-tryF=(f:Context=>Context)=>(c:Context=>)建立。Oops“c”由val-tryF=(f:Context=>Context)=>(c:Context)=>。。。