小编Guy*_*der的帖子

Google+社交网络深入

用什么语言写的(服务器端)?

Facebook是用Php编写的,例如用C++编译.

修改:他们如何设法将来自Google搜索的+1链接到您的个人资料?

social-networking google-plus

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

Printfn值不是函数,不能在F#的交互窗口中应用

这可能很简单,但我有一个带有简单示例函数的.fs文件.

let printHello = printfn "%A" "Hello"
Run Code Online (Sandbox Code Playgroud)

我已经使用了.fs文件的搜索路径

>#I "PathToMyFSFile"
Run Code Online (Sandbox Code Playgroud)

我已经加载了我的文件

>#load "Test.fs"
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.现在我想调用实际打印hello到屏幕的功能,但事实证明这太难了

> Test.printHello;;
val it : unit = ()
Run Code Online (Sandbox Code Playgroud)

试过Test.printHello();; 同样但不起作用.我如何让它在屏幕上打印"Hello"?

f# fsi unit-type

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

是否可以使用序列尾调用f#优化分组函数?

这是我的尝试,不是尾部调用优化,因为我需要处置枚举器:

let Group func seed (items : seq<'t>) = 
    let rec some (i : IEnumerator<'t>) state = seq {
        try
            if i.MoveNext()
            then
                let newstate, iscomplete = func (i.Current) state
                if iscomplete
                then 
                    yield newstate
                    yield! some i newstate
            else
                yield state
        finally
            i.Dispose() }

    some (items.GetEnumerator ()) seed
Run Code Online (Sandbox Code Playgroud)

以下是示例用法:

let buffer maxBufferSize items =
    Group (fun item state ->
        let newstate = [ item ] |> List.append state
        if newstate.Length >= maxBufferSize
        then (newstate, true)
        else (newstate, false)) List.empty …
Run Code Online (Sandbox Code Playgroud)

f# tail-recursion tail-call-optimization

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

int64不支持LanguagePrimitives.DivideByInt?

为什么int64不支持LanguagePrimitives.DivideByInt?我认为写这样的东西是很自然的:

let inline DivBy2 n = LanguagePrimitives.DivideByInt n 2
let res = DivBy2 100L
Run Code Online (Sandbox Code Playgroud)

但编译器说int64 doesn't support the operator DivideByInt.

我试图欺骗:

type System.Int64 with 
    static member DivideByInt (n: System.Int64) (d: int) = n / (int64 d)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

通过int执行int64的泛型划分可以做些什么?

generics f# inline integer-division

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

重复使用F#活动模式结果

在下面的代码中,我必须为每次迭代重复使用Active Pattern结果三次.即

match tree.Parent, postion with
Run Code Online (Sandbox Code Playgroud)

我发现我可以保存活动模式结果.即

let pos = ((|Root|Nil|Single|First|Inner|Last|Unknown|) (tree.Parent, position)) 
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是,是否可以在匹配语句中使用活动模式结果.即

match pos with
| ??? -> printf "("
Run Code Online (Sandbox Code Playgroud)

问题是可以在匹配语句中使用保存的活动模式结果吗?

如果是这样,怎么样?如果没有,需要解释它,以便逻辑上有意义.

为什么不这样做的例子.即语言规范,语法糖,不应该允许绑定活动模式结果,ExprItems与PatItems

我查看了F#2.0语言规范(2010年4月) http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597500

但我没有认出任何可以证实答案的东西.

编辑

如果我将代码更改为

    let pos = (|Root|Nil|Single|First|Inner|Last|Unknown|) (tree.Parent, position)  
    match pos with                                                                
    | Choice1Of7 (tree.Parent, position) -> printf "("                                                          
    | _    -> ()
Run Code Online (Sandbox Code Playgroud)

我在Choice1Of7之后得到以下错误(tree.Parent,position):

该表达式应该具有类型单位,但这里有类型'a*'b

正如布莱恩建议的那样

    match pos with                                                                
    | Choice1Of7 () -> printf "("                                                          
    | _    -> ()    
Run Code Online (Sandbox Code Playgroud)

结束编辑

注意:我在下面尝试了这个代码,但我找到了一个更好的算法来解决它的问题.

// An F# function to print a CommonTree as an s-expression
// …
Run Code Online (Sandbox Code Playgroud)

f# active-pattern

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

F#试图创建一个更好的printf

我正在尝试创建一个可以打印任何类型的打印语句.我想使用类型模式匹配来实现这一点.

这不起作用:

let print x = match x with | :? int -> printf "INT"; | _ -> None;;
Run Code Online (Sandbox Code Playgroud)

我收到消息:

让print x =将x与|匹配 :?int - > printf"INT"; | _ - >无;;
----------------------------- ^^^^^^

stdin(47,30):错误FS0008:从类型'a到int的运行时强制或类型测试涉及基于此程序点之前的信息的不确定类型.某些类型不允许运行时类型测试.需要进一步的类型注释.

那么,我不能在int上进行类型匹配?我不能做什么其他类型的匹配?什么意思需要进一步的类型注释?

f# unit-type

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

如何使用空类型签名定义F#抽象成员

根据这个页面,一个类的所有抽象成员必须有一个type-signature.但我想定义一个具有void输入参数和void返回类型的抽象类.并且void在此上下文中不是有效的关键字.

.net f# class unit-type

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

System.OutOfMemoryException用于尾递归函数

我已将有问题的代码隔离到此函数(使用ASP.NET的Membership类):

let dbctx = DBSchema.GetDataContext()
let rec h1 (is2_ : int) (ie2_ : int) : unit =
    match is2_ >= ie2_ with
    | true ->
        let st2 = query {
            for row in dbctx.Tbl_Students do
            where (row.Id = is2_)
            head}
        let l2 =
            Membership.FindUsersByEmail (st2.Email_address)
            |> Seq.cast<_>
            |> Seq.length
        match l2 >= 1 with
        | true -> 
            ()
        | false ->
            Membership.CreateUser (st2.Email_address, password, st2.Email_address)
            |> ignore
        h1 (is2_ - 1) ie2_
    | false ->
        ()
Run Code Online (Sandbox Code Playgroud)

System.OutOfMemoryException经过几次5626迭代后我才得到了 …

f# tail-recursion asp.net-membership tail-call-optimization

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

F#中的"求和"函数

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

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

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

f# inline

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

我们可以使用更通用的类型来缩短F#中的代码吗?

我在阅读"编程F#3.0"时遇到了这段代码:

type BitCounter =

    static member CountBits (x : int16) =
        let mutable x' = x
        let mutable numBits = 0
        for i = 0 to 15 do
            numBits <- numBits + int (x' &&& 1s)
        x' <- x' >>> 1
        numBits

    static member CountBits (x : int) =
        let mutable x' = x
        let mutable numBits = 0
        for i = 0 to 31 do
            numBits <- numBits + int (x' &&& 1)
        x' <- x' >>> 1
        numBits …
Run Code Online (Sandbox Code Playgroud)

primitive f# inline

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