小编anu*_*i01的帖子

Haskell中的复杂性分析

positions2              :: (Eq a) => a -> [a] -> [Int]
positions2              = f where
    f aa aas        = filter (g aa aas) [0 .. (length aas - 1)]
    g aa aas it     = aa == aas !! it
Run Code Online (Sandbox Code Playgroud)

此代码用于查找给定列表中给定元素的位置.

为了找出它的复杂性,我想到了filter一个函数g和一个列表[0..length-1].

现在,我想不出什么的复杂性positions2(n)或会有任何环路事情,由于filter功能.

请建议是否有任何其他方法来编写更紧凑的代码,以降低复杂性.

haskell code-complexity

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

将字符串列表转换为Haskell中的元组列表

我有一个字符串列表:

[" ix = index"," ctr = counter"," tbl = table"]
Run Code Online (Sandbox Code Playgroud)

我想从它创建一个元组,如:

[("ix","index"),("ctr","counter"),("tbl","table")]
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过:

genTuple [] = []
genTuples (a:as)= do
                   i<-splitOn '=' a
                   genTuples as
                   return i
Run Code Online (Sandbox Code Playgroud)

任何帮助都会受到赞赏谢谢.

haskell

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

使用用户定义的数据类型的操作

我有一个数据类型

data Expr = ExprNum Double -- constants
          | ExprVar String -- variables
          | ExprAdd Expr Expr
          | ExprSub Expr Expr
          | ExprNeg Expr -- The unary '-' operator
          | ExprMul Expr Expr
          | ExprDiv Expr Expr
          deriving Show
Run Code Online (Sandbox Code Playgroud)

如果我有(3* 4 + 5)数据类型,Expr 它应该返回17,如果表达式包含一个变量:(3 * x)它应该返回ExprMul (ExprNum 3) (ExprVar "x")

我试过这样做:

calculate (ExprMul a b) = a * b
calculate (ExprAdd a b) = a + b
calculate (ExprDiv a b) = …
Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

haskell ×3

code-complexity ×1