超时的 Haskell 函数[重复]

2024-01-27

import Math.NumberTheory.Primes (factorise)
import System.Timeout (timeout)
import Control.Monad (liftM)

type RetType = [(Integer, Int)] -- factorise's return type

-- proposed function
timedFact :: Integer -> Integer -> Either RetType Integer
timedFact u n = ?

尝试了解如何编写因式分解的包装函数,该函数在使用后超时。如果成功则返回RetType否则它返回Integer(传入的内容)

我对 Haskell 有点陌生。我了解超时需要在IOMonad,但我很难拉回适当的结果。 (注:我没有结婚Either. Maybe RetType也会好的)。

谢谢你的帮助


从类型来看,timeout :: Int -> IO a -> IO (Maybe a),它可以用作

import Math.NumberTheory.Primes (factorise)
import System.Timeout (timeout)
import Control.Exception (evaluate)
import Control.DeepSeq (force)

timedFact :: Int -> Integer -> IO (Maybe [(Integer, Int)])
timedFact u = 
      timeout u . evaluate . force . factorise 

Testing:

 #> timedFact 3000000 1231231231223234234273434343469494949494499437141
Nothing
(3.04 secs, 2639142736 bytes)

 #> timedFact 4000000 1231231231223234234273434343469494949494499437141
Just [(1009,1),(47729236307,1),(125199345589541,1),(204202903382078984027,1)]
(3.07 secs, 2662489296 bytes)

update: as 用户2407038 在评论中说 https://stackoverflow.com/questions/32878244/haskell-functions-which-time-out/32878368?noredirect=1#comment53589782_32878368(谢谢!),

timedFact u n = timeout u (return $!! factorise n)

也有效。($!!)来自Control.DeepSeq也。引用文档,“在表达式 f $!! x 中,x 在函数 f 应用于它之前被完全求值” https://hackage.haskell.org/package/deepseq-1.4.1.2/docs/Control-DeepSeq.html#v:-36--33--33-.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超时的 Haskell 函数[重复] 的相关文章

随机推荐

  • Java Quartz 内存泄漏消息

    我的网络应用程序中有一个quartz 工作 它是由servlet 启动的 当我重新部署我的应用程序时 我收到以下消息 DefaultQuartzScheduler Worker 5 but has failed to stop it Thi
  • 如何向字符串添加双引号字符?

    如何向给定字符串添加双引号字符 local str foo 我怎样才能得到字符串 foo 其中字符串包含前导和尾随引号 您可以将引号粘贴到字符串上 local str foo print foo gt foo print foo gt fo
  • 角度 6 元素布尔输入参数

    我正在构建一个角元素并向其传递一些输入参数 我可以很好地传递一些字符串输入参数 ikrId 和环境工作完美 但很难通过角元素 将 showTitle 属性从父角度组件传递给组件效果很好 这是组件片段 export class MyCompo
  • 网络线程阻塞 GUI

    我正在研究 C 和 WPF 我正在开发一个应处理 LAN 上的数据传输的应用程序 特别是 每次传输都会显示进度条 如果是下载 则为绿色 如果是上传 则为红色 最初 我做了一些虚构的尝试 其中我模拟了传输 网络线程被停用 因此 以编程方式填充
  • 使用实体框架加入视图时使用 .Include() [重复]

    这个问题在这里已经有答案了 我使用索引视图 它是一个没有任何关系的实体 与我的表实体的关系会更好 但这似乎几乎不可能实现 该视图由 4 个 FK 组成 它们共同构成 PK PortalID CategoryID BranchID Compa
  • Rails 仅在有条件时才验证唯一性

    我有一个问题课 class Question lt ActiveRecord Base attr accessible user id created on validates uniqueness of created on scope
  • 创建自定义文本绘制视图

    我正在为 iPhone 创建一个语法荧光笔 为了显示多种格式的文本 我对 UIView 进行了子类化并修改了drawRect 方法 以便使用正确的语法突出显示显示每一行 突出显示是用 RegEx 提前完成的 文本是用CGContextSho
  • 获取网络浏览器控件的屏幕截图?

    关于这个问题有很多线索 但没有一个是明确的 而且我尝试过的任何一个实际上都没有工作正常 获取整个 Web 浏览器控件的内容 甚至是屏幕外的内容 的代码是什么 看起来他们确实有 webBrowser1 DrawToBitmap but its
  • 跨平台 SSO - 从哪里开始?

    我正在研究两个不同系统之间的单点登录选项 一个 NET 一个 Java EE 它们各自独立管理并具有单独的用户管理 并且存在一些重叠的用户 我希望能够从一个链接到另一个 而无需重新提示输入密码 SSO 产品和协议似乎有很多选择 我相当有信心
  • 如何过滤对象中的数组

    我的对象中有这些数组 我需要filter tags具有特定值的数组 我不知道如何实现这一目标 const obj slug add an aggregate rating feature to your website frontmatte
  • 无法使用 Debian squeeze 在 Sheevaplug (armv5t) 上构建节点

    我现在已经尝试了几种在运行 Debian 版本 6 0 2 squeeze 的 Sheevaplug armv5t 上构建节点 版本 0 5 1 的方法 但最终总是 node Illegal instruction 在所有情况下我都可以编译
  • 处理 ThreadPoolExecutor 的异常

    我有以下代码片段 基本上扫描需要执行的任务列表 然后将每个任务交给执行器执行 The JobExecutor依次创建另一个执行器 用于执行数据库操作 读取数据并将数据写入队列 并完成任务 JobExecutor返回一个Future
  • data.table 在函数中修改后首次调用时不显示[重复]

    这个问题在这里已经有答案了 在我的函数中 我修改作为参数给出的 data table 的列 我注意到 如果我在调用该函数后尝试显示此 data table 我的意思是 仅按其名称 则不会发生任何事情 并且只有后续调用才会显示该表 DT lt
  • 如何使用 CMake 链接 .so 文件 [重复]

    这个问题在这里已经有答案了 我想基于 cpp h 和多个 so 文件重建一个简单的应用程序 据我所见 我的 CMakeLists txt 应该是这样的 cmake minimum required VERSION 3 5 set CMAKE
  • Team Foundation 工作项类型中的产品待办事项列表项和功能之间的区别

    我有关于 Microsoft Team Foundation 的问题 在 Visual Studio 的团队资源管理器中 我可以创建一个新的工作项 此处的工作项类型由您的团队选择的流程模板决定 我不确定我们使用的是哪个流程模板 无论如何 在
  • 使用 numpy 进行高效迭代

    我编写了计算数组 y 的周期 p 中每个元素的平均值的代码 import numpy as np p 4 y np asarray 146 96 59 133 192 127 79 186 272 155 98 219 c len y p
  • JS 错误:元素未附加到文档

    我正在尝试使用将 div 转换为图像html2canvas https html2canvas hertzen com lib 但我不断收到该错误 html2canvas min js 20 Uncaught in promise Erro
  • UNHEX 和 X (MySQL) 之间的区别

    在处理数据库中的十六进制值时 MySQL UNHEX 和 X 之间到底有什么区别 Eg SELECT FROM test WHERE guidCol IN UNHEX hexadecimalstring SELECT FROM test W
  • 为什么不在一个类中编码呢? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 现在我正在学习设计模式 我正在徘徊以下内容 为什么不在 1 个类中编写所有方法 每个方法执行 1 个任务 这样我的客户端就可以访问 1 个文件中
  • 超时的 Haskell 函数[重复]

    这个问题在这里已经有答案了 import Math NumberTheory Primes factorise import System Timeout timeout import Control Monad liftM type Re