Lisp中函数参数是如何存储的?

2023-12-27

我假设传递给 Lisp 函数的值被分配给与参数名称匹配的引号。然而,令我惊讶的是:

(defun test (x) (print (eval 'x)))
(test 5)

不起作用(变量 x 未绑定)。因此,如果参数在函数中不存储为符号,那么本例中的 x 到底是什么?有没有办法从与参数名称匹配的符号访问参数?

更多背景: 我想做的是这样的:

defun slice (r1 c1 r2 c2 board)
  (dolist (param '(r1 c1 r2 c2))  ;adjust for negative indices
    (if (< (eval param) 0)
      (set param (+ (length board) (eval param)))))
        ;Body of function

基本上,我想迭代前四个参数,并在它们的任何值


这基本上就是词法绑定的工作原理:变量名称在词法范围内被替换为对变量值存储位置的直接引用。绑定变量名symbol-value仅适用于您可以声明的动态变量special.

避免重复的一种方法是使用宏:

(defmacro with-adjusting ((&rest vars) adjust-value &body body)
  `(let ,(loop for var in vars
               collect `(,var (if (minusp ,var)
                                (+ ,var ,adjust-value)
                                ,var)))
     ,@body))

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

Lisp中函数参数是如何存储的? 的相关文章

  • Jenkins 文本参数 - 特殊字符乱码(不需要的变量替换)

    我在 Jenkins Linux 下 有一份工作构建参数 https wiki jenkins ci org display JENKINS Parameterized Build类型为 文本 我使用参数来形成在构建过程中使用的文件的内容
  • 如何在 jQuery 中声明和使用函数

    我想知道如何在 jQuery 脚本中声明函数 我现在拥有的 function adjust menu alert test test 但是当我这样称呼它时 first link click function adjust menu 它不起作
  • 函数名前的星号有什么作用?

    我对在大多数具有我不熟悉的函数声明的 C 程序中看到的内容感到困惑 void func name void param 什么是 暗示该功能 我的理解 在变量类型中的特点是它创建一个指向另一个变量的指针 因此它可以跟踪后一个变量存储在内存中的
  • 一次性的 lisp 宏,我的实现正确吗?

    我正在尝试从 Peter Seibel 的书 Practical Common Lisp 中学习 Lisp 在第 8 章 宏 定义你自己的 http www gigamonkeys com book macros defining your
  • SqlCommand 参数与 String.Format [重复]

    这个问题在这里已经有答案了 我一直在互联网上搜索 但似乎找不到任何可以解释我的问题的内容 可能是我没有使用正确的搜索字符串 所以我在这里发帖希望有人可以帮助我有了这个 我的程序是使用Visual Studio 2010用C 编写的 我注意到
  • 为什么我的函数将布尔值更改为“on”?

    所以我是 php 编程世界的新手 我正在在线学习和其他形式等 但我找不到任何东西来帮助回答我的问题 这就是我在这里的原因 任何帮助当然不胜感激 谢谢 我想将下面的代码变成我可以调用的函数 它的工作原理如下所示 如果我选中表单中的复选框 它会
  • 如何在 Angular @Input 中仅接受预定义值

    我的问题是 我在 a 中收到一个字符串值作为组件的参数 但我想限制可以用作参数的值 就像enum I use Input type string 但是在组件中 一切都可以引入type正如我之前所说 我需要将其限制为 3 个选项 例如Enum
  • 从函数体内访问函数对象的属性

    JavaScript 中的函数也是一个对象 并且可以具有属性 那么有没有办法从它自己的函数体内部访问它的属性呢 像这样 var f function console log some way to access f a f a Test f
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • 什么是异地退货?

    什么是非本地退货 什么场景下有用 请举个例子来解释一下 这是一篇好文章 http yehudakatz com 2010 02 07 the building blocks of ruby 关于在 ruby 块的上下文中使用非本地返回 Ru
  • 关于执行令的问题

    我正在尝试学习 Common Lisp 并在 repl 中尝试某些东西时发现了一些意想不到的东西 对我来说 基于大多数编程语言的执行顺序 以及我一直从 lisp 听到的出色的一流函数支持 我认为以下应该可行 if t format t te
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • 如何在 NHibernate 命名查询参数上设置 C# 可为空值类型值?

    我正在使用 NHibernate 并通过命名查询调用存储过程
  • 点击事件的事件处理程序自动触发 - jQuery [重复]

    这个问题在这里已经有答案了 可能的重复 为什么单击事件处理程序会在页面加载后立即触发 https stackoverflow com questions 7102413 why does click event handler fire i
  • 可以声明对 Rust 中未使用的结果发出警告的函数吗? [复制]

    这个问题在这里已经有答案了 Rust 是否有办法声明一个函数 对于任何类型 不使用其结果都会发出警告 类似于 GCC 的东西 attribute warn unused result 自 1 27 起 must use 也适用于函数 看来
  • putc 和 ungetc 和有什么区别?

    int ungetc int c FILE fp 将字符 c 推回 fp 并返回 c 或EOF对于一个错误 其中 intputc int c FILE fp 将字符 c 写入文件 fp 并返回写入的字符 或者EOF对于一个错误 这些是 K
  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 如何使用另一个方法的签名创建一个新方法

    如何从一个类复制方法的签名 并在另一个类中创建具有相同签名的 代理方法 我正在用 python 编写一个 RPC 库 服务器支持对服务器端类 C 的远程调用 当客户端连接到服务器时 它应该为C创建一个具有相同签名的代理类 当程序调用代理实例
  • HttpUrlConnection addRequestProperty 方法不传递参数

    我有一些工作java代码 它执行以下操作 URL myUrl new URL http localhost 8080 webservice user username password password request x HttpURLC

随机推荐

  • Flex 可重入以用户特定状态启动

    Flex 设置YY STATE to INITIAL默认情况下 当yyscan t叫做 我正在尝试制作一个可重入扫描仪 可以从特定于用户的状态而不是 INITIAL 这是案例 comment start not passed into fl
  • 我可以重新调整旧的提交吗?

    我刚刚开始使用 git Rebase 是很棒的东西 我应该在之前的特定案例中使用它 为了清晰的提交 是否有一种完全可以接受的方法来重新调整旧提交的基础 您应该只对尚未推送到上游的提交执行此操作 也就是说 我发现最容易使用git rebase
  • false 的未定义方法 `+@':FalseClass (NoMethodError) ruby

    def next prime number last known prime while true last known prime found factor false ERROR for i in 1 last known prime
  • 如何从库中启动 Android 应用程序中的 Activity

    我在 Android Studio 中有一个 Android 应用程序 我已经在应用程序中添加了一个库 按钮 视图和活动在库中定义 当我单击按钮时 我需要导航到应用程序中定义的活动 通常 为了导航到另一个页面 我们使用意图 如下所示 Int
  • 如何本地化 iOS info.plist 文件中的字符串?

    As you might know the iOS 8 requires NSLocationWhenInUseUsageDescription key for using user s location I have added this
  • 有没有办法将外部 Javascript 作为 Jasmine 的来源?

    我正在尝试配置 jasmine yml 使用 jasmine gem 以使用 Google API 提供的 JQuery 而不是将其本地下载到我的服务器 IE src files ajax googleapis com ajax libs
  • Lubuntu 中的多个光标 - Shift + Alt + 箭头(向上/向下)

    在使用时 多光标功能对我来说非常有效Xubuntu https en wikipedia org wiki Xubuntu 我最近安装了Lubuntu https en wikipedia org wiki Lubuntu非常失望的是 我意
  • std::vector::iterator 可以简单地是 T* 吗?

    简单的理论问题 简单的指针是否是有效的迭代器类型std vector 对于其他容器 例如列表 地图 这是不可能的 但是对于std vector所保存的数据保证是连续的 所以我认为没有理由不这样做 据我所知 一些实现 例如 Visual St
  • html 重置后,javascript 事件丢失

    我遇到过这样一种情况 div 的 html 内容有时会更改为其他内容 然后又更改回来 一些 jquery ui 控件行为不当 我已将问题简化为以下代码片段 它基本上表明与按钮关联的事件处理程序不再触发 我假设这些在它们消失后的某个时刻被垃圾
  • phoneGap (Cordova) 内部如何工作,特定于 iOS

    我已经开始为多个平台开发 html 应用程序 我最近听说了 Cordova 2 0 PhoneGap 从那时起我就很好奇这座桥是如何工作的 经过大量代码检查后 我发现 Exec js 是 JS gt Native 调用发生的代码 execX
  • 使用 Odata 查询基于 EF 的 DTO

    我有一个 ASP NET Core Web API 设置 其中包含 SQL Server 数据库和 EF 数据模型 版本 EF Microsoft EntityFrameworkCore 5 0 0 预览版 7 20365 15 OData
  • jQuery $.get 在 Chrome 中不起作用

    解决方案不起作用 在浪费了一整天学习前端 Web 开发之后 我将进度条放入 iframe 中 该 iframe 在 jquery 对话框内启动 期望 ajax get 请求从该页面开始工作 不幸的是我收到了完全相同的行为 发现问题 当您按
  • sonarqube“新代码”定义

    关于默认的质量门 奇怪的是 我们不清楚 新代码 的定义 为了说明这一点 假设我们通过添加新代码来更改文件 默认声纳质量门分析是仅对新代码行还是整个文件进行 我们不清楚 但怀疑这是整个文件 同事告诉我 项目未通过质量关卡 因为带有预先存在的阻
  • 形状渐变

    我正在尝试在按钮上执行渐变 但无法使其具有与按钮其他部分相同的渐变 我尝试在渐变中添加渐变 但它似乎不起作用并且找不到解决方案 这是我正在使用的代码 button color white padding 3px 3px 3px 0px bo
  • 如何将 CSV / MySQL 数据初始批量导入 Neo4j 数据库

    我正在考虑用 neo4j 数据库替换 MySQL 数据库 我是 neo4j 的初学者 想知道如何将我当前的 MySQL 数据批量插入到 neo4j 数据库中 以便我可以进行实验并开始了解 neo4j 关系数据库由4个表组成 Person O
  • 检索函数的返回类型而不调用该函数

    假设我在 TypeScript 中有一个这样的函数 export const foo function return a 1 b true c bar 如果我将此函数导入到另一个文件中 import foo from foobar 我的问题
  • 克隆 HashSet 的有效方法?

    前几天我回答过一个有趣的问题 https stackoverflow com questions 3897568 substract hashsets and return a copy就这样关于HashSet
  • 如何使用最小起订量模拟 ConfigurationManager.AppSettings

    我陷入了我不知道如何模拟的代码点 ConfigurationManager AppSettings User 我必须模拟 ConfigurationManager 但我不知道 我正在使用Moq http code google com p
  • Android:如何将解码器集成到多媒体框架

    最近我成功地将视频解码器移植到Android 还将输出转储到 SurfaceView 上并使用本机 API 检查输出 现在下一个任务是实现播放 暂停 流媒体等 即媒体播放器的其他功能 这样做将需要返工 因为所有这些功能都已在 Android
  • Lisp中函数参数是如何存储的?

    我假设传递给 Lisp 函数的值被分配给与参数名称匹配的引号 然而 令我惊讶的是 defun test x print eval x test 5 不起作用 变量 x 未绑定 因此 如果参数在函数中不存储为符号 那么本例中的 x 到底是什么