小编Jef*_*eff的帖子

Haskell语法:drop(n + 1)[] = []是什么意思?

什么(n+1)意思?我知道它们都是递归的Haskell函数,并且正在使用模式匹配.

我不明白它的模式匹配factorial (n+1)以及(n+1)RHS的模式匹配factorial =.

drop功能为什么呢drop 0 xs = xs?那怎么样drop (n+1) [] = []

--Example 1
factorial 0 = 1
factorial (n+1) = (n+1) * factorial n

--Example 2
drop :: Int -> [a] -> [a]
drop 0 xs = xs
drop (n+1) [] = []
drop (n+1) (_:xs) = drop n xs
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我在编译时遇到错误.

  • 代码编译失败
  • 模式中的解析错误:n + 1

更新:感谢您指出正确的术语.我发现了这个n + k模式.由于自2010年以来已经删除了n + k个模式,我还发现了关于如何启用此模式的问题.

syntax haskell functional-programming

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

是否可以在C#中为静态类或静态方法生成动态代理?

我试图想出一种方法(动态或实例)方法调用可以被动态代理拦截.我想将它作为c#扩展方法实现,但坚持如何为静态方法生成动态代理.

一些用法:

Repository.GetAll<T>().CacheForMinutes(10);
Repository.GetAll<T>().LogWhenErrorOccurs();

//or     
var repo = new Repository();
repo.GetAll<T>().CacheForMinutes(10);
repo.GetAll<T>().LogWhenErrorOccurs();
Run Code Online (Sandbox Code Playgroud)

我对任何图书馆(linfu,castle.dynamic proxy 2等)开放.

谢谢!

c# aop castle-dynamicproxy

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

SQL Server EXECUTE sp_executesql中的DateTime操作

我正在尝试执行以下操作:

EXECUTE sp_executesql
    N'SELECT TOP 10 * FROM dbo.Items WHERE DateCreated BETWEEN @start AND @end'
    , N'@start DATETIME, @end DATETIME'
    , @start = '20091001'
    , @end = GETDATE() --problem is caused by this line

Error:
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.
Run Code Online (Sandbox Code Playgroud)

我需要操纵日期并将其作为参数传递,即一周的星期一,一年中的一个月等等.它甚至可能吗?

谢谢.

sql sql-server stored-procedures

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

ruby获取url内容始终为空

我很沮丧,试图使用Ruby来获取特定的url内容.

我尝试了许多不同的方式,比如open-uri,标准请求到目前为止都没有.我总是得到空的HTML.我还尝试使用python来获取始终返回正确html内容的相同url.我真的不确定为什么......请帮助我,因为我对Ruby和Python都是新手... 我想使用Ruby(更喜欢整洁的语法和人性化的函数名称,更容易使用gem和homebrew安装libs(在mac上) )比python easy_install)但我现在正在考虑Python,因为它只是工作(但仍然试图让我的头围绕2.x和3.x问题).我可能会做一些非常愚蠢的事情,但我认为这是不太可能的.

ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-darwin10.6.0]

实施1:

url = URI.parse('http//:www.stackoverflow.com/') req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|   http.request(req) }    
puts res.body #empty
Run Code Online (Sandbox Code Playgroud)

实施2:

doc = Nokogiri::HTML(open("http//:www.stackoverflow.com/", "User-Agent" => "Safari"))
#empty
#I tried to use without user agent, without Nokogiri none worked.
Run Code Online (Sandbox Code Playgroud)

Python实现每次都很完美

f = urllib.urlopen("http//:www.stackoverflow.com/")
# Read from the object, storing the page's contents in 's'.
s = f.read()
f.close()

print s
Run Code Online (Sandbox Code Playgroud)

ruby python url http

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

使用Task.Run的C#WebClient仅实现5%的网络使用率.为什么?

我正在试验/学习新的Task库,我使用WebClient和Task.Run编写了一个非常简单的html下载器.但是我的网络使用率永远不会超过5%.我想了解为什么以及如何改进我的代码以达到100%的网络使用/吞吐量(可能不可能,但它必须超过5%).

我也希望能够限制线程的数量,但它似乎并不像我想象的那么容易(即自定义任务调度程序).有没有办法只做这样的事情来设置最大线程数:something.SetMaxThread(2)?

internal static class Program
    {
        private static void Main()
        {
            for (var i = 0; i < 1000000; i++)
            {
                Go(i, Thread.CurrentThread.ManagedThreadId);
            }

            Console.Read();
        }

        private static readonly Action<int, int> Go = (counter, threadId) => Task.Run(() =>
        {
            var stopwatch = new Stopwatch();
            stopwatch.Start();

            var webClient = new WebClient();
            webClient.DownloadString(new Uri("http://stackoverflow.com"));

            stopwatch.Stop();

            Console.Write("{0} == {1} | ", threadId.ToString("D3"), Thread.CurrentThread.ManagedThreadId.ToString("D3"));
            Console.WriteLine("{0}: {1}ms ", counter.ToString("D3"), stopwatch.ElapsedMilliseconds.ToString("D4"));
        });
    }
Run Code Online (Sandbox Code Playgroud)

这是@spender的异步版本.但是我的理解是await将"记住"该时间点并将下载切换到OS级别并跳过(2 console.write)并立即返回main并继续在for循环中调度剩余的Go方法.我理解正确吗?因此UI上没有阻止.

private static async void Go(int counter, int threadId)
{
    using …
Run Code Online (Sandbox Code Playgroud)

c# concurrency web-crawler task-parallel-library

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