小编gal*_*ais的帖子

当使用"无代码"标志时,ghc不会报告非详尽的模式匹配

我倾向于在终端中反复检查我的程序,同时在我选择的编辑器中修改它们以获得实时反馈.我通常会运行类似于:watch -d -n 1 "ghc -fno-code NoIncompletePM.hs".

不幸的是no-code,我用来避免一次又一次编译我不关心的代码的标志似乎与那个不相容warn-incomplete-patterns.例如,这个程序:

{-# OPTIONS  -Wall             #-}
module NoIncompletePM where

argh :: Bool -> Bool
argh True = True
Run Code Online (Sandbox Code Playgroud)

我从来没有得到任何argh错过案例的警告False.可以通过删除no-code标志添加标志来获取所有这些警告force-recomp(以便每次都显示警告,而不仅仅是第一次编译警告)但我确实想避免编译此代码...

我在手册中找不到任何描述这些不兼容的内容,所以我猜这是一个意想不到的行为,或者我做错了什么.有线索吗?

haskell pattern-matching typechecking

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

记住有效的功能

我开始研究一个将元胞自动机定义为局部转换函数的项目:

newtype Cellular g a = Cellular { delta :: (g -> a) -> a }
Run Code Online (Sandbox Code Playgroud)

无论何时g是a Monoid,都可以通过在应用本地转换之前移动焦点来定义全局转换.这给了我们以下step功能:

step :: Monoid g => Cellular g a -> (g -> a) -> (g -> a)
step cell init g = delta cell $ init . (g <>)
Run Code Online (Sandbox Code Playgroud)

现在,我们可以通过使用简单地运行自动机iterate.通过memo模仿每个步骤,我们可以节省很多(而且我确实意味着很多:它可以节省数小时)重新计算:

run :: (Monoid g, Memoizable g) => Cellular g a -> (g -> a) -> [g -> a]
run cell = iterate (memo . …
Run Code Online (Sandbox Code Playgroud)

haskell memoization unsafe-perform-io

5
推荐指数
0
解决办法
127
查看次数

如何在 Coq 中创建子列表?

我正在 Coq 中工作,并试图弄清楚如何做下一步:如果我有一个自然数列表和一个给定的 number n,我想在每个 之前和之后打破我的列表n。为了更清楚地说明,如果我有列表[1; 2; 0; 3; 4; 0; 9]和数字n = 0,那么我希望输出三个列表:[1;2][3;4][9]。我遇到的主要问题是我不知道如何在Fixpoint. 我想我需要嵌套Fixpoints 但我只是不知道如何做。作为一个非常原始的想法,我有太多问题:

Fixpoint SubLists (A : list nat)(m : nat) :=
 match A with
 |[] => []
 |n::A0 => if n =? m then (SubLists L) else n :: (SubLists L)
end.
Run Code Online (Sandbox Code Playgroud)

我非常感谢您对如何执行此操作以及如何导航具有多个元素的输出的意见。

coq

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

在Haskell列表理解中组织元组序列

你好亲爱的社区,

我正在尝试在Haskell List理解中组织元组序列.

例如,我得到以下列表理解:

[ (a,b,c,d) | a <- [0, 50, 100, 150, 200]
            , b <- ['a', 'b', 'c']
            , c <- [True, False]
            , d <- ['A', 'B']
            ]
Run Code Online (Sandbox Code Playgroud)

得到:

[ (0, 'a', True, 'A'), (0, 'a', True, 'B'), (0, 'a', False, 'A')
, (0, 'a', False, 'B'), (0, 'b', True, 'A'), (0, 'b', True, 'B')
, (0, 'b', False, 'A'), (0, 'b', False, 'B'), (0, 'c', True, 'A')
,(0, 'c', True, 'B'), (0, 'c', False, 'A')..
Run Code Online (Sandbox Code Playgroud)

现在我想要如下序列: …

haskell tuples list-comprehension list

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

在Ocaml中使用"和"表示多个相互递归函数

所以我在OCaml中有三个功能

let my_A = my_C
let my_B = my_A
let my_C = my_B
Run Code Online (Sandbox Code Playgroud)

函数A调用函数C.函数B调用函数A.函数C调用函数B.

我尝试使用"和"使它们相互递归(因此它们可以相互调用),如:

let my_A = my_C
and
my_B = my_A
and
my_C = my_B
Run Code Online (Sandbox Code Playgroud)

但它说

"未绑定的值my_C in __"

它基本上是说:"嘿,你不能打电话my_Cmy_A",但我不明白为什么?我不允许将三个功能链接在一起吗?

recursion ocaml functional-programming ml

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

在 utop 中加载具有依赖项的模块

我有两个模块A.mlB.ml如下所示:

A.ml:

type t = int
let from_int (i : int) : t = i
Run Code Online (Sandbox Code Playgroud)

B.ml:

open A
let my_t : t = from_int 0
Run Code Online (Sandbox Code Playgroud)

我可以通过调用来编译它们ocamlc A.ml B.ml,但是我不知道如何加载它们utop以便my_t交互使用。使用:

  • utop -init B.ml产量Error: Reference to undefined global 'A'
  • utop后面跟着#use "A.ml";;and#use "B.ml";;会导致同样的错误
  • 删除open AfromB.ml使这双重#use工作,但ocamlc A.ml B.ml现在失败BError: Unbound type constructor t

ocaml utop

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

有效连接字符串数组

OCaml标准库提供了函数String.concat

https://caml.inria.fr/pub/docs/manual-ocaml/libref/String.html

val concat : string -> string list -> string

String.concat sep sl连接字符串列表sl,在每个字符串之间插入分隔符字符串 sep

据推测,该函数的存在是为了更容易地将许多字符串在时间/空间上与字符串长度呈线性连接在一起。

数组是否存在类似的功能?特别是,有没有一种方法可以有效地将字符串数组连接在一起,而无需 1) 编写 C 扩展并构建棘手的中间结构或 2) 有效调用String.concat "" (Array.to_list arr)).

arrays ocaml string-concatenation

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

如何在haskell中实现相同记录类型的不同实现?

我理解为我们需要使用相同类型的不同实现 newtype

data Person = Person {
  name :: String
  , age :: Int
} deriving Show

class Describable a where describe :: a -> String

instance Describable Person where
  describe person = name person ++ " (" ++ show (age person) ++ ")" 

newtype AnotherPerson = AnotherPerson Person
Run Code Online (Sandbox Code Playgroud)

但是,在相同字段名称的记录之间存在名称冲突的haskell问题

instance Describable AnotherPerson where
  describe person = name person ++ " - " ++ show (age person)

<interactive>:79:65: error:
    • Couldn't match expected type ‘Person’
                  with actual type ‘AnotherPerson’
    • …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

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

这是什么 Agda 错误?

我是第一次尝试 Agda,我已经定义了Bool数据类型及其基本功能,就像所有教程所说的那样:

data Bool : Set where
true : Bool
false : Bool 
not : Bool -> Bool
not true = false
not false = true
etc...
Run Code Online (Sandbox Code Playgroud)

当我尝试加载它时,它会感到不安,因为“左侧的多个匹配类型签名不正确”并且它以红色突出显示“不正确”。我究竟做错了什么?

agda

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

如何将元组列表转换为haskell中的常规列表?

我想将元组列表转换(a,a)as 列表.这就是我到目前为止所拥有的

map (\(x,y) -> [x,y]) [(1,4),(2,5)] 
> [[1,4],[2,5]]
Run Code Online (Sandbox Code Playgroud)

但我想要的是

> [1,4,2,5]
Run Code Online (Sandbox Code Playgroud)

haskell tuples list

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