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功能.
请建议是否有任何其他方法来编写更紧凑的代码,以降低复杂性.
我有一个字符串列表:
[" 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)
任何帮助都会受到赞赏谢谢.
我有一个数据类型
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)