小编itc*_*yny的帖子

为什么ghc会因优化标志而改变评估方式?

您好,我遇到过ghc优化标志的有线行为.优化标志似乎改变了评估方式.综上所述,

  • 我编写了一个包含primesisPrime通过引用彼此定义的代码.
  • 我发现该程序运行良好ghc -O3,但我不能runhaskell用来得到结果.这花费了太多时间.
  • 我注意到,当我使用时ghc -O1,结果立即出现-O3,但编译的可执行文件ghc -O0无法在一分钟内计算结果.
  • 我曾经Debug.Trace.trace发现,primes每次isPrime调用时都会从它的开始进行评估.
  • 我感动的定义primes,并isPrime到另一个文件Prime.hs.在主文件中,我导入了Prime库.不幸的是,编译的可执行文件ghc -O3不会在一分钟内计算结果.

这是描述.请参阅以下代码.

main :: IO ()
main = print $ length $ filter isPrime [100000..1000000]

primes :: Integral a => [a]
primes = 2 : filter isPrime [3,5..]

isPrime :: Integral a => a -> Bool
isPrime n = n > 1 && …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

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

我们可以使用chrome.downloads.download完全下载网页吗?(谷歌Chrome扩展程序)

我想从Google Chrome扩展程序中完全保存wabpage.我添加了"downloads", "<all_urls>"权限并确认以下代码将Google页面保存到google.html.

  chrome.downloads.download(
            { url: "http://www.google.com",
              filename: "google.html" },
            function (x) { console.log(x); })
Run Code Online (Sandbox Code Playgroud)

但是,此代码仅保存html文件.样式表,脚本和图像不会保存.我想完全保存网页,好像我用对话框保存页面,选择Format: Webpage, Complete.

我调查了文件,但找不到办法.

所以我的问题是:如何使用谷歌浏览器的api完全从扩展程序下载网页?

javascript google-chrome google-chrome-extension

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

如何使用带有socket的cat?

在阅读command的源代码时cat,我发现catcommand支持从socket读取。您可以在http://src.gnu-darwin.org/src/bin/cat/cat.c.html查看源代码。但我从未在套接字上使用此命令:只是快速查看文件或连接多个文件。+ 套接字可以做什么catcat您能举一个使用从套接字读取命令的有趣示例吗?谢谢。

unix sockets cat

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

如何使用unix命令将字符串拆分为具有特定宽度的行?当输入字符串是无限的?

我想转换

Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He...
Run Code Online (Sandbox Code Playgroud)

Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He
llo.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hell
o.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.
Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He
...,
Run Code Online (Sandbox Code Playgroud)

其中宽度为80个字符.

我首先想到我可以使用sed.(让我用5字符解释而不是80字符来澄清.)

echo "longlonglonglonglonglonglonglonglonglonglonglong" | sed 's/\(.\{5\}\)/\1\'$'\n/g'
Run Code Online (Sandbox Code Playgroud)

longl
onglo
nglon
glong
longl
onglo
nglon
glong
longl
ong
Run Code Online (Sandbox Code Playgroud)

我想要的.但是,当输入字符串永远持续时,我无法使用这种方式.

while true; do; echo -n "Hello."; done | sed 's/\(.\{5\}\)/\1\'$'\n/g'
Run Code Online (Sandbox Code Playgroud)

上面的命令不起作用.我也试过用perl,但徒劳无功.(perl -pe 's/(.{5})/$1\n/g')所以我放弃了在unix命令中解决并在C中编写了一个小程序.

#include <stdio.h>
int main(int argc, char *argv[]) {
  int i = 0, ch;
  while ((ch = fgetc(stdin)) != EOF) {
    putchar((char)ch);
    i += 1;
    if (ch == '\n') {
      i …
Run Code Online (Sandbox Code Playgroud)

unix perl sed

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

Makefile:懒惰变量中的shell函数不是懒惰的

考虑以下 Makefile。

$(shell touch /tmp/example.txt)
FILE := /tmp/example.txt
CONTENTS = $(shell cat $(FILE); bash -c 'echo [debugging id: $$RANDOM]')

.PHONY: all
all:
    @cat $(FILE)
    @echo '$$(CONTENTS):' $(CONTENTS)
    bash -c 'echo file-contents-$$RANDOM' > $(FILE)
    @cat $(FILE)
    @echo '$$(CONTENTS):' $(CONTENTS) # This line outputs the old contents. Why?
Run Code Online (Sandbox Code Playgroud)

它打印文件的内容,用新内容覆盖并再次打印内容。它显示为(在第二次拍摄之后make):

file-contents-1543
$(CONTENTS): file-contents-1543 [debugging id: 15172]
bash -c 'echo file-contents-$RANDOM' > /tmp/example.txt
file-contents-22441
$(CONTENTS): file-contents-1543 [debugging id: 151]
Run Code Online (Sandbox Code Playgroud)

旧内容file-contents-1543和新内容file-contents-22441(数字是随机的),但最后一行echo $(CONTENTS)不打印新内容。我认为该命令实际上在调试 id 显示时被调用了两次,但在将新内容写入文件之前,lazy 变量中的 shell 函数似乎已被执行。 …

makefile

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