我正在寻找一个功能
foo :: Handle -> ByteString
Run Code Online (Sandbox Code Playgroud)
这将给我缓冲区中的所有内容,如果它是空的则阻止,如果它关闭则返回"".
我有一个应用程序,我正在打电话
Data.ByteString.Char8.hGet handle 1
Run Code Online (Sandbox Code Playgroud)
并且一切都运作良好,但是多次呼叫系统调用有点浪费.不幸的是,如果我将它增加到2,我的应用程序会间歇性挂起,这告诉我hGet等待缓冲区已满(或者至少大于1).
我错过了什么?
这是几个问题:
在do表示法中,每行必须返回相同的类型吗?例如,我可以在一个do返回IOmonad的块中写一行,而另一行返回一个整数吗?(我的理解,基于如何解除加糖>>和>>=似乎有效,答案是否定的.)
如果没有,那么编译器如何确定行必须返回的类型?在我看过的所有例子中,作者认为我们只是与IOmonad 合作已成定局.但是,对于给定的do块,您如何知道每条线必须返回什么?
再次假设#1的答案是否定的:你如何使用不能在do块内返回正确类型的monad的函数?例如,考虑这个websockets代码:
application :: MVar ServerState -> WS.Request -> WS.WebSockets WS.Hybi00 ()
application state rq = do
WS.acceptRequest rq
msg <- WS.receiveData :: WS.WebSockets WS.Hybi00 Text
return ()
Run Code Online (Sandbox Code Playgroud)
假设我要打印的值msg.我怎么会以与do块的类型不冲突的方式去做?
功能播放(id,song){alert(id + song); }
<img id="oi1" class="oi" src="/images/miniplay.png" alt="Play" onclick="play(24, '325s2sq2h');"/>
<img id="oi2" class="oi" src="/images/miniplay.png" alt="Play" onclick="play(35, 'skf8s2n2');"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Firebug发出错误
播放不是一个功能[打破此错误]播放(24,"325s2sq2h");
如何解决?谢谢!
我正在尝试编写一个列表函数,它采用一个简单的列表并反馈一个列表列表,所有后者的元素与前一个元素具有相同的关系.
更具体地说,函数应该这样做:
let xs = [1,2,3,4,5,6,8,9,10]xs!!0 = xs!!1 - 1),则在它们之间创建一个列表中的列表.[[1,2,3,4,5,6],[8,9,10]]
缺席7将主要列表分为两个子列表.它们都是算术进展,常见差异为1.在第7章阅读了" 了解你的大好事"之后,我认为自己确实有了一个好主意,并且尝试过并且不光彩地失败了.欢迎帮助,拜托!
ghci> filter (\x y -> x + 1 == y) xs
"<"interactive">":1:8:
The lambda expression `\ x y -> x + 1 == y' has two arguments,
but its type `a -> Bool' has only one
In the first argument of `filter', namely `(\ x y -> x + 1 == y)'
In the expression: filter (\ x y …Run Code Online (Sandbox Code Playgroud) 如果我有一个字符串:
char s1[]="hello, how are you?";
printf("%d\n",sizeof(s1));
Run Code Online (Sandbox Code Playgroud)
它打印出确切的,正确数量的字符,但是如果我有一个由指针初始化的字符串:
char *s2;
s2=(char*)malloc(sizeof(char));
strcpy(s2,s1);
printf("%d\n",sizeof(s2));
Run Code Online (Sandbox Code Playgroud)
它打印指针的大小,这取决于机器(在我的机器上,8).那么为什么s2为8个字节,s1为20个字节,因为它们是相同的字符串?
为什么以下这些功能不一样?第一个是正确的字符串拆分,但第二个似乎永远添加"",创建一个无限的列表
正确代码:
my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
| notElem y lista=[lista]
| otherwise=isMatch:(my_split rest y)
where
isMatch=takeWhile (/=y) lista
rest=tail $ dropWhile (/=y) lista
Run Code Online (Sandbox Code Playgroud)
坏代码:
my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
| notElem y lista=[lista]
| otherwise=isMatch:(my_split rest y)
where
(isMatch,rest)=break (==y) lista
Run Code Online (Sandbox Code Playgroud)
唯一不同的部分是休息条件,在我看来它应该做同样的事情......加上第一个函数表单应该确保我不会永远地为我的结果添加空列表...抱歉任何问题,并提前感谢
从Learn-you-a-haskell学习一个例子,"对于所有边和所有边都等于或小于10的直角三角形的周长为24?"
rightTrianglesOriginal = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2,a + b + c == 24]
我更改了原始示例的部分,并希望了解下面的过程(在极端条件下).
谓词的顺序会影响性能吗?
添加谓词(其他谓词暗示)是否会影响性能?(例如a> b,c> a,c> b?)?
根据谓词(1)a> b和(2)c> a制作元组列表,然后进一步应用^ 2 + b ^ 2 = c ^ 2将提高整体性能?
如果我们改变参数位置,例如(a,b,c)或(c,b,a),会对性能产生影响吗?
如果需要这样大量的排列和组合,现实生活中应用的策略是什么?我们是否应该为下次使用存储预先计算的答案(尽可能)以提高性能或其他任何性能?
rightTriangles = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2]
几乎在很短的时间内给出结果.
rightTriangles10 = [(a,b,c)| c < - …
即使安装了时间包,我的 ghci 也找不到日历模块。
$ ghc-pkg list | grep time
old-time-1.0.0.6
time-1.2.0.3
time-1.4.0.1
Run Code Online (Sandbox Code Playgroud)
我试图删除旧的包,但这破坏了很多其他包。我该如何解决这个问题?
我在Haskell中编写了一个简单(且非严重)的素数生成器,它具有相互递归的定义,用于生成素数和确定数字的素数:
primes :: (Integral a) => [a]
primes = 2 : filter isPrime [3, 5..]
isPrime :: (Integral a) => a -> Bool
isPrime m = all (indiv m) (takeWhile (<= (intSqrt m)) primes)
intSqrt :: (Integral a) => a -> a
intSqrt 1 = 1
intSqrt n = div (m + (div (n - 1) m)) 2
where m = intSqrt (n - 1)
indiv :: (Integral a) => a -> a -> Bool
indiv m n = rem …Run Code Online (Sandbox Code Playgroud) 当我使用 连接到 Cassandra 时cqlsh,它会告诉我所连接的 Cassandra 集群的名称。
$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
Run Code Online (Sandbox Code Playgroud)
(在此示例中,集群名称为Test Cluster,它在我的屏幕上显示为蓝色。)
如何使用 Python Cassandra 驱动程序从 Python 代码中获取集群名称?我期望能够从对象中获取此信息,但我在文档Session中看不到任何内容。
(我的用例是“腰带和大括号”方法的一部分,用于防止针对生产 Cassandra 运行测试。其想法是,如果服务器名称表明测试已以某种方式连接到生产 Cassandra,则它们可以尽快中止。)
haskell ×7
c ×1
cabal ×1
cassandra ×1
javascript ×1
list ×1
monads ×1
performance ×1
python ×1
typeclass ×1