小编Zai*_*jaj的帖子

如何使用FunScript真正"开始"

我在尝试使用FunScript时遇到了麻烦,我真的很喜欢F# - > Javascript的想法,但是对于如何使用这些漂亮的技术的信息/文档的数量不断感到沮丧.

这是问题所在:

无法安装FunScript项目(无主机)模板,因为:"您需要Nuget已安装",当我尝试下载时,VS说. // Dah, I do have Nuget and just updated it to latest release. I'm using VS2013 Ultimate.

我做了以下事情:

我创建了一个新的FSharp库项目,然后我运行了Package Maneger命令来获取所需的FunScript Libs:

PM> Install-Package FunScript
Run Code Online (Sandbox Code Playgroud)

虽然效果很好,但随后...当我看一个FunScript示例时,我open FunScript.TypeScript在程序中看到当我输入时不存在,因为它说TypeScript没有定义,并且查看示例FunScript.TypeScript提供了使用jQuery并与DOM交互的能力.没有它,我在这里无能为力

我确实注意到Nuget for FunScript上的第三方库,:

FuncScript.TypeScript.Bindings.(lib|jquery)
Run Code Online (Sandbox Code Playgroud)

但我无法在"open [namespace]"语句中引用它们.

最后,程序结束时必须有一个"运行时组件......".这也是'未定义'

你们有一个我可以开始的完整的FunScript示例吗?(我已经在网上搜索了很多,我看到的程序没跟我一起工作)

f# f#-3.0 funscript

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

在F#中使用Option idiomatic吗?

我有以下函数检查customer数据源中a 的存在并返回id.这是使用该Option类型的正确/惯用方式吗?

let findCustomerId fname lname email = 
    let (==) (a:string) (b:string) = a.ToLower() = b.ToLower()
    let validFName name (cus:customer) =  name == cus.firstname
    let validLName name (cus:customer) =  name == cus.lastname
    let validEmail email (cus:customer) = email == cus.email
    let allCustomers = Data.Customers()
    let tryFind pred = allCustomers |> Seq.tryFind pred
    tryFind (fun cus -> validFName fname cus && validEmail email cus && validLName lname cus)
    |> function 
        | Some cus -> cus.id
        | None …
Run Code Online (Sandbox Code Playgroud)

f# idiomatic

9
推荐指数
4
解决办法
257
查看次数

如何将对象列表转换为原始数据类型?

我有一个表示原始类型的区分工会:

type Expr = 
    | Int of bigint
    | Real of float
    | Symbol of string
    | Bool of bool
    | List of Expr list
Run Code Online (Sandbox Code Playgroud)

我正在编写一个函数list : obj list -> Expr list,该函数将检查对象的类型并将其相应地转换为Expr

let rec list : (obj list -> Expr list) = function
    | head::tail -> 
        match head with
        | :? string as x'-> Symbol (x') :: list tail
        | :? int as x'-> Int(bigint x') :: list tail
        | :? bigint as x' -> Int …
Run Code Online (Sandbox Code Playgroud)

f# list

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

F# - 如何根据返回类型动态创建异步函数

我试图动态创建一个函数,可以根据它在F#中的输入返回不同的类型.这些类型的函数类似于代理,以说明我想要做的事情,下面是一个不能正常工作的示例:

open FSharp.Reflection
open System

let functionThatReturnsAsync (irrelevantArgs: obj list) (returnType: Type) = 
    if returnType.GUID = typeof<string>.GUID
    then async { return box "some text" } 
    elif returnType.GUID = typeof<int>.GUID
    then async { return box 42 }
    elif returnType.GUID = typeof<bool>.GUID
    then async { return box true }
    else async { return box null }

// this works fine
let func = FSharpValue.MakeFunction(typeof<string -> Async<int>>, fun x -> box (functionThatReturnsAsync [x] typeof<int>))

// unboxing to that type works as …
Run Code Online (Sandbox Code Playgroud)

reflection f# metaprogramming

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

如何在数学表达式求值程序中修复此错误

我在F#中为简单的数学表达式(用一些自定义函数算术)编写了一个典型的求值器.虽然它似乎工作正常,但某些表达式没有按预期进行评估,例如,这些工作正常:

  • 评估"5 + 2" - > 7
  • 评价"sqrt(25)^ 2" - > 25
  • eval"1 /(sqrt(4))" - > 0.5
  • eval"1 /(2 ^ 2 + 2)" - > 1/6~0.1666 ......

但这些不是:

  • eval"1 /(sqrt(4)+2)" - >评估为1/sqrt(6)~0.408 ...
  • eval"1 /(sqrt 4 + 2)" - >也将评估为1/sqrt(6)
  • eval"1 /( - 1 + 3)" - >计算结果为1 /( - 4)〜-0.25

代码如下工作,标记化(字符串作为输入) - >到rev-​​polish-notation(RPN) - > evalRpn

我认为问题似乎发生在一元函数(函数接受一个运算符)的某处,这些是sqrt函数和negation( - )函数.我真的没有看到我的代码出了什么问题.有人可能会指出我在这里缺少的东西吗?

这是我在F#中的实现

open System.Collections
open System.Collections.Generic
open System.Text.RegularExpressions

type Token = 
    | Num of float
    | Plus
    | Minus
    | Star …
Run Code Online (Sandbox Code Playgroud)

f# rpn eval pattern-matching

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