小编Opt*_*ght的帖子

什么是影响列表理解中的因素的表现(处理时间)?

从Learn-you-a-haskell学习一个例子,"对于所有边和所有边都等于或小于10的直角三角形的周长为24?"

rightTrianglesOriginal = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2,a + b + c == 24]

我更改了原始示例的部分,并希望了解下面的过程(在极端条件下).

  • 谓词的顺序会影响性能吗?

  • 添加谓词(其他谓词暗示)是否会影响性能?(例如a> b,c> a,c> b?)?

  • 根据谓词(1)a> b和(2)c> a制作元组列表,然后进一步应用^ 2 + b ^ 2 = c ^ 2将提高整体性能?

  • 如果我们改变参数位置,例如(a,b,c)或(c,b,a),会对性能产生影响吗?

  • 如果需要这样大量的排列和组合,现实生活中应用的策略是什么?我们是否应该为下次使用存储预先计算的答案(尽可能)以提高性能或其他任何性能?

rightTriangles = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2]

几乎在很短的时间内给出结果.

rightTriangles10 = [(a,b,c)| c < - …

performance haskell functional-programming

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

无法理解编码逻辑/原则/惯例 - 为什么需要"显示"?为什么'Show Car'或"Show String"不起作用?

下面给出的代码编译,好的.

data Car p q r = Car {company :: p  
                     , model :: q  
                     , year ::r  
                     } deriving (Show)


tellCar :: (Show a) => Car String String a -> String
Run Code Online (Sandbox Code Playgroud)

什么是基本原则/惯例/逻辑可以提醒我,我只需要在'tellCar'中"显示",而不是任何其他选项?我在哪里可以找到资源来学习这些原则/惯例/逻辑?

如果我错误地在tellCar中使用'Show Car',则会在编译时收到以下错误消息:

*Main> :load "/home/optimight/baby.hs"  
[1 of 1] Compiling Main             ( /home/optimight/baby.hs, interpreted )  

/home/optimight/baby.hs:96:18:  
    Expecting three more arguments to `Car'  
    In the type signature for `tellCar':  
      tellCar :: Show Car => Car String String a -> String  
Failed, modules loaded: none.  
Run Code Online (Sandbox Code Playgroud)

如果我错误地在tellCar中使用'Show z',则在编译时收到以下错误消息:

*Main> :load "/home/optimight/baby.hs" …
Run Code Online (Sandbox Code Playgroud)

haskell ghc haskell-platform

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

发现:所需单位:Int - 如何纠正?

scala> class Rectangle (Length: Int, Width: Int) {; def getLlength (): Int = println (Length); def getWidth ():Int = println (Width); }
<console>:11: error: type mismatch;
 found   : Unit
 required: Int
       class Rectangle (Length: Int, Width: Int) {; def getLlength (): Int = println (Length:Int); def getWidth ():Int = println (Width:Int); }
                                                                                     ^
<console>:11: error: type mismatch;
 found   : Unit
 required: Int
       class Rectangle (Length: Int, Width: Int) {; def getLlength (): Int = println (Length:Int); def getWidth ():Int = …
Run Code Online (Sandbox Code Playgroud)

scala

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

我可以写charName'a'或'A'="Albert"吗?

以下是我转载的例子:

charName :: Char - > String
charName'a'="Albert"
charName'b'="Broseph"
charName'c'="Cecil"
charName x ="尚未定义"

我可以进一步修改上面提到的代码,如下所示(不会编译):

charName :: Char - > String
charName'a'或'A'="Albert"
charName'b'或'B'="Broseph"
charName'c'或'C'="Cecil"
charName x或X ="Not定义了"

如果给出charName'a'或charName'A',则获取"Albert".

请指导如何以最短的方式编写上述代码.

haskell

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

如何设置约束或验证/条件验证(对类型变量)?这里:如何强制半径> 0?

如果必须设置约束,则创建的任何圆的半径必须大于零(半径> 0).怎么做?

data Point = Point Float Float deriving (Show)  
data Radius = Radius Float deriving (Show)  
data Shape = Circle Point Radius deriving (Show)
surface :: Shape -> Float  
surface (Circle _ (Radius r)) = pi * r ^ 2  
Run Code Online (Sandbox Code Playgroud)

如果方便,请提供更多示例,说明如何在各种情况下设置约束/验证.例如,数据电话可以具有正则表达式或特定的起始编号集(区号或国家代码等).

haskell types typeclass

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

为什么在尝试"读取"此值时出现错误?

.hs代码:

data Person = Person { firstName :: String  
                     , lastName :: String  
                     , age :: Int  
                     } deriving (Eq, Show, Read)
Run Code Online (Sandbox Code Playgroud)

编译:

*Main> :load "/home/optimight/baby.hs"  
[1 of 1] Compiling Main             ( /home/optimight/baby.hs, interpreted )  
Ok, modules loaded: Main.  
Run Code Online (Sandbox Code Playgroud)

在编译后立即测试:

*Main> read "Person {firstName = \"Michael\", lastName \"Diamond\", age = 43}" :: Person  
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)

请指导.为什么会出现此错误以及如何避免此类错误?

haskell haskell-prelude

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