标签: let-binding

歧视联盟并让绑定?

为什么在受歧视的联盟中不允许绑定?我假设它与let绑定在默认构造函数中执行有关吗?

在次要说明,任何关于如何重写的AI_Choose建议将不胜感激.我想将加权优先级保持在AI的元组中.我的想法是AI_Weighted_Priority继承AI_Priority和覆盖选择.我不想处理不同长度的压缩列表(坏习惯imo.)

open AI

type Condition =
    | Closest of float
    | Min
    | Max
    | Average
    member this.Select (aiListWeight : list<AI * float>) =
        match this with
        | Closest(x) -> 
            aiListWeight 
            |> List.minBy (fun (ai, priority) -> abs(x - priority))
        | Min -> aiListWeight |> List.minBy snd
        | Max -> aiListWeight |> List.maxBy snd
        | Average -> 
            let average = aiListWeight |> List.averageBy snd
            aiListWeight 
            |> List.minBy (fun (ai, priority) -> abs(average - …
Run Code Online (Sandbox Code Playgroud)

f# discriminated-union let-binding

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

如何在F#中正确实现属性?

考虑我的第一次尝试,F#中的一个简单类型,如下所示:

type Test() =
    inherit BaseImplementingNotifyPropertyChangedViaOnPropertyChanged()
    let mutable prop: string = null
    member this.Prop
        with public get() = prop
        and public set value =
            match value with
                | _ when value = prop -> ()
                | _ -> 
                    let prop = value
                    this.OnPropertyChanged("Prop")
Run Code Online (Sandbox Code Playgroud)

现在我通过C#测试它(这个对象正在暴露给C#项目,因此需要明显的C#语义):

[TestMethod]
public void TaskMaster_Test()
{
    var target = new FTest();
    string propName = null;
    target.PropertyChanged += (s, a) => propName = a.PropertyName;
    target.Prop = "newString";

    Assert.AreEqual("Prop", propName);
    Assert.AreEqual("newString", target.Prop);

    return;
}
Run Code Online (Sandbox Code Playgroud)

propName如果分配正确,我的F#Setter正在运行,但第二个断言失败,因为底层值prop没有改变.这种方式对我来说很有意义,因为如果我mutable …

f# mutable let-binding

6
推荐指数
3
解决办法
2817
查看次数

使用“let”进行赋值是否不违背 Clojure 中函数式编程的思想

在函数式编程中应该避免赋值,但在 clojure 中我们经常使用let.

只是let一种实用的方式还是赋值与使用不同let?我们不应该避免函数式编程中的赋值吗?

functional-programming clojure let-binding

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

避免“模式不匹配”​​警告的替代方法

我编写了一个函数,该函数将一个数组作为输入并返回一个大小相等的数组作为输出。例如:

myFunc [| "apple"; "orange"; "banana" |]
Run Code Online (Sandbox Code Playgroud)
> val it : (string * string) [] =
    [|("red", "sphere"); ("orange", "sphere"); ("yellow", "oblong")|]
Run Code Online (Sandbox Code Playgroud)

现在,我想通过let绑定分配结果。例如:

let [|
        ( appleColor, appleShape );
        ( orangeColor, orangeShape );
        ( bananaColor, bananaShape )
    |] = 
    myFunc [| "apple"; "orange"; "banana" |]
Run Code Online (Sandbox Code Playgroud)

哪个很棒...

> val orangeShape : string = "sphere"
> val orangeColor : string = "orange"
> val bananaShape : string = "oblong"
> val bananaColor : string = "yellow"
> val appleShape : string = …
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching let-binding

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

Common Lisp`loop`:最大化为`let`引入的局部变量

loopCommon Lisp中的工具允许使用多个价值累积条款maximize.
现在,它也可以提供可变varmaximize条款:

(loop for x from 0 to 10 maximize (func x) into var)
Run Code Online (Sandbox Code Playgroud)

我的问题是:

是否有可能作为var一个新的局部变量引入let

一个示例场景是:

(let ((var -1)) ; assume numeric result
  (loop for x from 0 to 10 maximize (func x) into var))
Run Code Online (Sandbox Code Playgroud)

x具有数值并不重要,仅用于说明目的.

loops common-lisp local-variables let-binding

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