F# 类型提供程序与 Lisp 宏

2024-05-10

我一直在阅读有关 F# 3.0 类型提供程序的内容(例如here http://msdn.microsoft.com/en-us/library/hh156509.aspx)并且它们似乎基于一种编译时代码生成。在这方面我想知道它们与 Lisp 宏相比如何。看起来 F# 3.0 类型提供程序和 Lisp 宏都允许用户代码在编译时执行并引入可供编译器使用的新类型。任何人都可以阐明这个问题和所涉及的细微差别吗?


F# 类型提供程序和其他语言的元编程技术之间存在一些重叠,但我同意 Daniel 的观点,即它们没有太多共同点。 F# 还有一些其他元编程技术,例如可能更接近 LISP 宏的引用。

尤其:

  • LISP 宏通常用于转换表达式(您可以采用 LISP 表达式并解释它或转换它,然后执行它)。请注意,转换采用 LISP 表达式作为输入 - 另一方面,类型提供程序只能采用非常有限的参数(字符串、整数)。

  • 引文更相似。它们可用于处理 F# 表达式 - 您可以将一段 F# 代码视为数据并对其进行解释或转换。该转换采用 F# 表达式(的子集),但通常不会执行它。

  • 类型提供程序纯粹用于生成types。由于 LISP 是动态类型的,因此这实际上并不是 LISP 中的问题。然而,它是一种代码生成(您当然可以在 LISP 中进行的一种元编程形式)。

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

F# 类型提供程序与 Lisp 宏 的相关文章

  • setf中的f代表什么?

    LISP 有setf函数给变量赋值 现在我一直想知道该函数的名称 Theset部分是显而易见的 但是什么是f后缀代表 F的实际含义经常被忘记 根据一些消息来源 f 后缀可以代表 字段 例如参见这个answer https stackover
  • Google Test 宏似乎不适用于 Lambda 函数

    所以 我有以下代码 无论 Interpolator 类的细节是什么 在这种情况下它都不应该抛出异常 这就是我想要测试的 TEST errorhandlingInterpolator toolargeInput const size t nu
  • F# 核心库源代码有一个用于将元组编译为结构的标志,但我无法使其工作

    这是后续问题这个提议 https fslang uservoice com forums 245727 f language suggestions 6148669 short tuples compiled as structs up t
  • PHP 内部:TSRMLS_FETCH 如何工作?

    PHP 内部结构是怎样的TSRMLS FETCH宏发挥作用吗 Per the PHP手册 http php net manual en internals2 memory tsrm php 在开发扩展时 包含 tsrm ls is unde
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • 使用Lisp或Scheme进行Java程序的运行时配置

    我现在看到几个项目在实际配置取决于仅在运行时可用的东西时结束 配置 Java 程序的典型方法是根据某些应用程序特定规则读取一个或多个属性文件 然后根据它们的值采取操作 在某一时刻 这种情况会崩溃 您需要在配置中使用实际的程序逻辑 然后可以用
  • 在类型扩展中重载运算符

    好的 所以我基本上尝试将绑定运算符添加到选项类型中 似乎我尝试的所有内容都有一些不明显的警告阻止我这样做 我怀疑这与 NET 类型系统的限制有关 并且可能与类型类无法在用户代码中实现的原因相同 不管怎样 我已经尝试了一些事情 首先 我尝试了
  • 如何在 F# 中定义这种惰性(无限?)数据结构

    我在定义以下简单文本光标时遇到问题 该光标由元组表示 其中第一个元素是当前字符 如果函数获取下一个元素或崩溃 则第二个元素是 let rec nextAt index text if index lt String length text
  • 对 F# 中任意嵌套级别的列表求和

    我正在尝试创建一个 F 函数 它将返回列表的总和int任意嵌套 IE 它将适用于list
  • Common Lisp 反引号/反引号:如何使用?

    我在使用 Lisp 的反引号读取宏时遇到问题 每当我尝试编写一个似乎需要使用嵌入式反引号的宏时 例如 w x y 来自保罗 格雷厄姆的ANSI 通用 Lisp 第 399 页 我不知道如何以编译的方式编写代码 通常 我的代码会收到一整串错误
  • 专家 f# 脚本编译奇怪

    第 209 210 页有一个扩展示例 见下文 我使用的是 F 4 5 总之 我不明白的是 如果我单独键入每个语句 则会有一个声明引发错误 如果我立即提交整个脚本 以及引发错误的声明之后的函数 则一切正常 那么 当我批量提交所有语句时 交互中
  • Scheme 和 Common Lisp 之间的实际区别是什么? (或任何其他两种 Lisp 方言)

    注意 我并不是在问学哪个 哪个更好或者诸如此类的问题 我选择了 SICP 的免费版本 因为我觉得它读起来很好 我听说过有关它的好东西 并且我对编程的这一方面很感兴趣 我知道Scheme 是Lisp 的一种方言 我想知道 Scheme 和Co
  • 如何更改 Python 函数的表示形式?

    gt gt gt def hehe return spam gt gt gt repr hehe
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • 何时使用接口,何时使用高阶函数?

    给定一个具有以下层的 ASP NET MVC 应用程序 UI 视图 CSS Javascript 等 控制器 服务 包含业务逻辑和数据访问 没有单独的数据访问层的原因是我正在使用 SQL 类型提供程序 以下代码可能不起作用 因为它只是原始草
  • 如何在 F# 中组合 Result<> 列表?

    用这个代码 let a 3 4 5 6 7 let check x if x 2 0 then Ok x else Error x let b a gt List map check 我如何将 B 总结为 如果一切OK 则Ok 如果有任何错
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • .Net 中可用的并行技术

    我是 Net 平台的新手 我查了一下 发现 Net中有几种做并行计算的方法 任务并行库中的并行任务 即 Net 3 5 PLINQ Net 4 0 异步编程 Net 2 0 异步主要用于执行 I O 繁重的任务 F 有简洁的语法支持这一点
  • 对C宏扩展和整数运算感到困惑[重复]

    这个问题在这里已经有答案了 可能的重复 一个谜语 C https stackoverflow com questions 5611724 a riddle in c 我对以下代码片段有几个问题 include
  • 使用异步工作流程并行化的最佳实践

    假设我想抓取一个网页并提取一些数据 我很可能会写这样的东西 let getAllHyperlinks url string async let req WebRequest Create url let rsp req GetRespons

随机推荐