小编abh*_*hek的帖子

如何在ocaml中找到`map`的大小?我使用`Map.Make`仿函数来创建模块?

我在官方文档中找不到任何sizelen功能.查找使用以下内容创建的地图中元素数量的简单方法是什么:

module M = Map.Make(String)

我正在寻找类似的东西M.size M.empty : 0.

ocaml

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

如何在WebAssembly中使用`indirect_call`?

没有使用indirect_call在线可用的示例。根据语义文档,我尝试了

(call_indirect 
    (i32.const 0)
    (i32.const 0)
    )
Run Code Online (Sandbox Code Playgroud)

数字是随机的,但是没有给出我期望的运行时错误。我正在解析错误。

正确的语法是call_indirect什么?

webassembly

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

为什么下面的 Coq 重写不适用于假设的右侧?

我有以下 Coq 环境。

    1 subgoals
m : nat
IHm : forall n : nat, n + n = m + m -> n = m
n : nat
H : S (n + S n) = S (m + S m)
ll := ll : forall k : nat, k + S k = S k + k
Run Code Online (Sandbox Code Playgroud)

这样做,只改变rewrite ll in HLHS ,而不改变RHS 。 应该适用于 nat 类型的所有变量。这里有什么问题吗?S (n + S n)S (S n + n)S …

coq

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

Coq中`destruct`和`case_eq`战术有什么区别?

我理解destruct它打破了它的构造函数的归纳定义.我最近看到了case_eq,我无法理解它的作用有何不同?

1 subgoals
n : nat
k : nat
m : M.t nat
H : match M.find (elt:=nat) n m with
    | Some _ => true
    | None => false
    end = true
______________________________________(1/1)
cc n (M.add k k m) = true
Run Code Online (Sandbox Code Playgroud)

在上面的上下文中,如果我做破坏M.find n m它会将H分解为真和假,而使case_eq (M.find n m)H完整并添加单独的命题M.find (elt:=nat) n m = Some v,我可以重写以获得与破坏相同的效果.

有人可以解释一下这两种策略之间的区别以及应该使用哪种策略?

coq

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

Haskell中的WHNF减少是否发生在编译时?

AFAIU生成的目标文件Haskell compiler应该是机器代码.那么该目标文件是否具有原始表示AST并在运行时减少它或者在编译时发生这种减少,并且只有最终WHNF值被转换为相应的机器代码.

我理解后者的编译时间是程序本身时间复杂度的函数,我认为不太可能.

有人可以清楚地解释运行时发生的情况以及在编译时发生的情况Haskell (GHC)吗?

haskell functional-programming

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

是否有更优雅的方式来编写以下Coq代码?

match x with
| Some x => Some (Ref x)
| None => None
end.
Run Code Online (Sandbox Code Playgroud)

我必须这么做,嵌套匹配使代码看起来很糟糕.是否有一些更优雅的,一种班轮式的方式来解决Option的问题?

coq

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

如何在 WebAssembly 中创建和引用表?

有人可以分享一下静态创建具有某些元素的表并引用它的语法吗?我找不到任何这样做的网络汇编代码。

还有一些细节,例如我可以有多个列,如果索引不在表中会发生什么等,会有帮助吗?

webassembly

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

如何在不执行它们的情况下绑定两个IO()monad?

在下面的代码中,我>>用于将IO操作连接在一起.但是,AFAIU m1>>m2会被取消m1>>=(\_.m2),因此它在绑定时正在执行第一个IO操作.我希望所有打印都发生在main中,即print语句不应与输入语句交错("输入代码").既然do不允许我返回任何其他monad而不是IO [IO ()].如何获得所需的打印效果?

f :: [Int] -> IO ()
f inventory = do
        putStrLn "Enter Code\n"
        x <- getLine
        let idx = nameToIndex x 
        putStrLn "Quantity\n"
        y <- getLine
        putStrLn "More?\n"
        c <- getChar
        let q = (read y :: Int)
        let curM = if inventory !! idx >= q then (putStrLn "sdaf\n") else (putStrLn "Overflow!\n")  
        if c == 'Y' then curM>>(f (update inventory idx)) else curM

main = f [1, …
Run Code Online (Sandbox Code Playgroud)

monads haskell functional-programming

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

允许只有相同的Monad类型与`>>`运算符连接的逻辑是什么?

虽然它是好的绑定IO [[Char]]IO (),但它不是使之结合MaybeIO.有人可以举例说明这种放松会导致糟糕的设计吗?为什么允许Monad的多态类型中的自由而不是Monad本身呢?

monads haskell

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

如何从Coq假设'd = d + 1'证明`false`和扩展?

Goal forall (d : nat), d + 1 = d -> False.
Proof.
  intros d H.
Abort.      
Run Code Online (Sandbox Code Playgroud)

我怎样才能证明FalseHinversion H只是复制它.

coq

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