【问题标题】:How do I prevent GHCI from evaluating an infinite stream?如何防止 GHCI 评估无限流?
【发布时间】:2016-02-24 21:10:57
【问题描述】:

有时在使用 GHCI 时,我不小心尝试评估无限流(例如 [1..])。它一直在打印……打印……打印……打印……所以问题是停止打印的唯一方法是退出控制台,丢失我已经完成的所有内容那个会议。有没有办法让 GHCI 默认只取列表中的前 x 项?

【问题讨论】:

  • 您可以通过按CTRL-Cbreak(与大多数其他程序一样;))
  • 顺便说一句:如果你在 emacs 中这样做,你可能必须按 C 两次(C-c-c),它可能会填满相当多的内存,因为缓冲区会记住它
  • 酷!我从来不知道这行得通!除了像 ghci 或 python 这样的交互式控制台,我几乎从不使用控制台。
  • 请参阅stackoverflow.com/q/35613612/1172541 以获得解决方法。

标签: haskell ghci


【解决方案1】:

只需使用Ctrl+C即可中断进程:

Prelude > let x = 1
Prelude > [1..]
lots of stuff... Interrupted.
Prelude > print x
1

除此之外,我相信除了开始使用take 编写表达式以确保输出有限之外,您实际上无能为力...最终列表只有 一个可能的无限输出,ghci 无法可靠地知道什么需要缩短,什么不需要。他只是将结果shows 并输出。

【讨论】:

  • 一个更通用的解决方案(如果您不只是使用列表)是take x . show
猜你喜欢
  • 2019-08-06
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多