小编t0y*_*yv0的帖子

纯功能图和集的统计性能

给定数据结构规范,例如具有已知复杂性边界的纯函数映射,必须在若干实现之间进行选择.有一些关于如何选择正确的民间传说,例如红黑树被认为通常更快,但AVL树在工作负载上具有更好的性能和许多查找.

  1. 是否有关于这种知识的系统性介绍(发表的论文)(与集合/地图相关)?理想情况下,我希望看到对实际软件进行统计分析.例如,它可能得出结论,有N种典型的地图用法,并列出每种地图的输入概率分布.

  2. 是否有系统基准测试地图并设置不同输入分布的性能?

  3. 是否存在使用自适应算法根据实际使用情况更改表示的实现?

statistics functional-programming avl-tree red-black-tree data-structures

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

ML仿函数可以用.NET完全编码(C#/ F#)吗?

ML仿函数可以用.NET接口和泛型实际表达吗?是否有一个先进的ML仿函数使用示例来抵制这种编码?

答案摘要:

在一般情况下,答案是否定的.ML模块提供不直接映射到.NET概念的功能(例如通过签名共享规范[ 1 ]).

但是,对于某些用例,可以翻译ML习语.这些情况包括不仅基本Set函子[ 2 ],也单子[的函子编码3 ],和甚至更高级的Haskell的用途,如最后无代码解释器[ 4,5 ].

实用的编码需要妥协,例如半安全的低压.你的里程会很谨慎.

博客和代码:

  1. blog.matthewdoig.com
  2. higherlogics.blogspot.com
  3. F#中的monad仿函数

.net f# functor

17
推荐指数
3
解决办法
3497
查看次数

如何有效地为部分信任创作F#程序集?

有没有人在部分信任场景中有F#代码的经验?如在,用[<AllowPartiallyTrustedCallers>]?创建程序集?

我正在开发一些我们需要能够以部分信任方式运行的项目,我们一直在尝试使用2级安全规则(http://msdn.microsoft.com/en-us/library/dd233102. aspx).在实践中,我们的自包含组件很容易 - 只需放置一个属性; 但有时我们的程序集会引用未注释并假定为"SecurityCritical"的第三方DLL.这是它"有趣"的地方.

经过几天的努力,F#似乎存在严重问题..NET安全策略要求您注释类型/方法,[<SecuritySafeCritical>]如果它们引用或调用"SecurityCritical"代码,这些代码恰好是NuGet上的大部分代码,因为这是它默认的代码.现在,在F#中,这可以正常工作,直到你开始使用闭包.你做不到:

namespace Foo

open System.Security

[<assembly: AllowPartiallyTrustedCallers>]
[<assembly: SecurityRules(SecurityRuleSet.Level2)>]
do()

[<SecurityCritical>]
module C =
    let get () = [ 1 .. 10 ]

[<SecuritySafeCritical>]
module M =

    let foo () =
        seq {
            for i in 1 .. 10 do
                yield!
                    C.get ()
                    |> Seq.filter (fun x -> x % 2 = 0)
        }
Run Code Online (Sandbox Code Playgroud)

这个程序集无法通过SecAnnotate.exe检查,因为F#编译器将闭包提升到一个单独的类型,现在没有注释[<SecuritySafeCritical>],默认为Transparent,但引用了一些关键代码,这是一个错误.

这听起来像是一个小限制,但它花了我很多时间来改变代码以避免闭包并满足SecAnnotate约束.也许F#可以将安全属性传播给它创建的闭包类型?还有另一个简单的方法,我错过了吗?

.net f# code-access-security

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

F#异步堆栈溢出

我对基于异步的程序中的堆栈溢出感到惊讶.我怀疑主要问题是使用以下函数,它应该组成两个异步计算并行执行并等待两者完成:

let ( <|> ) (a: Async<unit>) (b: Async<unit>) =
    async {
        let! x = Async.StartChild a
        let! y = Async.StartChild b
        do! x
        do! y
    }
Run Code Online (Sandbox Code Playgroud)

有了这个定义,我有以下mapReduce程序试图mapreduce部分和部分中利用并行性.非正式地,我们的想法是使用共享通道激发N映射器和N-1缩减器,等待它们完成,并从通道读取结果.我有自己的Channel实现,这里替换ConcurrentBag为更短的代码(问题影响两者):

let mapReduce (map    : 'T1 -> Async<'T2>)
              (reduce : 'T2 -> 'T2 -> Async<'T2>)
              (input  : seq<'T1>) : Async<'T2> =
    let bag = System.Collections.Concurrent.ConcurrentBag()

    let rec read () =
        async {
            match bag.TryTake() with
            | true, value -> …
Run Code Online (Sandbox Code Playgroud)

f# asynchronous mapreduce

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

jQuery 1.3.2中是否有JQuery(..).html()buggy?

这里的代码没有返回预期的内容:

jQuery('<div>Look here: [ jQuery0="null" ]</div>').html()
Run Code Online (Sandbox Code Playgroud)

相反,你得到:

Look here: [ ]
Run Code Online (Sandbox Code Playgroud)

有问题的jQuery源代码:

html: function( value ) {
        return value === undefined ?
                (this[0] ?
                        this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
                        null) :
                this.empty().append( value );
},
Run Code Online (Sandbox Code Playgroud)

这背后的动机是.replace什么?我没有时间来讨论jQuery的其余部分,但这样的代码让我想知道我是否应该在生产中使用jQuery.

jquery

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

一般调试技术的推荐读物

您会对一般调试技术有何建议?我对原则和最佳实践比对特定平台解决方案更感兴趣.为了记录,我主要使用.NET(F#,C#),并涉及Haskell和Ocaml.

在这些星期五的晚上,我们谈到了与我的同事在步行回家的调试.我很惊讶地发现可以从VisualStudio调试器中查看和修改活动对象的状态.他还提到他认识的另一位开发人员,一位"Java大师",曾经向他展示了一些调试魔法,并给出了一篇关于调试的文章或小册子,这对我的同事最初的"没有任何东西"的态度提出了挑战.花了更多的时间比我希望找到虫子,我也准备好迎接挑战了.你会推荐哪些链接?

debugging ocaml haskell

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

F#3.0运行时是否可重新分发?

合法地重新分配F#3.0运行时(FSharp.Core.dll版本2.3.0.0,4.3.0.0),我在哪里可以找到证明?我准备了一个NuGet软件包,但是在发布软件包之前已经对许可进行了第二次考虑.微软发布了F#2.0运行时作为redist包 - 所以没有问题,但我的印象是获得F#3.0运行时的唯一方法是安装VS 2011或类似的; 我不确定在哪里检查重新分发F#运行时是否正常.

请注意,问题仅在于使用Microsoft密钥签名的二进制文件.代码的源代码在Apache许可下可用.

拥有带有DLL的NuGet包将使一些构建情况更容易.

开源F#存储库继续进行,并重新分发了Microsoft签名的FSharp.Core.dll(请参阅https://github.com/fsharp/fsharp),但我仍然希望确保允许这样做.

f# f#-3.0

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

OCaml封装模块有什么用途?

最近OCaml的3.12引入了一个特征的第一级封装模块:

一流的包模块.

  • 用于打包模块的新类型表达式: (module PT)
  • 新类型的表达式,将模块打包为一等值:(module MODEXPR : PT).
  • 新类型的模块表达式,将第一类值解压缩为模块:(val EXPR : PT).
  • PT是表单的包类型SS with type t1 = ... and ... and type tn = ...(S指模块类型).

我在哪里可以找到使用此功能的激励示例或论文?

ocaml

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

哪些OCaml库可用于惰性列表处理?

哪些OCaml库提供了惰性列表处理?我正在寻找这些方面的东西:

type 'a lazy_list = (*'*)
  | Nil
  | Cons of 'a * 'a lazy_list lazy_t

let from f = 
  let rec gen n = 
    lazy 
      (
        match f n with 
          | Some x ->
              Cons (x, gen (n + 1))
          | None ->
              Nil
      )
  in 
    gen 0
Run Code Online (Sandbox Code Playgroud)

回溯 Camlp4解析器的Stream类型和语法糖的集成将是很好的.

ocaml backtracking lazylist

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