小编pad*_*pad的帖子

多项目中的SBT测试依赖性:使测试代码可用于相关项目

我有一个SBT多项目,其中一些项目彼此依赖.像这样:

 lazy val coreProject: Project = Project(
    id = "core-project",
    base = file("./core-project"),
    // other stuff
    ))

  lazy val extensions: Project = Project(
    id = "extensions",
    base = file("./extensions"),
    dependencies = Seq(coreProject)
  )
Run Code Online (Sandbox Code Playgroud)

现在我在test-folder的'core'项目中有一些测试代码.还有模拟和测试实用程序之类的东西.现在我想在扩展的测试中使用这些测试实用程序.对于生产代码,这是有效的,因为我已经声明了依赖.然而,似乎依赖性不适用于测试.当我运行测试时,我得到了缺少类的编译错误.这些类来自核心项目中的测试代码.

如何告诉sbt依赖项还应该包含测试范围的测试代码?这样我可以在'exension'项目的测试代码中重用我的模拟?

testing scala sbt

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

在F#中使用机器学习的资源

我使用Matlab作为原型工具学习了机器学习课程.由于我沉迷于F#,我想继续我在F#的机器学习研究.

我可能希望将F#用于原型设计和生产,因此机器学习框架将是一个很好的开始.否则,我可以从一组库开始:

  • 高度优化的线性代数库
  • 统计包
  • 可视化库(允许绘制图表,图表并与之交互......)
  • 并行计算工具箱(类似于Matlab并行计算工具箱)

最重要的资源(对我而言)是关于机器学习的书籍,博客文章和在线课程,使用函数式编程语言(F#/ OCaml/Haskell ......).

任何人都可以建议这些资源吗?谢谢.


编辑:

这是基于以下答案的摘要:

机器学习框架:

  • Infer.NET:一个.NET框架,用于在具有良好F#支持的图形模型中进行贝叶斯推理.
  • WekaSharper:围绕流行的数据挖掘框架Weka的F#包装器.
  • Microsoft Sho:在.NET平台上进行数据分析(包括矩阵运算,优化和可视化)的连续环境开发.

相关图书馆:

阅读清单:

任何其他指针或建议也欢迎.

.net f# functional-programming machine-learning

54
推荐指数
3
解决办法
4948
查看次数

F#中单例判别联合的简明模式匹配

假设我有以下单一案例歧视联盟:

type OrderId = OrderId of string
Run Code Online (Sandbox Code Playgroud)

在某些时候我需要实际的字符串.我发现它的提取方式是:

let id = match orderId with OrderId x -> x
Run Code Online (Sandbox Code Playgroud)

这样做有更简洁的方法吗?

我知道我的使用是一个特殊的情况,并且匹配是有意义的,以确保你已经涵盖了可能性,只是想知道是否有办法做一些事情,如:

let OrderId id = orderId
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching discriminated-union

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

功能并行的编程语言:F#vs Haskell

功能编程具有不可变的数据结构,并且没有副作用,这些本质上适用于并行编程.我研究了如何在函数式语言中利用多核计算,并针对某些数值应用程序设定生产代码.

F#背后有微软,它的并行结构如PLINQ,TPL,Async Workflow已被充分记录并显示出一些潜力.然而,关于Haskell中的并行性的研究目前非常活跃,并且它具有许多F#尚未支持的优秀特性:

我的问题是我应该选择哪种语言进行功能并行?如果选择了F#,是否有任何指针可以构建他们目前在Haskell中拥有的内容?

更新:

我选择了Simon的答案,因为它带来了关于垃圾收集器,内存分配和缓存未命中的一些很好的讨论.我会坚持使用F#,我认为这些答案对我学习功能并行是有帮助的.

parallel-processing f# haskell functional-programming

28
推荐指数
7
解决办法
7255
查看次数

F#中多核并行中缓存局部性的最佳实践

我正在研究F#中的多核并行性.我必须承认,不可变性确实有助于编写正确的并行实现.但是,当核心数量增长时,很难实现良好的加速和良好的可扩展性.例如,我使用快速排序算法的经验是,许多尝试以纯粹功能的方式实现并行快速排序并使用ListArray作为表示失败.对这些实现进行分析表明,与顺序版本相比,缓存未命中数量显着增加.但是,如果使用阵列内部的突变实现并行快速排序,则可以获得良好的加速.因此,我认为突变可能是优化多核并行性的一种很好的实践.

我认为缓存局部性是功能语言中多核并行的一大障碍.函数式编程涉及创建许多短期对象; 破坏这些对象可能会破坏CPU缓存的一致性.我已经看到很多建议如何改进命令式语言中的缓存局部性,例如,这里这里.但是我不清楚如何在函数式编程中完成它们,特别是对于经常出现的递归数据结构(如树等).

是否有任何技术可以改进不纯函数语言(特别是F#)中的缓存局部性?任何建议或代码示例都非常受欢迎.

parallel-processing f# asynchronous functional-programming multicore

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

函数式编程的非数字用例?

我刚读完一本关于scala的书.令我震惊的是,整本书中的每一个例子都是某种形式的数字.

像许多程序员一样,我使用的唯一数学来自离散和组合数学,而且通常不是数学我以明确的方式编程.我真的错过了常规oo算法的功能替代/补充的一些引人注目的例子.

什么是函数式编程的非数字用例?

f# functional-programming scala

25
推荐指数
5
解决办法
6720
查看次数

没有for..in..do的扩展计算表达式

扩展计算表达式的意思是使用CustomOperation属性定义的自定义关键字的计算表达式.

在阅读扩展计算表达式时,我遇到了@kvb非常酷的IL DSL:

let il = ILBuilder()

// will return 42 when called
// val fortyTwoFn : (unit -> int)
let fortyTwoFn = 
    il {
        ldc_i4 6
        ldc_i4_0
        ldc_i4 7
        add
        mul
        ret
    }
Run Code Online (Sandbox Code Playgroud)

我想知道如何在不使用for..in..do构造的情况下构成操作.我的直觉是它从x.Zero成员开始,但我没有找到任何参考来验证.

如果上面的例子太技术性,那么这里是类似的DSL,其中列出了幻灯片的组件而没有for..in..do:

page {
      title "Happy New Year F# community"
      item "May F# continue to shine as it did in 2012"
      code @"…"
      button (…)
} |> SlideShow.show
Run Code Online (Sandbox Code Playgroud)

我有几个密切相关的问题:

  • 如何在没有For成员的情况下定义或使用扩展计算表达式(即提供一个小的完整示例)?如果他们不再是monad我不担心,我对他们开发DSL感兴趣.
  • 我们可以使用扩展计算表达式let!和 …

dsl f# query-expressions computation-expression

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

F#高级练习

我已经读完了关于F#的书籍,我已经完成了本书中的大部分练习,这些练习都是基本的.现在我正在寻找更高级的练习来提高我的语言和功能编程概念.

是否有一个地方或一本书,我可以通过特别设计的练习练习F#来学习语言功能?现在我只能找到介绍性的东西或一般的编程问题网站(例如Project Euler).

我的目标是学习如何以功能方式思考并习惯模式匹配,部分应用函数,monads/workflows,尾递归等等.我想学习如何使用功能构造解决问题.

我也对任何为其他函数式编程语言(如Haskell)设计的好练习感兴趣.

f# functional-programming

23
推荐指数
3
解决办法
3855
查看次数

如何在F#中输入强制转换?

我必须枚举集合的成员并创建一个具有成员特定属性的数组:

  let ops: int array = [| for x in app.Operations ->
                            let op=  x : IAzOperation
                            op.OperationID |] 
Run Code Online (Sandbox Code Playgroud)

app.Operations是IAzOperation的集合,但在枚举时,将每个成员返回为Obj.所以我想输入每个成员并访问该属性.但不确定如何进行类型转换.如果我按照我在这里提到的方式进行类型转换,它会给我错误:

This espression was expected to have type IAzOPeration but here has type obj.
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

f# types casting

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

在F#的计算表达式中定义新关键字

F#3.0 beta包含一个查询{}计算表达式,包含大量新关键字.

如何在计算构建器中定义自己的关键字?

monads f# computation-expression f#-3.0

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