标签: f#

我应该了解F#CTP的哪些方面?

我想开始玩f#.什么是F#的CTP?

是否可以用于在vs2008中安装?快递怎么样?

f# visual-studio-2008

0
推荐指数
1
解决办法
276
查看次数

字典找不到使用F#时放入的键

好的,这让我很生气.这段代码怎么可能不起作用?

open System.Collections.Generic
type testing (a:int)=
    let test = [Empty]
    member p.GetHashCode =
        fun () -> printfn "called hash";0

    override p.Equals(other:obj) =
        printfn "called equals"
        true
    interface IEquatable<testing> with
        override p.Equals(other:testing) =
            true
    static member op_Equality (other:obj) = printfn "called op" ;true   
let dict2 = new Dictionary<testing,int>()
dict2.[(testing 50)] <- 50
dict2.[(testing 50)]
Run Code Online (Sandbox Code Playgroud)

当试图从字典中取出并且不调用任何提供的方法时,代码段就会死掉.我今天只是疯了还是这里有什么问题?

.net f#

0
推荐指数
1
解决办法
152
查看次数

判断列表是否为空

我对 F# 完全陌生,我有一个函数可以计算两个不同点的总和,x如下y所示let vAdd (x1, y1) (x2, y2) : float * float = (x1 + x2, y1 + y2),然后我有另一个函数,它获取点列表,然后用于vAdd进行计算。let vSum [(x1, y1); (x2, y2)] = vAdd (x1, y1) (x2, y2)

现在我的问题是,如果给定的列表为空,我将如何检查并抛出一些错误?我尝试过 if ... then failwith "list is empty"IsEmpty没有工作。我看过的另一件事是pattern matching,,但我不知道它如何与我的特定功能一起工作。F# 检查列表是否为空

任何帮助将不胜感激,并提前致谢!

f# if-statement list pattern-matching

0
推荐指数
1
解决办法
90
查看次数

F# 中用于获取第一个有效结果的计算表达式

我怎样才能以干净的方式实现这样的目标?

让我们想象一下这个简单的代码:

let a () = checkSomeStuff ();     None
let b () = do Something ();       Some "thing"
let c () = checkSomethingElse (); None


"getOne" {
    do! a()
    do! b()
    do! c()
}
Run Code Online (Sandbox Code Playgroud)

它会返回第一个“Some”。

我可以通过使用 Result 来实现这种确切的行为,其中我通过错误返回值并使用 Ok 继续,但这不可读/不好:

let a () = checkSomeStuff ();     Ok ()
let b () = do Something ();       Error "thing"
let c () = checkSomethingElse (); Ok ()


result {
    do! a()
    do! b()
    do! c()
}
Run Code Online (Sandbox Code Playgroud)

这是可行的,但我希望在不误用 Result 类型的情况下实现这一目标。用现有的表达方式可以做到吗?

f#

0
推荐指数
1
解决办法
237
查看次数

为什么当每个项都为 true 时,这个布尔表达式会返回 false?

> (Console.Read() = (int 'd'));;
d
val it: bool = true

> (Console.Read() = (int 'd')) && (Console.Read() = (int 'o'));;
val it: bool = false
Run Code Online (Sandbox Code Playgroud)

它似乎在没有调用 Read 的情况下终止,编译器如何知道使表达式为 false?

io f# f#-interactive

0
推荐指数
1
解决办法
75
查看次数

具有两个泛型参数的 F# 函数

如何使用显式泛型参数定义 f# 函数?

我尝试过这个:

let my_function<'a 'b>  (xs: 'a list) (ys: 'b list)  = ....
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

generics f#

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

如何在 F# 中的地图内初始化地图

我想要一张 F# 中的地图,但我不知道如何初始化它。两个都

Map.empty.Add("Foo": Map.empty.Add(1: "a").Add(2, "b"))
Run Code Online (Sandbox Code Playgroud)

Map.empty.Add("Foo": Map [ (1, "a"); (2, "b") ])
Run Code Online (Sandbox Code Playgroud)

给我语法错误,但这些错误只是意外的符号(这对我没有真正的帮助)或不匹配的括号(但它们是匹配的,所以这一定是因为意外的符号)。那么我该怎么做呢?

谢谢。

f#

0
推荐指数
1
解决办法
410
查看次数

匹配表达式与模式匹配函数

我正在尝试将以下模式匹配函数转换为匹配表达式:

let reverse ls =
    let rec rev acc =
        function
        | h :: t -> rev (h :: acc) t
        | [] -> acc

    rev [] ls
Run Code Online (Sandbox Code Playgroud)

当我尝试转换为等效匹配表达式类型时,会发生不匹配错误:

let reverse ls =
    let rec rev acc =
        match acc with
        | h :: t -> rev (h :: acc) t
        | [] -> acc

    rev [] ls
Run Code Online (Sandbox Code Playgroud)

两者所需的输出是:

reverse [ 1; 2; 3 ]
// val it : int list = [3; 2; 1]
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching

0
推荐指数
1
解决办法
92
查看次数

如何在文本中查找整数

帮助我弄清楚如何处理文本

我有一个字符串,例如:“word1 number:word2”例如:“结果0:好”或“结果299:坏”

我需要打印未定义/低或高

当 string 为 null 时,打印 Undefined

当数字0-15时,打印Low

当数字 >15 时,打印 High

type GetResponse = 
{ 
  MyData: string voption
  ErrorMessage: string voption }

val result: Result<GetResponse, MyError>
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

MyData =
match result with
| Ok value ->
    if (value.Messages = null) then
        ValueSome "result: Undefined"
    else
        let result =
            value.Messages.FirstOrDefault(
                (fun x -> x.ToUpperInvariant().Contains("result")),
                "Undefined"
            )

        if (result <> "Undefined") then
            ValueSome result
        else
            errors.Add("We don't have any result")
            ValueNone
| Error err ->
    errors.Add(err.ToErrorString)
    ValueNone
ErrorMessage …
Run Code Online (Sandbox Code Playgroud)

string f# function

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

F#“函数”函数无法内联

下面2个函数

let episodeDict1 (a: obj) = 
    match a with
    | :? (Episode -> _) as generator ->
        let episodes = [D; W; M]
        let values = episodes |> List.map generator
        List.zip episodes values
    | :? _ as value -> [D, value; W, value; M, value]
    |> dict |> Dictionary


let episodeDict2: obj -> Dictionary<Episode, _> = function
    | :? (Episode -> _) as generator ->
        let episodes = [D; W; M]
        let values = episodes |> List.map generator
        List.zip episodes …
Run Code Online (Sandbox Code Playgroud)

f#

0
推荐指数
1
解决办法
42
查看次数