我已经设法让xUnit处理我的小样本组件.现在我想知道我是否也可以参加FsCheck.我的问题是,在为我的函数定义测试属性时,我很难过.
也许我只是没有一套好的样本函数,但是这些函数的测试属性是什么呢?
//transforms [1;2;3;4] into [(1,2);(3,4)]
pairs : 'a list -> ('a * 'a) list //'
//splits list into list of lists when predicate returns
// true for adjacent elements
splitOn : ('a -> 'a -> bool) -> 'a list -> 'a list list
//returns true if snd is bigger
sndBigger : ('a * 'a) -> bool (requires comparison)
Run Code Online (Sandbox Code Playgroud) 我想重写F#中的(/)运算符以获取字符串并保留数字的含义.
/// Combines to path strings
let (/) path1 path2 = Path.Combine(path1,path2)
let x = 3 / 4 // doesn't compile
Run Code Online (Sandbox Code Playgroud)
如果我尝试以下操作,我会得到"警告29扩展成员无法提供操作员重载.请考虑将操作符定义为类型定义的一部分."
/// Combines to path strings
type System.String with
static member (/) (path1,path2) = Path.Combine(path1,path2)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
此致,forki
我正在读RWH,我来到第9章.它介绍了以下代码:
import System.IO
import Control.Exception
saferFileSize :: FilePath -> IO (Maybe Integer)
saferFileSize path = handle (\_ -> return Nothing) $ do
h <- openFile path ReadMode
size <- hFileSize h
hClose h
return (Just size)
Run Code Online (Sandbox Code Playgroud)
但它不会编译,给出以下错误消息:
test.hs:5:22:
Ambiguous type variable `e0' in the constraint:
(Exception e0) arising from a use of `handle'
Probable fix: add a type signature that fixes these type variable(s)
In the expression: handle (\ _ -> return Nothing)
In the expression:
handle (\ _ -> …Run Code Online (Sandbox Code Playgroud) 我有用二项式系数法计算加泰罗尼亚数的代码.
def BinominalCoefficient(n,k):
res = 1;
if (k > n - k):
k = n - k
for i in range(k):
res *= (n - i)
res /= (i + 1)
return res
def CatalanNumbers(n):
c = BinominalCoefficient(2*n, n)
return (c//(n+1))
print (CatalanNumbers(510))
Run Code Online (Sandbox Code Playgroud)
当我尝试计算n大于510的加泰罗尼亚数字时,我有一个"纳"结果.为什么会发生这种情况?我该如何解决?
我能够运行Deep MNIST Example正常,但运行时fully_connected_feed.py,我收到以下错误:
File "fully_connected_feed.py", line 19, in <module>
from tensorflow.g3doc.tutorials.mnist import input_data ImportError: No module named
g3doc.tutorials.mnist
Run Code Online (Sandbox Code Playgroud)
我是Python的新手,所以也可能只是一个常规设置问题.
如何将字符串"Hello"拆分为字符列表,例如,如何将字符串拆分为F sharp中的字符列表.
"Hello" ->['H';'e';'l';'l';'o']
Run Code Online (Sandbox Code Playgroud)
我尝试过 Split([| |]),但它只根据你传入的参数拆分一个字符串.
我试过这个,但它仍然没有用
let splitChar (text:string) =
[for c in text ->c]
let splitChar (text:string) =
[for c in text do yield c]
Run Code Online (Sandbox Code Playgroud) 阅读"真实世界Haskell"我发现了一些有关数据类型的有趣问题:
这种模式匹配和位置数据访问使得它看起来像数据和在其上运行的代码之间具有非常紧密的耦合(尝试向Book添加内容,或者更糟糕地更改现有部件的类型).
在命令式(特别是OO)语言中,这通常是一件非常糟糕的事情......它在Haskell中不被视为一个问题吗? 来自RWH的评论
实际上,编写一些Haskell程序时,我发现当我对数据类型结构进行小的更改时,它几乎影响了使用该数据类型的所有函数.也许有一些数据类型使用的良好实践.如何最小化代码耦合?
我是Haskell和函数式编程的新手.我正在阅读真实世界的Haskell,我意识到我被一些例子搞糊涂了.
具体来说,这可以在第9章"谓词的域特定语言"一节中,这些示例包含wxyz参数.
我把它归结为:
为什么这段代码会编译?
f :: Int -> (Int -> Int)
f x y = x+y
main = do
let q = f 4 5
putStr (show (q))
Run Code Online (Sandbox Code Playgroud)
根据类型签名,f显然接受1个参数并返回一个函数.但是,似乎我可以编写函数方程,因此它将接受两个参数并返回一个int.为什么这可能?这是否意味着忽略了类型签名?
这是在讨好吗?这是某种封闭吗?如果我理解这个http://www.haskell.org/haskellwiki/Currying正确,那么它似乎与那里定义的currying相反 - 我的f函数是采用多个参数而不是单个参数!
此外,任何人都可以回答请提供一些链接到某种Haskell文档,其中说明了这种能力(如果可能的话).
编辑:
在考虑了一段时间之后,你们两个似乎暗示的是:
1)这种语法是语法糖,无论在等式中写入多少参数,f都将始终具有单个参数
2)在应用f时,函数体将(总是?)转换为存根(实际上是返回的函数),其中x固定为给定的参数(4),y是参数.
3)然后将这个新函数应用于5替换y,然后评估+函数.
我真正感兴趣的是,正如我在上面写的那样,它究竟在哪里说"在函数方程式中,如果你写了多个参数,它真的是语法糖,以及实际发生的......".或者除了我以外,每个人都这么明显吗?
编辑二:
真正令人大开眼界的答案在下面的@luqui评论中,不幸的是我认为我不能将评论标记为答案.
事实上,fxy = ...实际上是语法糖:f =\x - >\y - > ...
对我来说,下面所有其他人都说过这一点.
我在Haskell的Gentle Introduction中找到了一个这样的源代码,这里有:3.1节中的http://haskell.cs.yale.edu/tutorial/functions.html,名为Lambda Abstractions.
事实上,方程式:
inc x = x + 1 add xy = x + y
真的是简写:
inc =\x - > …
Haskell的新手很抱歉,如果这是非常基本的
这个例子取自"真实世界Haskell" -
ghci> :type fst
fst :: (a, b) -> a
Run Code Online (Sandbox Code Playgroud)
它们显示了该fst功能的类型,然后按照本段进行操作......
"结果类型fst是a.我们已经提到参数多态性使得真实类型不可访问:fst没有足够的信息来构造类型的值a,也不能将其a变成a b.所以唯一可行的有效行为(省略)无限循环或崩溃)它可以返回该对的第一个元素."
我觉得我错过了段落的基本点,也许是Haskell的重要内容.为什么fst函数不能返回类型b?为什么不能将元组作为一个参数,而只是返回一个Int(或任何其他类型的NOT a)?我不明白为什么它必须返回类型a?
谢谢
标准ML是否支持Unicode?
我相信它没有,但找不到任何SML说明这样的权威文档.
是或否是所有需要,但你必须知道一个事实.没有猜测或我相信答案.权威链接会更好.