为什么(begin)在Scheme中有效?

2023-12-19

我在 Racket 和 Chez Scheme 中进行了测试,发现(begin)是可以接受的,同时(define a (begin))不是。例如我得到的球拍

> (begin)
> (define a (begin))
; stdin:56:10: begin: empty form not allowed

我的问题是为什么(begin)到底允许吗?这有什么具体的原因/直觉吗?


表单开始有两个目的。

1. To sequence the evaluation of expressions 
2. To "splice" sequences together (used by macros)

第一个是最常用的:

(begin e0 e1 ...)

将按顺序评估表达式 e0 e1 ...。

当宏扩展为多个定义和/或表达式时,使用第二个。

举个例子,下面的

(begin
   (begin d1 e1 d2 d3)
   (begin)
   e2
   ...)

将被宏扩展器展平为:

(begin d1 e1 d2 d3 e2 ...)

现在的问题是“为什么(开始)被允许?”。如果begin用于目的 1(测序),然后是一个空的begin可能会被禁止。对于目的2(拼接)使用起来非常方便(begin)作为不执行任何操作的宏的结果。考虑一个宏(debug expression)要么扩展到expression(当启用调试时)或进入(begin)当调试被禁用时。

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

为什么(begin)在Scheme中有效? 的相关文章

  • 方案单词列表 eq?

    我有一个问题 我需要查找列表是否等于第二个列表 例如 set eq 1 2 3 1 2 3 gt t set eq 1 2 3 2 3 4 gt f 这些例子在我的程序中是正确的 但这个例子不是 set eq quote quote one
  • 方案中的延续传递风格?

    我遇到了这段代码在维基百科上 http en wikipedia org wiki Continuation passing style define pyth x y k x x lambda x2 y y lambda y2 x2 y2
  • 删除重复项并对列表进行排序

    我正在尝试编写一个过程 该过程采用一个可能包含或不包含重复项的列表 然后按排序顺序返回没有重复项的列表 到目前为止我想到的是 define remove duplicated list if null list if car list ca
  • 方案按引用传递

    如何在方案中通过引用传递变量 我想要的功能的示例 define foo lambda x set x 5 define y 2 foo y display y outputs 5 另外 有没有办法通过引用返回 See http commun
  • 方案 - 列表之和

    我正在尝试实现一个计算 list 的函数 其名称是sum define sum elemList if null elemList car elemList sum cdr elemList 0 上面的实现给出了错误的结果 例如 gt su
  • 将自然数转换为特定基数并将其作为列表返回

    我想将函数的结果显示为列表而不是数字 我的结果是 define lst list define num gt base n b if zero n append lst list 0 append lst list 10 num gt ba
  • 方案/球拍:画布操作

    1 正如标题所述 当我调整窗口大小时 我绘制的对象消失 但矩形保持原样 2 原点从左上角开始 但我希望它在左下角 3 除了绘图库之外 我找不到任何缩放功能 所以如果我希望实现这样的功能 一个选项是通过绘制更大的对象并刷新画布来 缩放 def
  • (Chez) 用于隐藏 lambda 的方案宏

    我想编写一个宏来创建速记语法来隐藏更详细的 lambda 表达式 但我很难理解如何编写宏 我意识到这是反对使用它们的一个论据 给出这个例子 define alist example x 1 2 3 y 4 5 6 z 7 8 9 defin
  • 展开方案中的函数

    Goal 实施unfold仅使用两个参数的函数 论据 第一个参数是 f 它接受某种类型 I 的初始值并返回 nil 或两个元素的 cons 对 这两个元素中的第一个是某种类型 A 的列表中的下一个元素 下一个初始值又是某些类型 I 第二个参
  • 如何在方案中向后打印字符串?

    我知道如果我按照以下方式编写方案代码并输入 单词 a b c 它将以相同的顺序输出列表 您能告诉我是否有一种方法可以以相反的顺序打印出来 例如 列出 c b a 它需要是我以相反顺序打印出来的用户输入 所以 我不能称之为 反向 a b c
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 学习 LISP 的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何让球拍不打印?

    我正在 Racket 中编写一个程序 我正在使用它运行racket foo rkt 这是可行的 除了程序顶层每个表达式的结果都会被打印 即使没有调用打印函数 就好像程序是逐行输入到 REPL 中的 但在这种情况下 我根本不尝试使用 REPL
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • Emacs Lisp 可以将 lambda 形式分配给像Scheme 这样的变量吗?

    在研究 Emacs Lisp 的符号单元时 我发现像这样的示例函数 defun a rest x x 我可以打电话 symbol function a 返回 lambda rest x x 如果我愿意的话我可以使用它 gt lambda r
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

    假设有两个函数 f 和 v 进一步假设 v 返回长度为 n 的列表 并且 f 需要恰好 n 个参数 我正在Scheme中寻找正确的语法 以将f应用于v返回的列表 如果我使用语法 f v v arguments 然后我收到一个关于 f 需要
  • 我在函数的最后一次递归调用中得到“方案应用程序而不是过程”

    所以这是代码 define time prime test n newline display n start prime test n runtime define start prime test n start time if pri
  • 如何使用 DrRacket 遵循 SimplyScheme 书籍

    我希望能够操纵句子 以便我可以将它们作为输入并根据单个字母等内容返回输出 例如 ends e 命令将返回所有以 e 结尾的单词 ends e only the good die young gt the die 不幸的是 e 是一个字符串
  • 使用Lisp或Scheme进行Java程序的运行时配置

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

    可以在Scheme中编写宏吗 用define syntax 例如 将采用如下表达式 op a b c d e f g h i j 并将像这样的yield表达式作为输出 op op op op op op op op op a b c d e

随机推荐

  • 在 Powershell 中获取 JavaScript 结果

    我有一个 CSHTML 文件 其中有一个块里面 它将显示用户名 for var i 0 i lt result2 Users length i var item li style width 100 result2 Users i Tcha
  • 如何检测并停止用户提供的 JavaScript 代码中的无限循环?

    我正在为游戏编写浏览器内代码编辑器 编辑器将允许用户编写自己的 JavaScript 文件 然后将其加载到编辑器运行所在的同一 DOM 中 这将使他们能够在代码旁边的画布元素中看到游戏 并在每次保存时更新它 该编辑器针对的是 JavaSri
  • jq 按键值排序

    给定以下 JSON 为了示例而过于简化 我需要按键的值对键进行排序 在这种情况下 顺序应该是 id gt name gt type link attributes value ConfigurationElement name type v
  • 测试时不会出现用于保存凭据的 Google Smart Lock 对话框

    我正在尝试将用户的 Facebook 凭据保存到 Google Smart Lock 但测试时遇到困难 我能够显示一次保存提示 但在我进入保存的密码 passwords google com 并删除保存的凭据后 提示不再出现 我进入谷歌设置
  • 如何创建 C# 会话对象包装器?

    如何创建一个可以像 IIS 一样获取和设置的类库Session我使用的对象var x objectname key 获取值或objectname key x设置值 通常我只有一个静态类来包装我的会话数据并使其类型安全 例如 public s
  • Google Custom Search Api 不断给我“usageLimits”错误

    我最近使用 Google 的自定义搜索 Api 注册了密钥 我达到了每日限额 因此注册了计费以启用更多请求 但是 我不断收到 usageLimit 错误 在我的项目的计费设置中 我看到计费已启用 在启用的 Api 中 我看到 自定义搜索 A
  • 找出金额中有多少千、百、十

    我有一个 asp 应用程序 金额栏就在那里 我需要查出这个数字有多少万 几百 几十 例如 如果我的金额为 3660 意味着 1000 3 100 6 10 6 像这样我需要 有谁能够帮助我 简单的答案是将该数字除以 1000 无论该金额中
  • 使用 StaticFileHandler 在 Tornado Python 上托管文件

    您好 我正在尝试在 Tornado 中使用 StaticFileHandler 其大部分工作正常 除了当我单击下载时它在网页中输出文件 csv 之外 我保存文件的唯一方法是右键单击并说 目标另存为 但这并不适用于所有浏览器 如何强制下载文件
  • 悬停时停止 jQuery 循环功能

    我有一个函数叫做testimonials 它基本上循环遍历一组 div 而它对一个 div 进行动画处理 将其动画处理出来 然后将下一个 div 进行动画处理 现在 我想让它在鼠标位于当前 DIV 上时停止在当前 DIV 上 也称为悬停它
  • 无法安装任何NPM包,错误4058

    我正在尝试在我的项目上安装 Grunt 它曾经完美地工作 但现在由于某种原因 它不能工作 每次我尝试安装 Grunt 时 都会收到此错误 npm ERR path C irrelevent path project node modules
  • 加速 Java

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 Java 项目 除了简单的代码优化之外 还有哪些不错的方法可以加速它 Secondly 用Java从头开始编写程序时 有哪些好的方法
  • 使用 go 结构进行 ASN.1 解组会出现标签不匹配错误

    我正在尝试对以下定义执行 ASN 1 marshal unmarshal 操作 ACEI SEQUENCE message MessageFields neRegNumber OCTET STRING OPTIONAL gpsInfo Gp
  • Python 相当于 find -exec

    我正在尝试在 Popen 中运行此 BASH 命令 find tmp mount type f name rpmsave exec rm f 但每次我得到 查找 stderr 中缺少 exec n 的参数 与此等效的 python 是什么
  • 结构对齐和类型重新解释

    假设我有两种类型 A 和 B 然后我做这个类型 struct Pair A a B b 现在我有一个这样的功能 void function Pair pair 让我们假设function只会使用a该对的一部分 那么这样使用和调用函数是不是未
  • 压缩列表中具有奇数和偶数索引的元素

    我想将偶数和奇数元素压缩到列表中以生成对列表 如下所示 A B C D E F gt A B C D E F 以优雅的功能方式做到这一点的最简洁的表达方式是什么 在 2 8 中 您可能会使用以下方法 scala gt val a ABCDE
  • 无法配置数据源:未指定“url”属性,无法配置嵌入数据源。春天

    我已经检查了所有类似的问题 每个答案都说我需要指定我已经这样做的 driverClassName 这是我的 application yml spring application name cibus backend datasource d
  • Tensorflow:variable_scope 值错误

    这是我的代码如下 Tensorflow LSTM classification of 16x30 images from future import print function import tensorflow as tf from t
  • Microsoft 不推荐的实体框架自我跟踪实体

    在查看微软的网站时 我发现他们不再推荐使用自我跟踪实体 下面的每个链接都是 MS 资源 其中提到不要使用 STE 显示实体框架团队可用的模板 EF 设计器代码生成模板 http msdn microsoft com en US data J
  • 无法在 Spring Web 服务中反序列化 START_ARRAY 令牌之外的对象实例

    我目前在 Android 上连接到我的网络服务时遇到问题 我使用 jackson core databind annotation 2 2 4 和 Spring RESTWebService 如果我从浏览器访问 URL 我可以看到 JSON
  • 为什么(begin)在Scheme中有效?

    我在 Racket 和 Chez Scheme 中进行了测试 发现 begin 是可以接受的 同时 define a begin 不是 例如我得到的球拍 gt begin gt define a begin stdin 56 10 begi