小编dav*_*420的帖子

hGet的语义

我正在寻找一个功能

foo :: Handle -> ByteString
Run Code Online (Sandbox Code Playgroud)

这将给我缓冲区中的所有内容,如果它是空的则阻止,如果它关闭则返回"".

我有一个应用程序,我正在打电话

Data.ByteString.Char8.hGet handle 1
Run Code Online (Sandbox Code Playgroud)

并且一切都运作良好,但是多次呼叫系统调用有点浪费.不幸的是,如果我将它增加到2,我的应用程序会间歇性挂起,这告诉我hGet等待缓冲区已满(或者至少大于1).

我错过了什么?

haskell

3
推荐指数
1
解决办法
136
查看次数

类型和符号

这是几个问题:

  1. 在do表示法中,每行必须返回相同的类型吗?例如,我可以在一个do返回IOmonad的块中写一行,而另一行返回一个整数吗?(我的理解,基于如何解除加糖>>和>>=似乎有效,答案是否定的.)

  2. 如果没有,那么编译器如何确定行必须返回的类型?在我看过的所有例子中,作者认为我们只是与IOmonad 合作已成定局.但是,对于给定的do块,您如何知道每条线必须返回什么?

  3. 再次假设#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块的类型不冲突的方式去做?

monads haskell

3
推荐指数
1
解决办法
240
查看次数

JS错误:播放不是一个功能

功能播放(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");

如何解决?谢谢!

javascript

2
推荐指数
1
解决办法
2273
查看次数

Haskell:列表创建的评估列表元素

我正在尝试编写一个列表函数,它采用一个简单的列表并反馈一个列表列表,所有后者的元素与前一个元素具有相同的关系.

更具体地说,函数应该这样做:

  1. 列出清单; let xs = [1,2,3,4,5,6,8,9,10]
  2. 从头部看两个元素,如果第二个元素等于第一个加一个(即xs!!0 = xs!!1 - 1),则在它们之间创建一个列表中的列表.
  3. 该列表采用元素,而最后一个元素与从主列表新近馈送的元素具有相同的关系.当中断时,子列表关闭,但该功能应该根据相同的条件制作新的子列表.
  4. 因此,最终结果应该是,[[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)

haskell list

2
推荐指数
1
解决办法
463
查看次数

当'sizeof'应用于字符串时,为什么它会返回其大小(作为strlen)?

如果我有一个字符串:

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个字节,因为它们是相同的字符串?

c

2
推荐指数
1
解决办法
784
查看次数

为什么这两段代码的行为不一样?

为什么以下这些功能不一样?第一个是正确的字符串拆分,但第二个似乎永远添加"",创建一个无限的列表

正确代码:

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)

唯一不同的部分是休息条件,在我看来它应该做同样的事情......加上第一个函数表单应该确保我不会永远地为我的结果添加空列表...抱歉任何问题,并提前感谢

haskell functional-programming

2
推荐指数
1
解决办法
153
查看次数

什么是影响列表理解中的因素的表现(处理时间)?

从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 < - …

performance haskell functional-programming

2
推荐指数
1
解决办法
138
查看次数

找不到模块“日期.时间.日历”

即使安装了时间包,我的 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 cabal

2
推荐指数
1
解决办法
629
查看次数

懒惰列表根据其类型的具体性重建?

我在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)

haskell lazy-evaluation typeclass monomorphism-restriction

2
推荐指数
1
解决办法
105
查看次数

如何使用 Python 驱动程序获取 Cassandra 集群的名称?

当我使用 连接到 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,则它们可以尽快中止。)

python cassandra

2
推荐指数
1
解决办法
3425
查看次数