小编Geo*_*rge的帖子

没有常量表达式的C++数组大小

我正在阅读Stroustrup的 C++之旅.在第9页,他说:

"数组的大小必须是一个常量表达式."

然后,在pg.16,他使用以下代码示例:

void vector vector_init(Vector& v, int s)
{
  v.elem = new double[s]; // Allocate an array of s doubles
  v.sz = s;
}
Run Code Online (Sandbox Code Playgroud)

s不是一个常数表达式,那么如何初始化v.elemnew double[s]合法?

c++ arrays

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

在哈斯克尔执行monad法律吗?

来自Haskell维基:

Monad可以被视为各种数据或控制结构的标准编程接口,由Monad类捕获.所有常见的monad都是它的成员:

class Monad m where
  (>>=) :: m a -> (a -> m b) -> m b
  (>>) :: m a -> m b -> m b
  return :: a -> m a
  fail :: String -> m a
Run Code Online (Sandbox Code Playgroud)

除了实现类函数之外,Monad的所有实例都应遵循以下等式或Monad Laws:

return a >>= k  =  k a
m >>= return  =  m
m >>= (\x -> k x >>= h)  =  (m >>= k) >>= h
Run Code Online (Sandbox Code Playgroud)

问题:底层的三个monad法律是否实际上以语言强制执行?或者它们是否必须强制执行的额外公理,以便你的"Monad"语言结构与"Monad"的数学概念相匹配?

monads haskell

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

这里的`it()`函数是做什么的?

以下代码片段来自angular的文档.it()这里的功能是什么(我假设它具有一些传统意义,因为否则似乎没有给出其含义的上下文)?在棱角分明的网站上我没有看到它的任何引用.由于它的名字,它也很难谷歌.上下文是关于代码测试.

it('should say hello', function() {
  var scopeMock = {};
  var cntl = new MyController(scopeMock);

  // Assert that username is pre-filled
  expect(scopeMock.username).toEqual('World');

  // Assert that we read new username and greet
  scopeMock.username = 'angular';
  scopeMock.sayHello();
  expect(scopeMock.greeting).toEqual('Hello angular!');
});
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

从Haskell调用Clojure函数

是否可以使用FFI或其他技巧从Haskell(在GHC上)调用Clojure函数?在这里,我有兴趣保持在GHC的范围内(即,不使用弗雷格).我也有兴趣将中心程序保存在Haskell中(意味着应该从Haskell调用Clojure函数,反之亦然).

这该怎么做?

haskell jvm clojure ffi

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

`stack clean`和删除`.stack-work`目录有什么区别?

1上下文

我参与了一个涉及大量C位和FFI的Haskell项目.所以我发现自己经常运行并重新运行命令

$ stack build
$ stack build --force-dirty
$ stack clean
$ rm ./.stack-work
Run Code Online (Sandbox Code Playgroud)

反复进行,以便将C位正确链接到Haskell位.换句话说,有时事情在运行时才起作用stack build,有时它们不起作用(在这种情况下,我被迫一遍又一遍地循环上述命令,直到我的项目正确构建).

这意味着我没有正确理解在组装Haskell位之前stack(通过ghc)如何组装C位.所以这里有一个问题可以帮助我开始清理我的困惑:

2问题

运行stack clean和删除目录内容之间是否有任何值得注意的区别.stack-work?是否有.stack-work必要删除目录作为一个很好的预防措施,以确保您实际运行干净的构建?

haskell haskell-stack

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

Haskell外来类型的习惯用法?

问题:从Haskell类型转到外部类型并返回需要大量的样板代码.

例如,假设我们正在使用以下Haskell数据结构:

data HS_DataStructure = HS_DataStructure {
       a1 :: String    
    ,  b1 :: String
    ,  c1 :: Int
}
Run Code Online (Sandbox Code Playgroud)

为了使这个数据结构进入C的土地,我们需要考虑它的struct类比:

typedef struct {
        char *a;
        char *b;
        int   c;
} c_struct;
Run Code Online (Sandbox Code Playgroud)

但是为了将这样的结构从Haskell传递给C,我们必须转换HS_DataStructure为以下内容:

data HS_Struct = HS_Struct { 
      a :: CString
    , b :: CString
    , c :: CInt
} deriving Show
Run Code Online (Sandbox Code Playgroud)

然后我们必须做HS_Struct一个例子Storable:

instance Storable HS_Struct where
    sizeOf    _ = #{size c_struct}
    alignment _ = alignment (undefined :: CString)

poke p c_struct …
Run Code Online (Sandbox Code Playgroud)

c haskell ffi

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

JavaScript中的属性与键与值的关系

我试图澄清我对JavaScript领域中"属性"与"密钥"与"值"这两个术语的理解.在阅读了几本关于语言的书籍甚至是谷歌搜索条款后,我仍然觉得我不清楚它们的确切含义.所以假设我们有以下内容:

var object = {"name" : 5};
Run Code Online (Sandbox Code Playgroud)

我对以下术语的理解是否正确:

属性是指"名称"

是指"名字"

是指5

我最关心的是"属性":它只引用标识符,还是整个名称/值对?

javascript

11
推荐指数
3
解决办法
3213
查看次数

为什么C++说不支持参数多态?

根据参数多态性的维基百科页面:

类型多态的一些实现在表面上类似于参数多态,同时还引入了特殊方面.一个例子是C++模板专业化.

问题:为什么C++只表示实现与paramaterized多态相似的表面形式?特别是,模板不是完全参数多态的一个例子吗?

c++ parametric-polymorphism

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

在Haskell中,"更高级的类型"*真的*类型?或者他们只是表示*具体*类型的集合,仅此而已?

参数多态函数

考虑以下功能:

f :: a -> Int
f x = (1 :: Int)
Run Code Online (Sandbox Code Playgroud)

我们可能会说类型fa -> Int,f因此属于"更高级"类型.

以下哪一项是最准确的思考方式f

  1. 其实也有一个单一 f型的a -> Int.但是,可以使用,作为f :: Int -> Int作为f :: Double -> Int,等等.

  2. 从字面上讲,类型f不是a -> Int.实际上,这只是一种简短的说法,即有一函数f的类型是具体的(即,有一个f :: Int -> Int,一个f :: Double -> Double等等;此外,这些函数中的每一个都是彼此不同的).

更高的金属类型

同样,我们可以考虑以下类型声明:

data Maybe a = Just a | Nothing
Run Code Online (Sandbox Code Playgroud)

并且问两种观点中的哪一种更正确:

  1. 没有 …

haskell types higher-kinded-types parametric-polymorphism

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

理解Haskell的Cast操作符

假设我们已经导入Data.Typeable了包含的内容cast :: (Typeable a, Typeable b) -> a -> Maybe b.

考虑一下

> cast 'n' :: Maybe Char
Just 'n'
Run Code Online (Sandbox Code Playgroud)

然而

> cast 7 :: Maybe Char
Nothing
Run Code Online (Sandbox Code Playgroud)

我理解上面的内容,但它似乎是一个微不足道的例子.它没有揭示为什么有人需要使用cast运算符(据我所见).

问题:是否有一个使用的cast例子真正"改变"一种类型的值到另一种类型?我能想到的(不实际工作GHCI)最近的例子是改变的类型7IntegerDouble:

> cast 7 :: Maybe Double
Just '7' -- this doesn't work, as 7 is typed as a Integer above; instead GHCi returns Nothing
Run Code Online (Sandbox Code Playgroud)

haskell

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