小编stu*_*ith的帖子

Haskell Prelude中'const'的重点是什么?

通过Haskell Prelude,我看到了一个函数 const:

const x _ = x
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到有关此功能的任何相关内容.

重点是什么?任何人都可以举例说明这个函数的用途吗?

haskell

87
推荐指数
5
解决办法
2万
查看次数

使用"margin:0 auto;" 在Internet Explorer 8中

我正在进行IE8测试的一些进展,似乎旧的使用技术margin: 0 auto;在IE8的所有情况下都不起作用.

下面的HTML在FF3,Opera,Safari,Chrome,IE7和IE8 compat中给出了一个居中按钮,但不是 IE8标准:

<div style="height: 500px; width: 500px; background-color: Yellow;">
    <input type="submit" style="display: block; margin: 0 auto;" />
</div>
Run Code Online (Sandbox Code Playgroud)

(作为一种解决方法,我可以为按钮添加显式宽度).

所以问题是:哪些浏览器是正确的?或者这是行为未定义的情况之一?

(我的想法是所有的浏览器都不正确 - 如果它是"display:block",按钮不应该是100%宽度?)

更新:我是个笨蛋.由于输入不是块级元素,我应该将它包含在带有"text-align:center"的div中.话虽如此,为了好奇,我仍然想知道按钮是否应该在上面的例子中居中.

对于BOUNTY:我知道我在这个例子中做了一些奇怪的事情,正如我在更新中指出的那样,我应该把它对准中心.对于赏金,我想参考回答的规格:

  1. 如果我设置"display:block",按钮的宽度应该是100%吗?或者这是不确定的?

  2. 由于显示是块,应该"margin:0 auto;" 中心按钮,或不,或未定义?

html css internet-explorer-8

81
推荐指数
4
解决办法
15万
查看次数

如何提高这个Haskell程序的性能?

我正在研究Project Euler中的问题,作为学习Haskell的一种方式,我发现我的程序比同类C版本慢很多,即使在编译时也是如此.我该怎么做才能加速我的Haskell程序?

例如,我对问题14的强力解决方案是:

import Data.Int
import Data.Ord
import Data.List

searchTo = 1000000

nextNumber :: Int64 -> Int64
nextNumber n
    | even n    = n `div` 2
    | otherwise = 3 * n + 1

sequenceLength :: Int64 -> Int
sequenceLength 1 = 1
sequenceLength n = 1 + (sequenceLength next)
    where next = nextNumber n

longestSequence = maximumBy (comparing sequenceLength) [1..searchTo]

main = putStrLn $ show $ longestSequence
Run Code Online (Sandbox Code Playgroud)

这需要大约220秒,而"等效"暴力C版本只需要1.2秒.

#include <stdio.h>

int main(int argc, char **argv) …
Run Code Online (Sandbox Code Playgroud)

c performance haskell

25
推荐指数
3
解决办法
2040
查看次数

如何使用INotifyPropertyChanged更新数组绑定?

假设我有一节课:

class Foo
{
  public string Bar
  {
    get { ... }
  }

  public string this[int index]
  {
    get { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用"{Binding Path = Bar}"和"{Binding Path = [x]}"绑定到这两个属性.精细.

现在让我们说我想实现INotifyPropertyChanged:

class Foo : INotifyPropertyChanged
{
  public string Bar
  {
    get { ... }
    set
    {
      ...

      if( PropertyChanged != null )
      {
        PropertyChanged( this, new PropertyChangedEventArgs( "Bar" ) );
      }
    }
  }

  public string this[int index]
  {
    get { ... }
    set
    {
      ...

      if( PropertyChanged != null …
Run Code Online (Sandbox Code Playgroud)

wpf

14
推荐指数
3
解决办法
6876
查看次数

如何将ETag/If-Match与多个项目一起使用

在RESTful接口中处理乐观锁定的推荐方法似乎是ETag从GET 返回一个并If-Match在PUT上提供一个,即:

GET /items/1  --> gives client an ETag for a single item
PUT /items/1  <-- client gives it back as If-Match for checking
Run Code Online (Sandbox Code Playgroud)

如何将此方案与多个项目一起使用,例如,如果我要批量从单个URI中获取多个项目:

GET /items    --> How do I return multiple ETags for multiple items here? 
Run Code Online (Sandbox Code Playgroud)

或者,如果ETags/If-Match不能应对这种情况,那么推荐的方法是什么?或者我应该自己动手?

rest etag http

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

Haskell:为什么Maybe和Either类型在用作Monads时表现不同?

我试图了解Haskell中的错误处理.我发现文章" 8种方法来报告Haskell中的错误 ",但我很困惑为什么Maybe和Either表现不同.

例如:

import Control.Monad.Error

myDiv :: (Monad m) => Float -> Float -> m Float
myDiv x 0 = fail "My divison by zero"
myDiv x y = return (x / y)

testMyDiv1 :: Float -> Float -> String
testMyDiv1 x y =
    case myDiv x y of
        Left e  -> e
        Right r -> show r

testMyDiv2 :: Float -> Float -> String
testMyDiv2 x y =
    case myDiv x y of
        Nothing -> "An error"
        Just …
Run Code Online (Sandbox Code Playgroud)

error-handling monads haskell

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

Haskell:喜欢模式匹配还是成员访问?

假设我的Vector数据类型定义如下:

data Vector = Vector { x :: Double
                     , y :: Double
                     , z :: Double
                     }
Run Code Online (Sandbox Code Playgroud)

使用成员访问来定义函数是否更常见:

vecAddA v w
    = Vector (x v + x w)
             (y v + y w)
             (z v + z w)
Run Code Online (Sandbox Code Playgroud)

或者使用模式匹配:

vecAddB (Vector vx vy vz) (Vector wx wy wz)
    = Vector (vx + wx)
             (vy + wy)
             (vz + wz)
Run Code Online (Sandbox Code Playgroud)

(如果我的任何术语不正确,请道歉).

haskell coding-style

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

如何在LEX/FLEX中编写非贪婪的匹配?

我正在尝试使用FLEX和BISON解析遗留语言(类似于'C').除了匹配字符串之外,一切都很好用.

这种相当奇怪的遗留语言不支持在字符串文字中引用字符,因此以下都是有效的字符串文字:

"hello"
""
"\"
Run Code Online (Sandbox Code Playgroud)

我正在使用以下规则来匹配字符串文字:

\".*\"            { yylval.strval = _strdup( yytext ); return LIT_STRING; }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是一个贪婪的匹配,所以它匹配如下代码:

"hello", "world"
Run Code Online (Sandbox Code Playgroud)

作为单个字符串(hello", "world).

通常的非贪婪量词.*?似乎在FLEX中不起作用.有任何想法吗?

regex lex flex-lexer

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

使用HttpSelfHostServer和IDependencyResolver时"违反了继承安全规则"

我正在尝试使用HttpSelfHostServer自托管ASP.NET MVC 4 WebAPI.一切都很好我尝试添加自定义依赖项解析器.(最终这将使用StructureMap,但我还没有达到这一点).如果我尝试实例化自定义解析程序,则在启动服务器时会出现以下异常:

TypeLoadException:类型违反的继承安全规则:'System.Web.Mvc.CompareAttribute'.派生类型必须与基本类型的安全可访问性匹配,或者不太容易访问.

代码如下:

public class CustomDependencyResolver : IDependencyResolver
{
    public object GetService( Type serviceType )
    {
        return null;
    }

    public IEnumerable<object> GetServices( Type serviceType )
    {
        return null;
    }
}

...

// To trigger the exception, all I need to do is instantiate the custom resolver.
var dependencyResolver = new CustomDependencyResolver();

// Exception is thrown when I create the server:
var server = new HttpSelfHostServer( _config );
Run Code Online (Sandbox Code Playgroud)

请注意,我不需要对解析器执行任何操作 - 它是简单的,是实例化它的行为,以后会触发失败.

奇怪的是,这个例外只发生在调试(F5)中 - 如果我通过Ctrl + F5运行,一切正常.

有关如何解决此问题的任何想法?

堆栈跟踪: …

asp.net-mvc asp.net-web-api

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

如何使用for_each删除STL映射中的每个值?

假设我有一个STL映射,其中值是指针,我想将它们全部删除.我如何表示以下代码,但是使用std :: for_each?我很高兴使用Boost的解决方案.

for( stdext::hash_map<int, Foo *>::iterator ir = myMap.begin();
     ir != myMap.end();
     ++ir )
{
  delete ir->second; // delete all the (Foo *) values.
}
Run Code Online (Sandbox Code Playgroud)

(我发现了Boost checked_delete,但我不确定如何将其应用于pair<int, Foo *>迭代器所代表的).

(另外,出于这个问题的目的,忽略存储需要在STL容器中删除的原始指针的事实并不是很明智).

注意:我随后在下面找到并列出了一个单行答案......但是代码非常糟糕,所以我接受了GMan的理智答案.

c++ algorithm boost stl

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