标签: partial-application

C# 定义函数并以部分应用程序作为委托

考虑以下方法:

int Foo(string st, float x, int j)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

Func<float, int>现在我想通过提供参数st和 的值将其包装在类型的委托中j。但我不知道语法。有人可以帮忙吗?

这是这个想法(可能看起来有点像 Haskell):

Func<float, int> myDelegate = new Func<float, int>(Foo("myString", _ , 42));
// by providing values for st and j, only x is left as a parameter and return value is int
Run Code Online (Sandbox Code Playgroud)

c# delegates partial-application

2
推荐指数
1
解决办法
3971
查看次数

从scala中的部分应用函数获取参数

scala中是否有一种方法可以从已经部分应用的函数中获取参数?

这是否有意义,应该完成,还是适合任何用例?

例:

def doStuff(lower:Int,upper:Int,b:String)= for(turn <- lower to upper) println(turn +": "+b)

想象一下,我一度知道'较低'的论点,我得到一个将它应用于'doStuff'的功能

val lowerDoStuff = doStuff(3,_:Int,_:String)

有没有办法让我回来?(例如,假设我在一个只收到'lowerDoStuff'并且现在需要知道第一个参数的函数内)

习惯性scala更喜欢内省/反思(如果可能的话).

scala currying partial-application

1
推荐指数
1
解决办法
636
查看次数

使用2个序列将Seq.map应用于采用2个参数的方法

我正在写一个快速的DB perf测试,并选择F#所以我可以得到更多练习.

我创建了一个measureSelectTimes具有签名的方法Guid list * Guid list -> IDbCommand -> TimeSpan * TimeSpan.

然后,我称之为:

let runTests () =
    let sqlCeConn : IDbConnection = initSqlCe() :> IDbConnection
    let sqlServerConn : IDbConnection = initSqlServer() :> IDbConnection
    let dbsToTest = [ sqlCeConn; sqlServerConn ]
    let cmds : seq<IDbCommand> = dbsToTest |> Seq.map initSchema
    let ids : seq<Guid list * Guid list> = cmds |> Seq.map loadData
    let input = Seq.zip ids cmds
    let results = input |> Seq.map (fun …
Run Code Online (Sandbox Code Playgroud)

f# partial-application seq

1
推荐指数
1
解决办法
1144
查看次数

Scala中部分应用的函数

想知道您是否可以评论为什么以下两种情况的行为方式不同:

以下作品:

var la= List(12, 13 , 14 ,15);
var func = (x:Int) => println(x)
la.foreach(func)                   // 1
la.foreach(func(_))                // 2
Run Code Online (Sandbox Code Playgroud)

但以下不是:

var la= List(12, 13 , 14 ,15);
var func1 = (x:Int) => {
    for (i <- 0 to x) yield i*2
 } mkString
la.foreach(println(func1))         // similar to 1 above
la.foreach(println(func1(_)))      // similar to 2 above
Run Code Online (Sandbox Code Playgroud)

错误:类型不匹配; 发现:所需单位:Int =>?la.foreach(的println(FUNC1(_)))

functional-programming scala partial-application

1
推荐指数
1
解决办法
239
查看次数

C/C++:A(*eval(A(*函数)(B),B b))(){...}可能?(可能是预C++ 11)

在C/C++(可能是前C++ 11)中,是否可以做到

A (*eval(A (*function)(B), B b))(){ 
  // ... ??
}
Run Code Online (Sandbox Code Playgroud)

即一个功能

  1. 从B值返回A值的函数,
  2. 要输入该函数的B值,

返回 - 从()返回A的函数... ??

如果是,那就是

  • 有效?
  • 保证编译器生成的代码在调用返回函数之前不会执行?

提前谢谢你,尼克

2014-4-20(1):感谢您提及'evtl.'(固定)std :: bind.:-)

所以-理解- (在C /预C++ 11不带升压)函数指针是例外的方式,里面的功能,它是唯一能够宣布他们,但有没有办法产生或修改一个实例 -作为函数/方法定义是函数指针实例的唯一可能来源,可以从哪里明确地或通过函数/方法参数移交它们.

只是问,因为我不清楚函数指针的可能内部表示......

2014-4-20(2):在Danvil的贡献下,现在是时候揭示,这里有模板:

template<typename T,typename A>
struct Evaluator {
  T(*f)(A);
  A a;
  T operator()() const { return f(a); }
};

template<typename T,typename A>
Evaluator<T,A> eval(T(*f)(A), A a) {
  Evaluator<T,A> w;
  w.f= f; w.a= a;
  return w;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,而 - 正如一些人已经猜到的那样 …

c c++ templates function-pointers partial-application

1
推荐指数
1
解决办法
122
查看次数

部分应用和sortBy

我正在学习Haskell,我一直在试验部分应用程序.我试图适当地应用sortBy.我没有看到结果函数的类型.它应该如何正确完成?

let mf = sortBy compare
:t mf
mf :: [()] -> [()]
Run Code Online (Sandbox Code Playgroud)

haskell partial-application

1
推荐指数
1
解决办法
103
查看次数

部分应用和柯里化的概念在 Haskell 中可以互换吗?

在一些函数式语言中,部分应用函数和柯里化函数是两个相似但不同的概念。

阅读《Learn You a Haskell for Great Good》一书,作者似乎可以互换应用这些。

【Curried 函数】 Haskell 中的每个函数官方都只带一个参数。

...

如果我们调用一个参数太少的函数,我们会得到一个部分应用的函数,这意味着一个函数的参数与我们省略的参数一样多。

我的问题是:Haskell 中部分应用和柯里化的概念可以互换吗?

haskell currying partial-application

1
推荐指数
1
解决办法
321
查看次数

最外部的评估策略如何评估功能的部分应用和咖喱函数的应用

赫顿在Haskell编程

计算表达式时,应以什么顺序执行归约?一种通用策略(称为 最内层评估)是始终选择最内层的Redex,因为它不包含其他Redex。如果最里面的redex不止一个,按照惯例,我们选择一个从表达式最左边的位置开始的redex。

对表达式进行评估的另一种常见策略是对最内层的评估,它总是选择最外层的Redex,因为它不包含在其他Redex中。如果有多个这样的redex,则像以前一样,我们选择从最左边开始的那个。毫不奇怪,这种评估策略被称为 最外部评估

在部分应用功能时,例如mult(3)(4),其中mult定义为

mult    ::  (Int,Int)   ->  Int
mult    (x,y)   =   x   *   y
Run Code Online (Sandbox Code Playgroud)

最内层的评估将首先评估mult(3)\y->3*y,然后评估(\y->3*y)4。最外部的评估将如何评估mult(3)(4)

在应用咖喱函数时,例如mult'(3)(4),其中

mult'   ::  Int ->  Int ->  Int
mult'   x   =   \y  ->  x   *   y
Run Code Online (Sandbox Code Playgroud)

最内层的评估将首先评估mult'(3)\y->3*y,然后评估(\y->3*y)4。最外部的评估将如何评估mult'(3)(4)

evaluation haskell functional-programming currying partial-application

1
推荐指数
1
解决办法
76
查看次数

Learn you a Haskell for Great Good 中的错别字?

在我们阅读的类型同义词中

就像我们可以部分应用函数来获取新函数一样,我们可以部分应用类型参数并从中获取新的类型构造函数。

如何将参数 应用于其他事物?我认为它实际上应该是

就像我们可以部分应用函数来获取新函数一样,我们可以部分应用类型构造函数(给它们比他们期望的更少的类型参数)并从中获取新的类型构造函数。

你同意?

haskell partial-application language-lawyer type-constructor

1
推荐指数
1
解决办法
90
查看次数

OCaml:为什么`let f : int -&gt; int list -&gt; int list = (::);;` 会失败?

我认为 OCaml 会阅读

let f : int -> int list -> int list = (::);;
Run Code Online (Sandbox Code Playgroud)

作为部分应用的实例,并将函数存储为f. 但是,编译器抱怨该函数应用于太少的参数。对此的任何见解将不胜感激,谢谢。

ocaml partial-application

1
推荐指数
1
解决办法
44
查看次数