小编orl*_*dpm的帖子

用于重复流水线操作的F#语法

F#中是否有任何语法允许按顺序通过一系列函数进行流水线操作?例如,

    x |> fun1 |> fun2 |> fun3 ...
Run Code Online (Sandbox Code Playgroud)

或者是否有一个设计模式,使这项任务不必要?在我的情况下,我正在制作一个(天真的)数独求解器并具有如下所示的函数:

let reduceByRows poss = 
    poss 
    |> reduceBy (rowIndeces 1) |> reduceBy (rowIndeces 2) |> reduceBy (rowIndeces 3)
    |> reduceBy (rowIndeces 4) |> reduceBy (rowIndeces 5) |> reduceBy (rowIndeces 6)
    |> reduceBy (rowIndeces 7) |> reduceBy (rowIndeces 8) |> reduceBy (rowIndeces 9)
Run Code Online (Sandbox Code Playgroud)

有没有办法清理这样的东西?

f#

5
推荐指数
2
解决办法
205
查看次数

Currying和多重积分

我有兴趣学习一种优雅的方法,在函数式编程语言中使用currying来数值评估多个积分.我选择的语言是F#.

如果我想整合f(x,y,z)=8xyz到该区域,[0,1]x[0,1]x[0,1]我首先写下差分形式的三重积分8xyz dx dy dz.在某种意义上,这是三个有序参数的函数:a (float -> float -> float -> float).

我取第一个积分,问题减少到4xy dx dyon 的双积分[0,1]x[0,1].从概念上讲,我们已经把功能变成了一个(float -> float -> float).

在第二个积分之后,我将在单位间隔上取一个积分2x dxa (float -> float).

在三次积分之后,我留下结果,数字1.0.

忽略数字集成的优化,我怎么能简洁地执行它?我想写一些类似的东西:

let diffForm = (fun x y z -> 8 * x * y * z)

let result =
    diffForm
    |> Integrate 0.0 1.0
    |> Integrate 0.0 1.0
    |> Integrate 0.0 1.0
Run Code Online (Sandbox Code Playgroud)

这是否可行,如果可能不切实际?我喜欢这种能够在多大程度上捕捉数学上正在发生的事情的想法.

f# functional-programming currying numerical-methods

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

如何模仿F#编译器类型检查?

在F#中,我可以编写一个函数(fun x -> x * x)并确认它具有类型,int->int因为以下代码可以编译:

let typeCheck<'T> (x:'T) = ()
typeCheck<int->int> (fun x -> x*x)
Run Code Online (Sandbox Code Playgroud)

另一方面,GetType由于此功能与typeof<int->int>以下观点不同:

> (fun x -> x*x).GetType() = typeof<int -> int>
val it : bool = false
Run Code Online (Sandbox Code Playgroud)

如果不是GetType()typeof,我可以调用哪些函数来模仿编译器进行的类型检查?

f#

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

F# 中没有 cons 运算符或柯里化 cons 函数?

我们可以在 F# 中编写3 + 4(+) 3 4并获得相同的结果,这适用于大多数运算符。

为什么 cons 运算符的::行为不同?例如,如果我跑

(::) 1 [2;3]

我得到

error FS0010: Unexpected symbol '::' in expression

而我想得到 [1;2;3]。

在相关说明中,为什么List.Cons不咖喱?没有类型的内置 cons 函数'T -> 'T list -> 'T list吗?

f# list cons

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

快速查找100gb数据

我在~10MB .csv文件中保存了大约100GB的数据.如何针对此数据优化数千个查询的查找速度?具体来说,我不知道要考虑哪些技术或如何估计相对性能.

每个文件对于日期都是唯一的,并包含多个人的数据,例如:

...
2005-07-03, "Daffy Duck", ...
2005-07-03, "Daffy Duck", ...
2005-07-03, "Mickey Mouse", ...
2005-07-03, "Mickey Mouse", ...
...
Run Code Online (Sandbox Code Playgroud)

我想拉出与给定日期/名称相对应的所有信息,数千个日期/名称对.等效的SQL查询将是SELECT * FROM myDB WHERE Date='2005-07-03' AND Name='Mickey Mouse'.

目前我还没有将数据加载到数据库中.要执行我的"查询",我找到相应的日期文件,并按我要查找的名称过滤行.我是否可以在关系数据库,noSQL数据库或其他任何方式中存储数据?如果是这样,为什么和多少?

database-design

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

F#中的"求和"函数

我有一个F#中的函数列表,它们都是类型的(float - > float - > float - > float).我想在序列上进行某种折叠以获得一个函数,该函数返回所有函数的总和.

例如,我可以将值1.0,2.0和3.0传递给列表中的每个函数,并从每个函数中获取返回值.然后我可以计算所有这些值的总和.但是,我想概括一下.

我知道如何递归地执行此操作,但我觉得它应该在一行中可行.有没有简洁的方法来完成这项任务?

f# inline

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

python自己类型的静态字段

我注意到python不会让你在类定义中将类的实例添加到自身作为静态成员.

>>> class Foo:
...     A = Foo()
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in Foo
NameError: name 'Foo' is not defined
Run Code Online (Sandbox Code Playgroud)

但是,以下任一工作:

>>> class Foo:
...     pass
... 
>>> class Foo:
...     A = Foo()
... 
>>> Foo.A
<__main__.Foo instance at 0x100854440>
Run Code Online (Sandbox Code Playgroud)

要么

>>> class Foo:
...     pass
... 
>>> Foo.A = Foo()
>>> 
>>> Foo.A
<__main__.Foo instance at 0x105843440>
Run Code Online (Sandbox Code Playgroud)

我找不到任何具有启发性的代码示例或解释.为什么python以不同的方式处理第一种情况?在随后的两个案例中,每个案件的A在哪里?

python

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

查看来自多个客户端的队列/服务总线消息

我正在学习如何在Azure云应用程序和客户端应用程序之间进行通信,并完成教程.

我目前有一个.exe工作进程的实例,它通过服务总线发送消息.我还有一个客户端角色,我在本地机器上运行以阅读消息.但是,当我运行客户端的多个实例时,每个客户端都会获取一些消息,而这些消息都没有得到完整的读数.是否可以使用队列或服务总线,以便客户端的每个实例都可以看到工作人员生成的所有消息?

例如,3台不同计算机上的3个人可能希望独立监视同一计算任务的状态.

azure azure-storage azureservicebus

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

让F#中的绑定和构造函数

我在F#中定义一个秒表:

open System.Diagnostics

let UptimeStopwatch = Stopwatch.StartNew()
Run Code Online (Sandbox Code Playgroud)

我每3秒打印一次

printfn "%A" UptimeStopwatch.Elapsed
Run Code Online (Sandbox Code Playgroud)

每当我得到"00:00:00.0003195"或类似的小东西.每次我引用UptimeStopwatch时F#都会调用构造函数吗?如果是这样,我如何绕过这个广告达到预期的效果?这是功能和命令式编程的混乱混合.

f# functional-programming

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