为什么在受歧视的联盟中不允许绑定?我假设它与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#中的一个简单类型,如下所示:
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 …
在函数式编程中应该避免赋值,但在 clojure 中我们经常使用let.
只是let一种实用的方式还是赋值与使用不同let?我们不应该避免函数式编程中的赋值吗?
我编写了一个函数,该函数将一个数组作为输入并返回一个大小相等的数组作为输出。例如:
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) loopCommon Lisp中的工具允许使用多个价值累积条款maximize.
现在,它也可以提供可变var的maximize条款:
(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具有数值并不重要,仅用于说明目的.