热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lisp:如何使用递归来定义给定非负整数N的函数,生成从1到包括N的所有整数的列表?

如何解决《Lisp:如何使用递归来定义给定非负整数N的函数,生成从1到包括N的所有整数的列表?》经验,为你挑选了1个好方法。

在lisp中写一个名为number(N)的函数,你必须使用一个非负整数N,并产生从1到包括N的所有整数的列表.

(defun numbers (N)  
  (if (<= N 0)
      nil
      (cons N nil)
      (numbers (- N 1)))

我检查了一些问题,但大多数都使用循环和范围,但这个问题不允许我这样做,所以我必须使用递归代替:

这是我的代码,但是这段代码不断给我警告:

; caught STYLE-WARNING:
;   The variable N is defined but never used.
; 
; compilation unit finished
;   caught 1 ERROR condition
;   caught 1 STYLE-WARNING condition

我认为我的算法是正确的,但因为我是lisp的新手,我仍然不知道如何正确编写函数.如果有人能给我任何帮助,我们将不胜感激.



1> Rainer Joswi..:

IF通常具有通用语法,但也有例外

通常在Lisp中,如Common Lisp,if运算符允许以下语法:

IF test-form then-form [else-form]

这意味着在Lisp中通常允许零或一个else形式.ifCommon Lisp 就是一个例子.

在Emacs中,Lisp 允许多个其他形式.Emacs Lisp具有以下语法:

IF test-form then-form else-form* 

这意味着在Emacs Lisp 中允许使用零个或多个其他形式.

因此:重要的是要提到您实际使用的语言和方言.

你的代码

a)假设您使用Common Lisp及其IF语法.

你的代码:

(defun numbers (N)  
  (if (<= N 0)
      nil
    (cons N nil)
    (numbers (- N 1)))

您的代码存在问题,即有多个else子句.您需要编写一个具有单个else子句的版本.

b)假设您使用带有多个其他形式的IF语法的Emacs Lisp .

你的代码:

(defun numbers (N)  
  (if (<= N 0)
      nil
    (cons N nil)
    (numbers (- N 1)))

这里(cons N nil)允许表单,但没有效果.它的返回值没有使用,也没有副作用.你可以删除它,它没有任何区别.再说一遍:您需要如何将其效果与表单相结合(numbers (- N 1)).

语法错误:缺少右括号

您的代码中还有另一个问题.s表达式不完整 - >缺少右括号:

(defun numbers (N)  
  (if (<= N 0)
      nil
      (cons N nil)
      (numbers (- N 1)))

如您所见,最后缺少一个右括号.

因此,Lisp无法读取您的代码.

通常有两种方法可以避免这个问题:

计算括号并相应地设置它们

使用编辑器计算括号

大多数人更喜欢后者.


推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • Haskell学习笔记:探索函数式编程之美
    使用教材:《learnyouaHaskell》,中文1-8章戳我准备工作。编译器&调试器:安装HaskellPlatform, ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文详细介绍了相机防抖的设置方法和使用技巧,包括索尼防抖设置、VR和Stabilizer档位的选择、机身菜单设置等。同时解释了相机防抖的原理,包括电子防抖和光学防抖的区别,以及它们对画质细节的影响。此外,还提到了一些运动相机的防抖方法,如大疆的Osmo Action的Rock Steady技术。通过本文,你将更好地理解相机防抖的重要性和使用技巧,提高拍摄体验。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了如何在使用emacs时去掉ubuntu的alt键默认功能,并提供了相应的操作步骤和注意事项。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • pc电脑如何投屏到电视?DLNA主要步骤通过DLNA连接,使用WindowsMediaPlayer的流媒体播放举例:电脑和电视机都是连接的 ... [详细]
  • Hyper Text Coffee Pot Control Protocol
    The ... [详细]
  • ANSI
    ANSI是什么编码?用Notepad创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII ... [详细]
  • 如何在Windows 10系统上成功安装Singular软件
    目录1.Singular2.使用Linux子系统2.1.使用命令行安装2.2.使用源码包安装3.使用Linux模拟器安装4.使用其他软件安装4.1.使用Sage安装1.Singul ... [详细]
  • 【技术分享】如何通过恶意插件在Atom中植入后门
    【技术分享】如何通过恶意插件在Atom中植入后门 ... [详细]
  • mysql和php的关系理解(php技术和mysql怎么结合)
    本文目录一览:1、apachephpmysql他们是什么关系 ... [详细]
author-avatar
王怡君3018
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有