由于我开始掌握Python,我开始在projecteuler.net上测试我新获得的Python技能.
无论如何,在某些时候,我最终制作了一个函数,用于获取所有素数的列表,直到数字'n'.
以下是该函数的外观:
def primes(n):
"""Returns list of all the primes up until the number n."""
# Gather all potential primes in a list.
primes = range(2, n + 1)
# The first potential prime in the list should be two.
assert primes[0] == 2
# The last potential prime in the list should be n.
assert primes[-1] == n
# 'p' will be the index of the current confirmed prime.
p = 0
# As long as 'p' is …Run Code Online (Sandbox Code Playgroud) F#的类型扩充和类型扩展之间究竟有什么区别,我们真的需要两者吗?
是否存在一个比另一个好的情况,反之亦然?
我问的是因为我最近在F#上做过讲座,讲师在那里谈到了这两个讲座,然后评论说他无法看到两者都被包含在F#语言中的原因.
更新:
好的,所以Vladislav Zorov链接到一个页面,其中包含在定义自己的类型时使用类型扩充的示例,以及扩展(或扩充?)外部类型.
pad链接到MSDN页面,在那里他们称之为内在和可选类型扩展.
两者似乎都说明了同样的事情.有人能与一个具体的例子类型的扩展和另一个具体的例子类型的增强也许,为了明确地澄清两件事情究竟是什么?
在本书中我正在阅读关于数据库的课程,下面给出了使用聚合运算符的非法查询示例:
找出最老的水手的名字和年龄.
请考虑以下尝试回答此查询:
Run Code Online (Sandbox Code Playgroud)SELECT S.sname, MAX(S.age) FROM Sailors S目的是使该查询不仅返回最大年龄,还返回具有该年龄的水手的姓名.但是,此查询在SQL中是非法的 - 如果SELECT子句使用聚合操作,则它必须仅使用聚合操作,除非查询包含GROUP BY子句!
一段时间后,在使用MySQL进行练习时,我遇到了类似的问题,并犯了类似于上面提到的错误.然而,MySQL没有抱怨,只是吐了一些表,后来证明不是我需要的.
以上查询在SQL中是否真的非法,但在MySQL中是合法的,如果是,那为什么呢?在什么情况下需要进行这样的查询?
进一步阐述问题:
问题不在于是否也应在GROUP BY中提及SELECT中提到的所有属性.这就是为什么上面的查询,使用属性和属性上的聚合操作,没有任何GROUP BY在MySQL中是合法的.
让我们说Sailors表看起来像这样:
+----------+------+
| sname | age |
+----------+------+
| John Doe | 30 |
| Jane Doe | 50 |
+----------+------+
Run Code Online (Sandbox Code Playgroud)
然后查询将返回:
+----------+------------+
| sname | MAX(S.age) |
+----------+------------+
| John Doe | 50 |
+----------+------------+
Run Code Online (Sandbox Code Playgroud)
现在谁需要那个?John Doe不是50岁,他是30岁!正如本书引用中所述,这是第一次尝试获得最年长水手的名字和年龄,在这个例子中,Jane Doe在50岁时.
SQL会说这个查询是非法的,但是MySQL只是进行并吐出"垃圾".谁需要这种结果?为什么MySQL会为新手提供这个小陷阱?
我一直在研究使用C++以编程方式管理我的监视器的方法.
看起来像EnumDisplayDevices,EnumDisplaySettings和ChangeDisplaySettings之类的函数可用于例如改变各个显示设备的分辨率以及将所述设备连接到桌面或从桌面拆卸所述设备.
除了这些操作,我希望能够将我的桌面复制到多个监视器.
一个具体的例子是从桌面跨越两个设备的这种设置...
...到此设置,其中桌面被复制到所述设备.
我曾尝试在MSDN上调查API,并寻找类似的问题,但似乎无法找到任何关于这是否可行的指示.
是否可以使用C++将我的桌面复制到多个显示设备,如果是这样,怎么样?如果没有,是否可以通过其他方式进行,例如使用其他编程语言,或者我是否被迫使用Windows控制面板等选项来更改此类设置?
我和朋友正在读F#,目前正在搞乱记录.
我们为代表一个人做了以下记录:
type Person =
{name: string;
father: Person;
mother: Person;}
Run Code Online (Sandbox Code Playgroud)
F#Interactive接受它,并且在某种程度上,类型是有意义的,除了我们看不到如何使用它.当我们试图申报一个人时,我们必须在申报时宣布父母,并依次申报他们的父母等等.有没有办法真正使用这种类型?如果没有,我们怎么能创造它呢?
PS:我们很清楚,由于父项是可选的,我们应该用选项(Some x | None)类型封装它们.
编辑
我的问题不是如何解决上述问题,已经在PS中编写了一个解决方案.我的问题是,我可以实际使用上述类型,例如声明上述表格的人事记录吗?如果没有,我必须做一个无法使用的类型.为什么我可以制作这样的类型?
长话短说,我想出了这个有趣的函数集,它接受一个函数,f:'k - >'v,一个选择的值,k:'k,一个选择的结果,v:'v,用f作为基础对于一个新函数g:'k - >'v与f完全相同,除了它现在认为,gk = v.
这是为了实现它而编写的(非常简单的)F#代码:
let set : ('k -> 'v) -> 'k -> 'v -> 'k -> 'v =
fun f k v x ->
if x = k then v else f x
Run Code Online (Sandbox Code Playgroud)
我的问题是:
这个功能有什么问题吗?
我可以想象重复使用这个功能,就像这样
let kvs : (int * int) List = ... // A very long list of random int pairs.
List.fold (fun f (k,v) -> set f …Run Code Online (Sandbox Code Playgroud) 所以,我把这个函数叫做tryMap,如下所示:
/// tryMap, with failure and success continuations.
let rec tryMapC : 'R -> ('U list -> 'R) -> ('T -> 'U option) -> ('T list) -> 'R =
fun failure success mapping list ->
match list with
| [] -> success []
| head::tail ->
match mapping head with
| None -> failure
| Some result ->
let success = (fun results -> result::results |> success)
tryMapC failure success mapping tail
/// <summary>
/// Attempts to map a list …Run Code Online (Sandbox Code Playgroud) 我有一个深层嵌套的数据结构,到处都有浮点数.我正在使用FsCheck检查序列化然后反序列化后数据是否未更改.
当float为NaN或+/-无穷大时,此属性失败,但是,这种情况对我不感兴趣,因为我不希望这些值出现在实际数据中.
有没有办法防止FsCheck产生NaN和无穷大?
我已经尝试丢弃包含所述值的生成数据,但是这使得测试非常慢,实际上很慢,在我写这篇文章时测试仍在运行,我怀疑它实际上会完成...
我实际上想做的是在窗口游戏中获取鼠标坐标。到目前为止,我只找到了检索鼠标屏幕坐标的方法。因此,我想知道窗口的位置,以便我可以从鼠标的屏幕坐标中减去该位置以获得鼠标的窗口坐标。
这可能吗?如果可能的话,如何实现?