相关疑难解决方法(0)

F#中的Haskell样式到中缀运算符

有一个常见的问题是F#本身不支持在Haskell中使用的函数的中缀式使用:

isInfixOf :: Eq a => [a] -> [a] -> Bool
isInfixOf "bar" "foobarbaz"
"bar" `isInfixOf` "foobarbaz"
Run Code Online (Sandbox Code Playgroud)

可以在此处找到最着名的F#解决方案:

let isInfixOf (what:string) (where:string) =
    where.IndexOf(what, StringComparison.OrdinalIgnoreCase) >= 0
let found = "bar" |>isInfixOf<| "foobarbaz"
Run Code Online (Sandbox Code Playgroud)

此外,使用本机运算符优先级很容易改进它:

let ($) = (|>)
let (&) = (<|)
let found = "bar" $isInfixOf& "foobarbaz"
Run Code Online (Sandbox Code Playgroud)

还有XML-ish </style/>,在这里描述.

我想找到一个更好的解决方案,具有以下标准:

  • 单个字符运算符(或一对)不破坏常用运算符;
  • 它应该是相同的字符,同样严重的重音(后引号)字符在Haskell中服务;
  • 它不应该破坏关联性(支持链接):

    let found = "barZZZ" |>truncateAt<| 3 |>isInfixOf<| "foobarbaz"
    
    Run Code Online (Sandbox Code Playgroud)
  • 可选地,它应该支持带元组的函数:

    let isInfixOf (what:string, where:string) = ...
    // it will not …
    Run Code Online (Sandbox Code Playgroud)

f#

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

F#浮点范围是实验性的,可能已弃用

我正在尝试使用给定的增量在两个值之间进行插值.

[ 1.0 .. 0.5 .. 20.0 ]
Run Code Online (Sandbox Code Playgroud)

编译器告诉我这已被弃用,并建议使用ints然后转换为float.但是如果我有一个小数增量,这似乎有点啰嗦 - 我是否必须将我的开始值和结束值除以我的增量,然后再将多次除以?(yeuch!).

我曾经看过一些关于使用序列理解来做这件事的事情,但我不记得是怎么回事.

请帮忙.

floating-point f#

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

F#和元组输出

http://diditwith.net上,我看到,在F#中,并不是必须将参数传递给否则需要它们的函数.该语言将自动将结果和输出参数填充到元组中.(!)

这是语言的一般机制的某种副作用(请原谅双关语),还是F#规范中特别明确表达并故意编程到语言中的特征?

这是一个很棒的功能,如果它被明确地放入F#中,那么我想知道这种语言中潜藏的其他金块是什么,因为我已经浏览了几十个网页并阅读了三本书(由D Syme,T.Petricek和C. Smith)我根本没有看到这个特别的提法.

编辑:正如Petricek先生在下面回答的那样,他确实在他的书" 真实世界功能编程"中至少提到了两个地方.我的错.

f# dictionary tuples

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

F#伤害了我的大脑......任何人都可以帮助将C#翻译成F#吗?

我找到了一个快速的项目,我认为这对于学习F#是完美的.然而,由于某种原因,我无法将我的大脑包裹起来.经过几个小时的教程,甚至一些电影,我仍然只是......不明白.

所以我想使用Enterprise Manager"Generate Scripts"开始在工作中对我们的存储过程进行版本控制,并希望删除脚本日期.我放弃了,并在C#中做到了,但现在我真的很好奇,并希望有一些见解.

我不是空手而归,这是我的C#代码:

string path = @"C:\Subversion\CompanyName\SQL\DBName";
string fileSpec = "*.sql";
string pattern = @"Script Date: \d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}";
string replace = "Script Date: ";

foreach (var file in Directory.EnumerateFiles(path, fileSpec))
{
    string content = File.ReadAllText(file);

    content = Regex.Replace(content, pattern, replace);

    File.WriteAllText(file, content, Encoding.Unicode);
}
Run Code Online (Sandbox Code Playgroud)

我猜在F#中有一些很酷的2-3线解决方案...我很乐意看到它.

Thx的提示!我更新了它以匹配下面的内容,使视觉比较更具启发性.下面还有很棒的评论.

c# f# c#-to-f#

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

谁能告诉我这个F#片段有什么问题?

else语句之前的行显然是期待一个单元但是得到了一个布尔值.我刚刚开始使用F#,但无法理解这一点.

我正在打架布局,因为我之前从未使用过Stackoverflow,而且代码框仍然让我感到困惑!我相信,原件中的间距是正确的.

let m = Dictionary<int, int>() 

let rec fib i = 
    match i with
    | 1 -> i
    | 0 -> i
    | _ -> 
        if m.ContainsKey(i) then  
           if m.[i] > 0 then 
              m.[i] 
            else
              let x = fib(i - 1) + fib(i - 2)
              m.Add(i, x)
        m.[i] 
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我如何在这些帖子中保持间距,我将不胜感激!

f# functional-programming matching

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

如何将函数应用于浮点数组?

假设我有n个数组,其中n是一个变量(某个数字大于2,通常小于10).

每个数组都有k个元素.

我还有一个长度为n的数组,其中包含一组权重,用于指示我如何线性组合所有数组.

我正在尝试创建一个高性能的高阶函数,以便在F#中组合这些数组.

我怎么能这样做,以便我得到一个函数,它接受一个数组(arrs是一个样本),一个权重数组(权重),然后根据权重计算一个加权和?

let weights = [|.6;;.3;.1|]

let arrs = [| [|.0453;.065345;.07566;1.562;356.6|] ; 
              [|.0873;.075565;.07666;1.562222;3.66|] ; 
              [|.06753;.075675;.04566;1.452;3.4556|] |]
Run Code Online (Sandbox Code Playgroud)

谢谢你的想法.

f#

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