小编Mat*_*hid的帖子

记录语法澄清

好的,所以这是一个不寻常的.每当你看到Haskell的记录语法的例子时,它总是看起来像

Sphere {center = 0, radius = 2}
Run Code Online (Sandbox Code Playgroud)

或类似的.我的问题是......那些大括号实际上是记录语法的一部分吗?或者它们实际上是布局的简写?换句话说,你真的能写出像

Sphere
  center = 0
  radius = 2
Run Code Online (Sandbox Code Playgroud)

它有用吗?

我怀疑这样做会非常有用 - 它占用了大量的视觉空间 - 但我只是好奇这是否在语法上有效.

haskell

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

ByteString直方图

给定(严格)ByteString,计算它包含的每个可能字节的数量的最有效方法是什么?

我认为这sort应该被实现为计数排序 - 但似乎没有办法访问相关的计数.我还看到有一个count函数,它计算给定字节出现的次数.这给了我以下选项:

  • map (\ b -> count b str) [0x00 .. 0xFF]
  • map length . group . sort
  • 一些与fold*IntMap字节频率.

哪个可能会给我最好的表现?

haskell bytestring

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

Bash $ @变量失败

我已经好几次这样做了,它似乎永远不会正常工作.有谁能解释为什么?

function Foobar
{
  cmd -opt1 -opt2 $@
}
Run Code Online (Sandbox Code Playgroud)

这是什么应该做的是让这个电话Foobar做同样的事情与调用cmd,但有一些额外的参数(-opt1-opt2,在这个例子中).

不幸的是,这不能正常工作.如果所有参数都缺少空格,它就可以了.但是如果你想要一个带空格的参数,你可以用引号写出来,而Bash有助于剥离引号,打破命令.如何防止这种错误行为?

bash

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

C++配置数组

我正在看另一个问题,最高评价的答案说:

其他答案已经提到了RAII,这是一个很好的答案.但是,最好的建议是:首先不要分配动态对象!别写了

Foo * x = new Foo();

什么时候你可以写

Foo x;

代替.

这对我来说似乎是个好听的建议.基于堆栈的东西已经具有良好且良好的自动生命周期管理.

我的问题是:如何将这个声音建议应用于类似的东西

char * buffer = new char[1024];
stream.read(buffer, 1024);
...do stuff...
delete[] buffer;
Run Code Online (Sandbox Code Playgroud)

如果我是愚蠢的应用,但你如何创建阵列而不使用new[]

c++ memory-management

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

Haskell STM:如何根据执行顺序存储ThreadID

在以下程序中,Fibonacci数是从给定的整数(随机生成)生成的,并且该值存储在TVar中.由于生成Fibonacci的执行时间因不同的数量而不同,因此线程不会按顺序运行.我想存储theadID,可能在列表中,检查它们的执行模式. 请帮我.提前致谢.

module Main
where
import Control.Parallel
import Control.Concurrent.STM
import Control.Concurrent
import System.Random 
import Control.Monad
import Data.IORef
import System.IO

nfib :: Int -> Int
nfib n | n <= 2 = 1
   | otherwise = par n1 (pseq n2 (n1 + n2 ))
                 where n1 = nfib (n-1)
                       n2 = nfib (n-2)


type TInt = TVar Int


updateNum :: TInt -> Int -> STM()
updateNum n v = do x1 <- readTVar n
                   let y = nfib v
                   x2 …
Run Code Online (Sandbox Code Playgroud)

haskell stm

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

快乐:这不是关键字

当您编写Happy描述时,您必须定义可能出现的所有可能类型的令牌.但是你只能匹配令牌类型,而不是单个令牌 ......

这有点问题.例如,考虑data关键字.根据Haskell报告,这个标记是"保留".所以我的tokeniser识别它并标记它.但是,请考虑as关键字.现在事实证明这不是一个保留; 这是一个普通的varid.它只在一个上下文中特殊.你可以完全声明一个名为的普通变量as,它很好.

所以这是一个问题:我如何as具体解析?

最初我并没有真正考虑过它.我刚刚定义了一个新的令牌类型,它表示任何文本恰好是的varid令牌as.

...然后我花了大约2个小时试图弄清楚为什么我的语法实际上不起作用.是的,事实证明,由于此令牌类型与现有令牌类型重叠,因此声明顺序非常重要.(!!!)从字面上看,改变声明的顺序使得语法完美解析.

但现在我很担心.我担心as永远不会匹配varid,只能匹配自己.所以说varid将拒绝as令牌的所有语法规则- 这是完全错误的!

解决这个问题的正确方法是什么?

parsing haskell happy

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

如何让 Elm 动画师使用 CSS 动画为 SVG 元素设置动画?

我正在尝试在 Elm 中制作 CSS 动画,但我无法让它工作!

Elm 有几个动画包。我尝试使用的一个是mdgriffith/elm-animator. 遗憾的是,像许多 Elm 包一样,它的文档很少。它似乎提供了两种渲染方式:一种是通过运行 Elm 事件循环来对每一帧进行 DOM 更新,另一种是使用 CSS 动画 [我什至没有意识到它存在]。我正在尝试做后者。

我试图将代码缩小到一个最小的例子:

module Main exposing (main)

import Time
import Platform.Cmd
import Browser
import Html
import Html.Attributes
import Html.Events
import Color
import Svg
import Svg.Attributes
import Animator
import Animator.Css

main =
  Browser.document
  {
    init          = \        () -> ({fill = Animator.init <| Color.rgb 1 0 0}, Platform.Cmd.none),
    subscriptions = \     state -> Animator.toSubscription Tick state animator,
    view          = \     state -> …
Run Code Online (Sandbox Code Playgroud)

css svg elm

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

这个功能是否已经存在?(也许是monad)

我发现自己在写这个:

and_then :: x -> Maybe [x] -> Maybe [x]
x `and_then` mxs = do
  xs <- mxs
  return (x:xs)
Run Code Online (Sandbox Code Playgroud)

是否有一些更简单的方法来实现同样的事情?

基本上这是处理列表的标准递归循环 - 除了处理可能失败(这与结果只是一个空列表不同).这意味着我通常写的地方

z : process xs ys
Run Code Online (Sandbox Code Playgroud)

我现在要写

z `and_then` process xs ys
Run Code Online (Sandbox Code Playgroud)

由于这是一个相当普遍的习语,我想知道一些预先存在的功能是否可以帮助我.(几个Hoogle搜索未能找到类似于上述类型的任何函数.)

monads haskell

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

被FPComplete困惑

我有一段时间没有访问过haskell.org.当我前几天做的时候,我发现一家名为FPComplete的公司已经开始提供一些相当有趣的Haskell服务.但是,在任何地方似乎都没有太多的文档,我有点困惑......

如果您通过"前门"进入,则需要先创建用户帐户,然后才能执行任何操作.但有时你可以点击示例代码并立即开始编辑和运行它 - 似乎不需要任何类型的帐户.那么是否需要帐户?有什么方法我可以尝试一下,而不会遇到设置帐户的麻烦吗?

另外,如果我"启动项目",默认情况下是公开的,还是私有的?如果我关闭浏览器窗口,它会消失吗?还是永远存在?如果我实际上不再需要该项目,我可以以某种方式删除它吗?

我对"FP Haskell中心"和"Haskell学校"之间的区别感到有些困惑......

haskell

0
推荐指数
2
解决办法
312
查看次数

标签 统计

haskell ×6

bash ×1

bytestring ×1

c++ ×1

css ×1

elm ×1

happy ×1

memory-management ×1

monads ×1

parsing ×1

stm ×1

svg ×1