小编Tom*_*cek的帖子

处理第一次通过foreach的简单方法?

我经常发现自己在foreach循环中执行以下索引计数器混乱,以确定我是否在第一个元素上.有没有一种更优雅的方式在C#中执行此操作,有些类似的东西if(this.foreach.Pass == 1)

int index = 0;
foreach (var websitePage in websitePages) {
    if(index == 0)
        classAttributePart = " class=\"first\"";
    sb.AppendLine(String.Format("<li" + classAttributePart + ">" + 
        "<a href=\"{0}\">{1}</a></li>", 
        websitePage.GetFileName(), websitePage.Title));
    index++;
}
Run Code Online (Sandbox Code Playgroud)

c# foreach

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

如何在R中实现F#的前向管道运算符?

如何在R中实现F#的前向管道运算符?操作员可以轻松地链接一系列计算.例如,当你有一个输入data,想调用函数foobar顺序,你可以这样写:

data |> foo |> bar
Run Code Online (Sandbox Code Playgroud)

而不是写作bar(foo(data)).好处是您可以避免使用某些括号,并且计算的执行顺序与执行顺序相同(从左到右).在F#中,运算符定义如下:

let (|>) a f = f a
Run Code Online (Sandbox Code Playgroud)

看起来%...%可以用于二元运算符,但是它如何工作?

f# r

16
推荐指数
3
解决办法
1200
查看次数

F#XML类型提供程序 - 使用XSD

我可能在这里错过了这条船,但是如果你给XMLProvider的XML没有所有可能的元素,你如何构建一个使用XML Type Provider的可重用工具呢?换句话说,有没有办法使用XSD?我知道我可以尝试从XSD生成示例XML,但我想知道我是否正在接近这个错误.

xml f# type-providers f#-data

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

如何更改Rx Builder实现以修复堆栈溢出异常?

我正在尝试使用Rx Builder在F#Computation Expression语法中使用Reactive Extension.如何修复它以使它不会破坏堆栈?像下面的Seq示例一样.是否有任何计划提供RxBuilder的实现作为Reactive Extensions的一部分或作为.NET Framework未来版本的一部分?

open System
open System.Linq
open System.Reactive.Linq

type rxBuilder() =    
    member this.Delay f = Observable.Defer f
    member this.Combine (xs: IObservable<_>, ys : IObservable<_>) = 
        Observable.merge xs ys      
    member this.Yield x = Observable.Return x
    member this.YieldFrom (xs:IObservable<_>) = xs

let rx = rxBuilder()

let rec f x = seq { yield x 
                    yield! f (x + 1) }

let rec g x = rx { yield x 
                    yield! g (x + 1) }


//do f 5 …
Run Code Online (Sandbox Code Playgroud)

f# computation-expression system.reactive

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

F#相当于C#的'out'

我正在将一个C#库重写为F#,我需要翻译以下代码

bool success;
instance.GetValue(0x10, out success);
Run Code Online (Sandbox Code Playgroud)

outF#中关键字的等价物是什么?

f# c#-to-f#

11
推荐指数
3
解决办法
2564
查看次数

如何使用printf样式记录参数创建F#函数?

我正在尝试创建一个框架来处理文件和数据.我正在努力解决的一个领域是如何为框架提供日志记录功能,允许框架在不知道正在使用的日志记录的情况下报告消息.

let testLogger (source:seq<'a>) logger =
    logger "Testing..."
    let length = source |> Seq.length
    logger "Got a length of %d" length


let logger format = Printf.kprintf (printfn "%A: %s" System.DateTime.Now) format
testLogger [1; 2; 3] logger
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望此代码可以工作,但我无法确定如何传递记录器功能.

printf f#

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

是否可以在F#中的函数范围声明一个类型?

假设我有一个功能,它做了一些相当复杂的功能,它是在子功能的帮助下实现的.为了使事情更容易,而不是元组,我想使用一些私有的中间结构来实现这个功能.

我不希望这些结构的声明泄漏到外面.所以我想要这样的东西:

let someComplexFun p =
    type SomeRecord      = {i:int; x:int; y:int;}
    type SomeOtherRecord = {...}

    let innerFunctionA (x:SomeRecord) = ...
    let innerFunctionB (x:SomeOtherRecord) = ...

    ...
Run Code Online (Sandbox Code Playgroud)

我尝试过但当然编译器不允许我这样做.我查看了文档,我无法在任何地方看到类型必须在模块级别声明.

例如,在LISP中,它似乎完全合法,例如:

(defun foo (when)
    (declare (type (member :now :later) when)) ; Type declaration is illustrative and in this case optional.
    (ecase when
        (:now (something))
        (:later (something-else))))
Run Code Online (Sandbox Code Playgroud)

那么,我错过了什么吗?如果F#完全可以吗?

f# functional-programming

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

在F#中是否可以讨论中间函数参数?

这里的代码工作正常:

let f x y z = x + y + z

let g x y = f x y
let h x z = z |> f x
Run Code Online (Sandbox Code Playgroud)

所以我可以写表达式"h 1",并且FSI显示:

val it : (int -> int -> int) = <fun:it@110-3>
Run Code Online (Sandbox Code Playgroud)

如果我调用"h 1 2 3",则以正确的顺序应用参数.
但如果最后一个参数具有不同的类型,则情况会有所不同:

let ff x y (z : string) = x + y

let gg x y = ff x y
let hh x (z : string) = z |> ff x
Run Code Online (Sandbox Code Playgroud)

现在最后一个函数hh会导致错误信息:

Script.fsx(119,10):错误FS0001:类型不匹配.期待string -> …

f# currying

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

命名空间或模块"运行时"未定义

所以这里的"Funscript"页面有一个样本.现在我已将示例加载到Visual Studio 2012中.我不熟悉Visual Studio .NET,并且最近才学习F#.示例页面中的最后一行是:

do Runtime.Run(components=components, directory="Web") 
Run Code Online (Sandbox Code Playgroud)

总是抛出一个错误.事实上,Visual Studio IDE(编译器)似乎无法识别运行时.

如果这是一种像Java这样的语言,那么我会尝试导入一个库,所以我尝试使用System.Runtime,但仍然无法识别Visual Studio IDE,并且该行抛出错误说:

"The namespace or module "Runtime" is not defined.
Run Code Online (Sandbox Code Playgroud)

两个问题

  1. 我怎么能绕过这个?
  2. 是否有任何链接可以为完整的初学者教授F#,还包括加载外部库?

f# funscript

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

F#1.9.9.9和lapack

任何人都可以帮助我使用lapack与最新的f#?或者现在不推荐?

我搜索过,只找到http://fdatamining.blogspot.com/但无法FSharp.PowerPack.Math.Providers.dll编译.

编辑: @Yin,感谢您的博客.在FSharp.PowerPack.Math.Providers.dll从1.9.7.8源编译时,Microsoft.FSharp.Compatibility.permutation使用了几次而无法找到.在你的博客中,据说只是明确地定义它:

type permutation = int –> int.
Run Code Online (Sandbox Code Playgroud)

另外我更换所有Microsoft.FSharp.Compatibility.permutationMicrosoft.FSharp.Math.Permutation得到它编译.还没有测试过.

你能告诉我们svd bug的测试用例吗?

谢谢

.net math f# lapack

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