有没有办法在 C 中进行柯里化?

2023-11-26

假设我有一个指向函数的指针_stack_push(stack* stk, void* el)。我希望能够打电话curry(_stack_push, my_stack)并返回一个只需要的函数void* el。我想不出一种方法来做到这一点,因为 C 不允许运行时函数定义,但我知道这里有比我聪明得多的人:)。有任何想法吗?


我找到了 Laurent Dami 的一篇论文,讨论了 C/C++/Objective-C 中的柯里化:

使用柯里化函数提高 C/C++/Objective-c 中函数的可重用性

对它如何在 C 中实现感兴趣:

我们当前的实现使用现有的 C 结构来添加柯里化机制。这比修改编译器要容易得多,并且足以证明柯里化的兴趣。然而,这种方法有两个缺点。首先,柯里化函数无法进行类型检查,因此需要谨慎使用以避免错误。其次,柯里化函数无法知道其参数的大小,并且将它们视为全部整数大小。

该论文不包含实现curry(),但你可以想象它是如何实现的函数指针 and 可变参数函数.

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

有没有办法在 C 中进行柯里化? 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 我是否总是需要转义非“文字”字符串中的元字符?

    似乎有一个包含字符的字符串 or 在正则表达式处理期间被拒绝 我可以理解这些是保留字符 我需要转义它们 所以如果我这样做 string replaceAll pattern 这有效 在哪里pattern是任何以以下开头的字符串 问题 有没有
  • React-native:“无法连接到开发服务器”- Android 应用程序

    我正在遵循启动react js 的指南 http code tutsplus com tutorials creating a dictionary app using react native for android cms 24969我
  • 当某些条件成立时 Scala FoldLeft

    如何在 Scala 中模拟以下行为 即在满足累加器上的某些特定条件时继续折叠 def foldLeftWhile B z B p B gt Boolean op B A gt B B 例如 scala gt val seq Seq 1 2
  • 如何使用 Cucumber 测试确认对话框?

    我正在将 Ruby on Rails 与 Cucumber 和 Capybara 一起使用 我将如何测试一个简单的确认命令 你确定吗 另外 我在哪里可以找到有关此问题的更多文档 硒驱动程序现在支持这个 从 Capybara 中 您可以像这样
  • 为什么 std::array::size constexpr 具有简单类型(int、double、...)而不是 std::vector (GCC)?

    以下代码 std array
  • js while(true){} 阻止事件循环

    setInterval function console log hello 2000 while true hello 永远不会被打印 我认为事件循环在不同的线程中运行 但这里似乎 while 循环 阻止了 事件循环 的执行 有人可以解释
  • 从 FF 中的选择框中删除轮廓

    是否可以删除选择元素中所选项目周围的虚线 我尝试添加outlineCSS 中的属性但它不起作用 至少在 FF 中不起作用 Update在继续删除大纲之前 请阅读本文 http www outlinenone com Well 双像素的答案简
  • 将模板传递给“rails new”

    当调用 rails new 时 显然可以通过 m 命令行参数传递某种模板或设置脚本 我发现这个通过https github com fortuity rails3 mongoid devise wiki Tutorial 演练 And ht
  • 由空格分隔的两个字符串自动连接

    我刚刚发现了一些非常有趣的东西 这是由我的打字错误引入的 这是一个非常简单的代码脚本示例 printf A B 结果将是 gt AB 有人可以解释这是如何发生的吗 作为 C 标准的一部分 相邻的字符串文字被连接起来 对于C 引用C99 但C
  • 谷歌分析 API V3 / OAuth 2

    我拼命地试图自己解决这个问题 并且不想带着这个问题来解决这个问题 但我已经束手无策了 不感谢 api oauth 文档 我正在 PHP 中工作 我试图避免使用Google Client and AnalyticsService类 通过使用
  • Android 中的并发文件访问

    我知道许多操作系统对文件系统执行某种锁定以防止视图不一致 Java 和 或 Android 对文件访问的线程安全性有任何保证吗 在我自己编写并发代码之前 我想尽可能多地了解这一点 如果我错过了已回答的类似问题 请随时关闭此线程 谢谢 And
  • 服务发现如何与现代 docker/docker-compose 一起工作?

    我正在使用 Docker 1 11 1 和 docker compose 1 8 0 rc2 在过去的美好时光 所以 去年 你可以建立一个docker compose yml像这样的文件 app image myapp frontend i
  • 使用 pika 发布消息时如何添加标头键:值对

    我正在编写一个自动化测试来测试消费者 到目前为止 我在发布消息时不需要包含标头 但现在我需要了 而且似乎缺乏文档 这是我的出版商 class RMQProducer object def init self host exchange ro
  • NSView 的自动调整大小行为

    我需要了解 NSView 如何自动调整其视图的大小 我已经在 IB 中设置了所有内容 并且我的子视图可以很好地调整大小 当我用鼠标调整窗口大小时 但是 如果我这样做 myMainView setFrame 使用我的新框架矩形 什么也没有发生
  • 如何将html5输入类型日期和时间转换为javascript日期时间

    我正在使用 html5 输入类型 日期和时间 如何将表单输入类型转换为javascript对象日期 其中包含时间 这是我的代码的一部分
  • 在 .NET 中使用 XML 注释有哪些优点?

    我无法理解使用 XML 注释的优点 我知道它们可以转换为代码外部的漂亮文档 但使用更简洁的 DOxygen 语法也可以实现同样的效果 我认为 XML 注释是错误的 因为 他们总体上混淆了注释和代码 它们更难被人类阅读 在单个屏幕上可以查看的
  • ggplot2:y 轴标签在绘图区域内左对齐

    我正在寻找一种自动移动 y 轴刻度标签的方法 以便它们显示左对齐within实际地块面积 我喜欢 ggplot 中主题组件的总体灵活性 但在尝试找到通用方法来实现此目的时遇到了困难 我知道给予axis text y的组合hjust 0负右边
  • cmake 是否可以选择避免使用未定义的变量(如 bash set-u)

    Does cmake有一种在使用未定义变量时生成错误的机制 有点像set u选项中bash 我有一个由多个项目组成的大项目CMakeLists txt文件 大约 1500 行 所以使用这种结构是相当困难的 if NOT DEFINED VA
  • 在 Angular 2 中重置模板驱动的表单(模型和验证)

    我们如何重置控件的验证状态模板驱动角度 2 的形式 我知道可以通过设置控件所绑定的模型值来重置控件 但是验证状态 原始 肮脏等 又如何呢 我尝试过这样的事情
  • 有没有办法在 C 中进行柯里化?

    假设我有一个指向函数的指针 stack push stack stk void el 我希望能够打电话curry stack push my stack 并返回一个只需要的函数void el 我想不出一种方法来做到这一点 因为 C 不允许运