let updateCells (grid:Map<(int * int), Cell>) =
grid |> Map.toSeq
|> Seq.map snd
|> Seq.fold (fun grid c -> grid |> setReaction (c.X, c.Y)) grid
let mutable _cells = ObservableCollection<Cell>( grid |> Map.toSeq
|> Seq.map snd
|> Seq.toList )
let cycleHandler _ =
self.Cells <- ObservableCollection<Cell>( grid |> cycleThroughCells
|> Map.toSeq
|> Seq.map snd
|> Seq.toList )
如果您注意到了,以下代码出现在所有三个函数中:
grid |> Map.toSeq
|> Seq.map snd
功能组合
在函数式编程中,我们可以将函数融合在一起,这样它们就可以成为一个函数。
let getCells = Map.toSeq >> Seq.map snd >> Seq.toList
let updateCells (grid:Map<(int * int), Cell>) =
grid |> Map.toSeq
|> Seq.map snd
|> Seq.fold (fun grid c -> grid |> setReaction (c.X, c.Y)) grid
并将其重构为:
let updateCells (grid:Map<(int * int), Cell>) =
grid |> getCells
|> Seq.fold (fun grid c -> grid |> setReaction (c.X, c.Y)) grid
我关于函数组合与部分应用程序耦合的想法是否准确?
实际上,如果你把表达式
let getCells = Map.toSeq >> Seq.map snd >> Seq.toList
并尝试将其编译为独立表达式,则会出现编译器错误:
错误FS0030:值限制。当'_a:comparation
时,'get cells'值被推断为具有泛型类型val getCells:(map<'_a,'_b>->'_b list);如果'_a:comparation
将'get cells'的参数设置为显式,或者如果不希望它是泛型的,则添加类型注释。
let getCells xs = xs |> Map.toSeq |> Seq.map snd |> Seq.toList
>>
函数组合运算符使用的样式称为无点。它在部分应用程序中工作得很好,但并不完全相同。
但是,在这个例子中有一个部分函数应用的例子:
let getCells xs = xs |> Map.toSeq |> Seq.map snd |> Seq.toList
函数snd
具有以下类型:
'a * 'b -> 'b
这个函数只接受一个参数。
您还可以编写上述getcells
函数,而不部分应用snd
函数:
let getCells xs = xs |> Map.toSeq |> Seq.map (fun x -> snd x) |> Seq.toList
请注意,您可以传递一个lambda表达式,而不是传递给seq.map
的部分应用函数。getcells
函数仍然是由其他函数组成的函数,但它不再依赖于snd
的部分应用。
因此,为了部分(双关语)回答您的问题:函数组合不必依赖于部分函数组合。
在F#中,函数默认是curred的。这意味着所有函数都只接受一个参数,并返回一个值。有时(经常),返回值是另一个函数。
Seq.map snd
let getCells xs = xs |> Map.toSeq |> Seq.map snd |> Seq.toList
正如您所看到的,部分应用程序不是函数组合所必需的,但它确实使函数组合变得容易得多。
上述使用管道操作符(>
)的组合仍然依赖于函数map.toseq
、seq.map
等的部分应用。为了证明合成不依赖于部分应用,这里有一个“公正”(部分的反义词?(双关语))替代方案:
let getCells xs =
xs
|> (fun xs' -> Map.toSeq xs')
|> (fun xs' -> Seq.map (fun x -> snd x) xs')
|> (fun xs' -> Seq.toList xs')
请注意,该版本广泛使用了lambda表达式,而不是部分应用程序。
问题内容: 考虑Oracle表。我想用顶薪与获得职工和。还假定没有“ empno”列,并且主键涉及许多列。您可以使用以下方法执行此操作: 这可行,但我必须重复测试deptno = 20和job =’CLERK’,这是我想避免的。有没有更优雅的方式编写此代码,也许使用?顺便说一句,如果这很重要,我正在使用Oracle。 问题答案: 以下内容经过了精心设计,但对于“ top x”查询而言,这是一个很好
我有一个POM,根据Maven的最佳实践,它应该对组件/系统的依赖项进行分组,以声明使用该组件/系统所需的任何依赖项。(只有分组本身是最佳实践;)) 正常情况下,此pom只将组件(在本例中为systemA)服务(接口)模块声明为作用域依赖项,并将其相应的实现模块声明为作用域依赖项,如下所示: (当然,服务模块的POM和实现模块的POM将声明对systemA模块的进一步依赖关系,例如systemA的
主要内容:1. 平凡函数依赖,2. 非平凡的功能依赖DBMS函数依赖是两个属性之间存在的关系。它通常存在于表中的主键和非键属性之间。 函数依赖的左侧被称为决定因素,生产的右侧被称为依赖。 例如: 假设有一个包含属性的员工表:,,。 这里属性是唯一地标识表的属性,因为如果知道,就可以知道与这个属性关联的员工姓名。 函数依赖可以写成: 因此可以说在函数上依赖于。 函数依赖的类型 1. 平凡函数依赖 如果是的子集,则具有平凡的函数依赖性。 以下依赖关系也
我的pom.xml 错误:
我有两门课和。规则如下: 每个作业都有一个数字标识符。 每个作业有10个对应的任务。 每个任务都有一个数字标识符。 一个没有就不能存在。 我试图建立这两个类的类图。因为任务不能没有作业,所以我认为这是一个组合,这就是我如何构建类图: 但现在我感到困惑的是,如果这种关联实际上是依赖关系: 在这种情况下,我如何知道关系是组合关系还是依赖关系? 我已经按照Thomas Kilian的建议在类图中修复了组
本文向大家介绍DBMS中的部分依赖,包括了DBMS中的部分依赖的使用技巧和注意事项,需要的朋友参考一下 什么是部分依赖? 当非素数属性在功能上依赖于候选键的一部分时,就会发生部分依赖。 第二范式(2NF)消除了部分依赖性。 让我们看一个例子- 示例 <StudentProject> 学生卡 项目编号 学生姓名 项目名 S01 199 凯蒂 地理位置 S02 120 奥利 集群探索 在上表中,我们有