如何在方案中设置默认或可选参数?

2024-01-05

我试图弄清楚如何在方案中设置默认或可选参数。

我试过了(define (func a #!optional b) (+ a b))但我找不到方法来检查是否b是一个默认参数,因为只需调用(func 1 2)会给出错误:

Error: +: number required, but got #("halt") [func, +]

我也尝试过(define (func a [b 0]) (+ a b))但我收到以下错误:

Error: execute: unbound symbol: "b" [func]

如果有帮助我正在使用琵琶计划 http://www.biwascheme.org/index.html如所用repl.it https://repl.it/languages/scheme


这在 Racket 中效果很好:

(define (func a (b 0)) ; same as [b 0]
  (+ a b))

例如:

(func 4)
=> 4
(func 3 2)
=> 5

...但这不是标准语法,它取决于所使用的方案解释器。有处理可变数量参数的语法,它可用于处理具有默认值的可选参数,但它看起来不太漂亮:

(define (func a . b)
  (+ a (if (null? b) 0 (car b))))

它是如何工作的?b is a list的论点。如果为空,则使用零,否则使用第一个元素的值。

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

如何在方案中设置默认或可选参数? 的相关文章

  • 为什么我的 Scheme 函数返回错误“应用程序:不是过程”?

    我想获得 a b c 的第二个值 但我不想使用 cadr 我可以得到正确的答案 car cdr a b c b 但是当我构建该函数时 define test lambda list car cdr list test a b c 我收到以下
  • Common Lisp 中的(随机)不那么随机?

    好的 最后一个问题 我将用 Common Lisp 完成我的猜数游戏 D 每当游戏开始 或者在第一个游戏之后开始新游戏 时 都会调用以下函数 Play the game defun play If it s their first time
  • 展开方案中的函数

    Goal 实施unfold仅使用两个参数的函数 论据 第一个参数是 f 它接受某种类型 I 的初始值并返回 nil 或两个元素的 cons 对 这两个元素中的第一个是某种类型 A 的列表中的下一个元素 下一个初始值又是某些类型 I 第二个参
  • LISP 中的变量和符号有什么区别?

    从范围上来说 内存中的实际实现 语法 例如 if let a 1 a 是变量还是符号 约尔格的回答指出了正确的方向 让我补充一点 我将讨论与 Common Lisp 类似的 Lisp 作为数据结构的符号 符号是 Lisp 中真实的数据结构
  • 访问Scheme中的调用堆栈深度

    为了演示尾递归的有效性 我想要一种在Scheme中动态访问调用堆栈深度的方法 有没有办法做到这一点 如果没有 有没有办法在其他主要函数语言 OCaml Haskell 等 中做到这一点 Racket 允许您在调用堆栈中存储值 您可以使用它来
  • 如何在方案中向后打印字符串?

    我知道如果我按照以下方式编写方案代码并输入 单词 a b c 它将以相同的顺序输出列表 您能告诉我是否有一种方法可以以相反的顺序打印出来 例如 列出 c b a 它需要是我以相反顺序打印出来的用户输入 所以 我不能称之为 反向 a b c
  • 如何解释方案表达式 '(a 'b)

    a b 给出答案 a b 当 a 没有绑定 未加引号 时 这是如何工作的 这就是我们计算表达式时发生的情况 a b gt a b The quote 是简写quote http docs racket lang org guide quot
  • 在 Java Runtime.getRuntime().exec(...) 中使用引号和双引号

    我正在尝试在 Mac OSX 中从 Java 启动 Lisp 映像 使用控制台中的图像 我输入以下内容 lisp image eval package method some argument 一切都运行良好 在Java中 我在使用传递引号
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • 如何获取 SICP、Scheme、练习 2.78 等中的 put 和 get 函数

    我正在尝试在 SICP 中做练习 2 78 但 put 和 get 函数未知 我尝试过多种语言 比如相当大 racket r5rs mit scheme mzscheme等 我什至下载了SICP支持 http www neilvandyke
  • 为什么 LISP 中符号名称中的连字符是约定俗成的?

    这个推荐的理由是什么 为什么不与使用下划线的其他编程语言保持一致 我认为 LISP 使用连字符有两个原因 历史 和 因为你可以 History LISP 是一种古老的语言 在早期输入下划线可能会很困难 例如 我用于 LISP 的第一个终端是
  • 方案如何返回多个值?

    我注意到几乎所有方案函数只能返回一个列表作为输出 下面 我想返回邻居的所有相邻节点的多个值 define neighbors l w if and 1 l 1 w list and l 1 w and 1 l w how to output
  • 学习 LISP 的最佳方法是什么? [关闭]

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

    当观看下面的 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
  • 什么是 S 表达式

    所有 Lisp 开发人员似乎都知道什么是 S 表达式 但有人能为非 Lisp 开发者解释一下这一点吗 已经有一个维基百科条目 https en wikipedia org wiki S expression https en wikiped
  • 为什么《小阴谋家》中的所有 lambda 表达式都是如此?

    在从 SICP 学习了一些计划之后 我开始阅读 小计划 我觉得这本书很有趣 并且已经完成了大约四分之一 我注意到我可以在不使用 lambda 的情况下编写许多 大多数 全部 解决方案 而 The Little Scheduleralways
  • 如何在mit-scheme中正确使用(读取)?

    我在文档和 Rosetta 代码中读到 read 用于从控制台获取输入 所以我写了这段代码来检查这一点 display read 1 但 mit scheme 从不要求用户输入 程序就会终止 为什么会这样呢 在 REPL 中 display
  • 在 Slime 中复制/猛拉整个 Lisp 表单

    有没有办法在 Slime Emacs 中复制 猛拉整个表单 例如 如果我有以下功能 myfunc lst myotherfunc lst 我想复制 复制 myotherfunc lst 当我的光标位于该表单的左括号或右括号时 在 Slime
  • 将数字转换为英文字母列表

    我有下面的函数 它将数字输入转换为这些数字的部分翻译的单词输出 使用乘积和商 它将数字的单词表示相加 同时将数字分组 例如 number name 87969087 gt 87 million 969 thousand 87 number

随机推荐

  • Request["xx"] 和 Request.Form["xx"] 之间的区别?

    有什么区别吗Request xx vs Request Form xx 我正在想办法 前者将返回一个值 如果xx存在于QueryString Form Cookies or ServerVariables收藏 它将依次遍历每个值 直到找到一
  • 通过本地计算机上的 SQL Server Management Studio 访问 Azure VM 上的 SQL Server

    我确信这个东西就在某个地方 但我找不到它 我的大脑很痛 我在 Azure 上有一个虚拟机 它上面运行着 SQL Server 我可以在虚拟机上本地访问它 没有问题 但我想通过 SQL Server Management Studio 从我的
  • 在 iTExt 中的表格单元格中绘制对角线?

    我正在创建一个表iText 但是我有一个可以被除以的单元格的问题对角线 有人知道我该怎么做吗 最简单的方法是通过onGenericTag处理程序在PdfPageEvent 您可以通过以下方式为该单元格的内容提供通用标签Chunk setGe
  • 禁用 matplotlib 的默认箭头键绑定

    使用 matplotlib 的mpl connect功能 可以将事件绑定到函数调用 但是 左箭头键和右箭头键默认绑定为在图窗历史记录中 后退 和 前进 我想禁用这个默认绑定 例如 import matplotlib pyplot as pl
  • 如何创建带有图标和文本的 JList?

    我有这个代码想要制作JList谈论文本和图标必须做什么 有些人建议我制作标签列表 并在表格中放置文本和图标 这可能吗 如何 搜索于 用于嵌入评论 import javax swing JPanel import javax swing JB
  • cocoa pods 在 iOS 项目上安装不起作用

    我有一个 React Native 项目 想要为 iOS 本机细节安装 cocoa pod 但安装失败 我在 Mac book pro 上有 ruby ruby 2 5 1p57 我已将错误发布下来 非常感谢您的帮助 pod install
  • 在 Sql 中连接时如何使用 case

    如何编写这样的查询 SELECT FROM table1 t1 case when id 1 then join table2 t2 on t1 id t2 t1id else join table3 t3 on t1 id t3 t1id
  • Android 中的导航抽屉和 VideoView

    我正在使用导航抽屉和选项卡布局 我的选项卡中有一个视频 起初不可见 但我可以听到声音 一旦我设置 video view setZOrderOnTop true 我也可以看到视频 但这会导致issue带导航抽屉 当我滑动它时 视频不会像所有其
  • 修复旧 Git 提交中的许可证

    我有一个当前私有的 GitHub 存储库 它已经存在了几年了 在里面README md文件中有一个许可证 但不再准确 现在我想将这个私人仓库变成公共仓库 并具有固定许可证 无论如何 所有旧的提交仍然包含旧的 错误的 许可证 我该如何解决这个
  • 如何使用 JSP 创建选项卡式 Html 页面

    我想创建选项卡式 Html 页面 每个选项卡上都有多个提交按钮 如何使用 JSP 创建选项卡式 html 页面 这是不相关的事情JSP 这是关于你如何在客户端 您可以使用很多 jQuery Tab 插件 但首先 您可以使用如下所示的内容 让
  • JavaScript 5 中 for 和 foreach 的区别

    我了解到 一个for即使不存在指向的情况 也会迭代数组的每个元素 而forEach跳过不存在的情况 此外 当一个for被写入 必须指定一个计数器 我不是在谈论for in 同时一个forEach仅使用函数迭代器 出色地 您能回答以下四个问题
  • 使用新 Gmail 主题时,Google Tasks API 不会提供有关任务完成情况的更新

    首先 我使用以下链接创建了一个任务 https mail google com tasks canvas https mail google com tasks canvas 然后我将其标记为已完成 当我使用以下命令检查 API 响应时 服
  • Caliburn Launch 不带 App.xaml,但带有引导程序

    我有一个 WinForms 项目 我想从 WPF 用户控件项目中打开 WPF 窗口 但是 当我创建 WPF 窗口的实例并调用 Show 时 引导程序未加载 在 Windows 应用程序中 它位于 App xaml 中 但用户控件项目没有它
  • 就地修改文本文件的最佳方法是什么?

    我有一个文本文件 我们称之为 Potatoes txt 其中包含以下信息 Town 1 300 Town 2 205 Town 3 600 Town 4 910 Town 5 360 我想要做的是减少某些城镇的数量 并相应地修改文本文件 我
  • ASP.NET MVC 2 - ViewModel 前缀

    我想在我的视图中使用 RenderPartial 两次 并关联不同的模型 问题是两个模型中都存在某些属性 昵称 密码 它们没有前缀 因此即使 id 或名称在输出中也是相同的 现在 如果我的昵称或密码有模型错误 两个字段都会突出显示 主视图
  • 有没有办法使用 ARKit 加载 FBX 文件?

    在我的项目中 我使用 ARKit 定位 3D 文件 我能够加载 dae and obj格式模型 有什么办法可以加载 fbx files Updated 2023 年 1 月 14 日 关于信息 FBX你可以找到转换HERE https st
  • 代码存储库。有什么好的? [关闭]

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

    我正在开发一个带有录音机和播放器的应用程序 我正在使用媒体播放器播放录制的 wav 文件 同时我想更新到搜索栏 一切工作正常 但我的问题是媒体播放器进度更新到搜索栏并不顺利 如果我们正在播放一个小文件 搜索栏的拇指会在几秒钟或几秒钟内跳跃
  • 准备好的语句或可调用语句

    我试图理解之间的区别PreparedStatements CallableStatements我没能得到它 所以请任何人都可以转换以下内容sql查询至CallableStatement 我知道如何将 Statement 转换为Prepare
  • 如何在方案中设置默认或可选参数?

    我试图弄清楚如何在方案中设置默认或可选参数 我试过了 define func a optional b a b 但我找不到方法来检查是否b是一个默认参数 因为只需调用 func 1 2 会给出错误 Error number required