首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Common Lisp:DO的空变量列表

Common Lisp是一种通用的、动态类型的、多范式的编程语言,它是Lisp家族中的一个实现。在Common Lisp中,DO是一个循环控制结构,用于执行一系列迭代操作。

DO的语法如下:

代码语言:txt
复制
(do (variable-clause* )
    (end-test-form result-form*)
  declaration*
  step-form*)

其中,variable-clause是一个变量子句,用于定义循环中的变量。end-test-form是一个表达式,用于测试循环是否应该终止。result-form是一个表达式,用于在循环结束时返回一个值。declaration是一个声明,用于定义变量的类型或其他属性。step-form是一个表达式,用于更新变量的值。

在DO循环中,变量子句可以包含一个或多个变量,每个变量可以有一个初始值和一个步长。例如,以下DO循环将从1到10迭代:

代码语言:txt
复制
(do ((i 1 (+ i 1)))
    ((> i 10) 'done)
  (print i))

在这个例子中,变量子句定义了一个变量i,初始值为1,步长为1。end-test-form测试i是否大于10,如果是,则循环结束。result-form返回一个值'done'。step-form将i的值加1。

空变量列表是指在DO循环中没有定义任何变量。在这种情况下,变量子句可以省略,只需要在循环中使用step-form来更新变量的值。例如,以下DO循环将打印1到10的数字:

代码语言:txt
复制
(do ()
    ((> i 10) 'done)
  (print i)
  (setf i (+ i 1)))

在这个例子中,变量子句被省略了,因此没有定义任何变量。在step-form中,我们使用setf函数来更新变量i的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Kotlin】安全 ① ( Kotlin 安全机制 | 变量可空性 | 默认变量不可赋值 | 声明可类型变量 )

文章目录 一、Kotlin 安全机制 二、变量可空性 1、默认变量不可赋值 2、声明可类型变量 一、Kotlin 安全机制 ---- Java 中指针问题 : 在 Java 语言...Kotlin 程序 代码健壮性 ; 二、变量可空性 ---- 1、默认变量不可赋值 在 Java 中 , 引用类型变量 默认为 null 值 ; 但是在 Kotlin 中 , 变量默认不可为...null 值 , 这样所有的 变量 在默认状态下 , 都有一个 默认实例对象 , 从而极大 减少了 指针异常 出现概率 ; 代码示例 : 先定义一个 name 变量 , 为其赋值字符串 "Tom...: Null can not be a value of a non-null type String 这是因为 var name 变量 默认为非 , 在 Kotlin 中 不允许将 默认变量...赋值一个值 , 除非 将该变量声明为 可类型 ; 2、声明可类型变量 声明可类型变量 : 如果要声明一个 可类型变量 , 必须 声明该变量具体类型 , 并在该类型后添加 ?

1.9K20

Lisp语言简介_c++是什么语言

这个比较小众编程到底是什么~ ————————————————————————— LISP(全名LISt Processor,即列表处理语言),由约翰·麦卡锡在1960年左右创造一种基于λ演算函数式编程语言...LISP有很多种方言,各个实现中语言不完全一样。1980年代Guy L. Steele编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。...LISP语言主要现代版本包括Common Lisp和Scheme。 基本介绍 LISP 是第一個函數型程式語言,区别于C/Java等命令型编程语言。...在 Lisp 中我们习惯用原子 t 表示真,而用表 () 表示假。...当表达式以七个原始操作符中五个开头时,它总会对其自变量求值.

2.3K20
  • ObjectDataSource选择业务对象列表探讨

    前天晚上,在一个页面上拖了一个ObjectDataSource,配置数据源时发现选择业务对象列表没有列出当前项目的实体类,甚至连NewLife.CommonEntity中实体类也没有列出来。...至少,这说明了问题跟我们组件有关。     于是一个个组件一个个版本试,终于确定只要把CommonEntity库更换到12月21日版本就没有问题。于是查看了版本日志,以及代码变更。...vs2010调试vs2010,打开.Net源码调试,很悲剧,vs2010源码是不公开,同时因为没有合适启动项目,压根就没地方下断点!     很不情愿安装了非常不熟悉WinDbg。...开始时候总是提示sos版本不对,后来.chain看来,发现2和4都加载了,还是默认自动加载,悲剧,没有人告诉我怎么卸载,我猜.unload,懒得打参数,还真是。。。卸载最后一个。    ...u看看这个方法汇编,是否与IL大致相同。一般来说,会有85%相同,毕竟jit会优化嘛,特别是内联。

    1.4K70

    .NET Core工程编译事件$(TargetDir)变量引发思考

    $(TargetPath)变量 很快,我就发现了问题。...在.NET Core工程中,很多变量是获取不到值,如下命令: echo 准备复制"$(TargetPath)" call...但是在VS命令行编辑工具里面,这些变量应该都是有值: ? 于是我回想起来了,之前似乎就是遇到这个问题,因为时间紧迫,自己写了一个命令行工具代替了之前命令。...找过了stackoverflow,没发现有用信息,不过最终在Github找到了一些有用内容。...但是大哥,都这么久了,为啥通过项目工程界面编辑,生成元素还是PostBuildEvent,你们这不是坑人么。。。 说明一点,VS界面的调整跟不上相关API和规则调整。。。 问题似乎解决了: ?

    86310

    Paul Graham:梦寐以求编程语言

    Perl和Common Lisp在这方面是两个不同极端。Perl语法单位很短,导致它代码可以拥挤得让人无法理解,而Common Lisp内置运算符名称则长得可笑。...Common Lisp设计者们可能觉得文本编辑器会帮助用户自动填写运算符长名称。但是这样做代价不仅是增加了打字工作量,还包括提高了阅读代码难度,以及占用了更多显示器空间。...如果用户真的是傻瓜,不管你怎么保护他,他还是会搬起石头砸自己脚。你也许能够阻止他引用另一个模块中变量,但是你没法防止他日日夜夜不知疲倦地写出结构混乱程序去解决完全错误问题。...are one place Common Lisp falls short....Common Lisp is not.The good news is, it's not Lisp that sucks, but Common Lisp.

    92620

    Emacs 折腾记

    我工作中倒并没有用得到 Lisp 地方,但是最近眼前晃过一些书,比如《计算机程序构造和解释》、《码农》杂志第 13 期,都对这门古老语言推崇备至,还有垠神也撰文《Lisp 已死,Lisp 万岁!...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置情况下 M-x ielm 就能进入一个 Emacs Lisp REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。...Update: 后来经验证,发现实际上是 sbcl 在安装过程中写环境变量没有生效导致,sbcl 在安装过程中会设置两个环境变量,新建一个 SBCL_HOME 值为 sbcl 安装路径,在 PATH...)) (slime-setup '(slime-company)) M-x slime 就可以进入到 REPL 进行 Common Lisp 学习了。

    1.9K10

    Clojure与LispClojure与Lisp

    (艾伦·凯) "任何C或Fortran程序复杂到一定程度之后,都会包含一个临时开发、只有一半功能、不完全符合规格、到处都是bug、运行速度很慢Common Lisp实现。"...1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。...自稳定运行Common Lisp出现起,再有各机构按各自所需而开展后续Lisp,包括1990年来自欧洲用户EuLisp、运行于Java虚拟机Clojure、受到Maclisp影响而创Emacs...3 递归 Lisp是第一种支持递归函数高级语言。 4 变量动态类型 在Lisp语言中,所有变量实际上都是指针,所指向值有类型之分,而变量本身没有。...在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp基本数据结构。 用一门语言自己数据结构来表达该语言,这被证明是非常强大功能。

    1.9K30

    不管是嵌套 XML,还是 Lisp 嵌套括号,还是 XXX Map 数据结构,一切都是树形结构——映射。Lisp本质(The Natur

    乘法函数Lisp内置函数, 默 认赋给, 你可以把其他函数赋值给, 那样*就不代表乘法了。你也可以把这函数值存 到另外变量里。...例如(这回我们用真正Lisp语法, 注意用分号表示注释): () ; 表 (1) ; 含一个元素表 (1 "test...而且, Lisp没有语义约束, 你可以构造 任何数据结构, 只要你原意。 Lisp通过宏(macro)来做元编程。我们写一组宏来把任务列表(to-do list)转换为专用领 域语言。...例如, 上面曾经将过C求三次方宏, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: 在Common Lisp中, 此处单引号应当是反单引号...这里作者所用记 号是自己发明一种Lisp方言Blaise, 和common lisp略有不同, 事实上, 发明方言是 lisp高手独有的乐趣, 很多狂热分子都热衷这样做。

    1.4K20

    Python教程(9)——Python变量类型列表list用法介绍

    列表是可变,这意味着您可以修改列表内容。你可以通过索引来访问和修改列表特定元素。索引从0开始,即第一个元素索引为0。最后一个元素索引为-1。...访问列表创建了列表之后,我们肯定是需要访问列表,在Python中,有几种常见方式可以访问列表(list)中元素:通过索引访问:可以使用索引来访问列表特定元素。...print(my_count) # 2这些是一些常用访问列表方式,可以根据具体需求选择合适方式来操作列表元素。...选择具体方式取决于你需求。修改列表元素在Python中,可以使用索引或切片来修改列表元素。下面我们给出几种修改列表元素常见方法:使用索引赋值:可以通过使用索引来定位并直接修改列表元素。...删除列表元素是列表操作中比较容易出错,有几个方面需要特别注意(当然对于零基础编程经验初学者暂时先不用管):确保元素存在:在删除列表元素之前,要确保要删除元素确实存在于列表中,否则会引发异常。

    29110

    使用下标给string类型赋值之后,cout输出变量问题。

    今天写创建文件夹时候,怎么创建都不会,反复修改,确定错误是出在了string类型变量上面。...,以及子文件夹,根据参数来做,有则略过,无则创建 但是我发现根本创建不了文件夹 我试着输出循环中fileurl_s_cy[i],能够正常输出我想要字符 但是当我输出fileurl_s_cy时候出了问题...,fileurl_s_cy至始至终为,长度也为,导致无法正常创建文件夹 明明可以正常输出fileurl_s_cy[i],但是无法正常输出fileurl_s_cy,本以为是’\0’问题,发现加上也无济于事...,所以无法使用 奇怪是输出fileurl_s_cy[i]居然也不报错。...解决方法如下: 声明时候改为std::string fileurl_s_cy(len,’\0’); 这样就可以正常使用下标赋值,输出以及整体输出 怕忘记,记录与此。

    5K40

    【C 语言】使用 “ 初始化列表 “ 方式创建 “ 匿名变量 “ ( C 语言中 “ 匿名变量 “ 概念 | “ 初始化列表 “ 语法 | 代码示例 )

    一、使用初始化列表方式创建匿名变量 1、C 语言中 " 匿名变量 " 概念 在 C 语言中 , “匿名变量” 指的是 在 表达式中 直接创建 和 初始化变量 , 不为该变量指定显式变量名 ; C 语言..." 初始化列表 " 语法 ; 2、" 匿名变量 " 使用场景 一次性使用 : " 匿名变量 " 通常在一次性操作场景中使用 , 避免定义额外变量名 , 仅在本表达式中生效 , 该表达式执行完毕后 ,..., 或者 函数参数传递时 , 经常使用到 匿名变量 ; 3、" 初始化列表 " 语法 在 C 语言中 , 使用初始化列表方式创建 " 匿名变量 " , 该方式 在表达式中 直接定义 和 初始化变量 ,..., x 和 y ; struct Point { int x; int y; }; 使用 初始化列表 方式 创建 结构体类型匿名变量 ; struct Point point = (...struct Point){ .x = 5, .y = 3 }; 3、创建 数组类型 匿名变量 使用 初始化列表 方式创建 数组类型 匿名变量 , 这个匿名变量可以传入到 函数 中作为参数 ; (int

    17410

    各种编程语言对尾递归支持

    Common Lisp   测完Scheme,再来测Scheme本家兄弟,另外一种Lisp——Common Lisp   先用Common Lisp实现add,因为Common Lisp将数据和过程用不同命名空间...RESET   因为没有尾递归优化规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...但是似乎也改变了Lisp味道,do显然此处只能在设计编译器、解释器时候就得单独实现,虽然按理Lisp下这些都应该是宏,但是无论用宏如何将函数式编程映射为显示迭代,因为尾clisp递归优化不支持,则无法和系统提供...sbcl是Common Lisp另外一个实现,在这个实现中,我们使用第一个add函数版本,没有发生崩栈。...也终于给了我们一个更为靠谱Common Lisp实现。

    2.7K20

    Emacs Lisp

    LISP 编程语族已经演变出许多种方言,现代最著名通用编程语种是 Common Lisp 和 Scheme , 以上解释来自 WIKI Emacs LispLisp 一个分支 Emacs Lisp...,一种直译式脚本语言,为LISP方言之一,GNU Emacs与XEmacs文字编辑器都使用这个编程语言来扩展它们功能,它直译器是以C语言来实作,它受到Maclisp影响很大,但是跟Common...;; Lisp中使用括号构造列表,使用setq给变量赋值。...;; 下面的命令先构造一个列表,再把这个列表赋给list-of-names变量 (setq list-of-names '("Sarah" "Chloe" "Mathilde")) ;; ^这里单引号表示这是一个列表...函数对列表列表每一个元素分别取出来,赋给hello函数 (mapcar 'hello list-of-names) ;; 重新定义greeting函数,在一个新,清空buffer中,对list-of-names

    2.3K40

    Emacs Lisp

    LISP 编程语族已经演变出许多种方言,现代最著名通用编程语种是 Common Lisp 和 Scheme , 以上解释来自 WIKI Emacs LispLisp 一个分支 Emacs Lisp...,一种直译式脚本语言,为LISP方言之一,GNU Emacs与XEmacs文字编辑器都使用这个编程语言来扩展它们功能,它直译器是以C语言来实作,它受到Maclisp影响很大,但是跟Common...;; Lisp中使用括号构造列表,使用setq给变量赋值。...;; 下面的命令先构造一个列表,再把这个列表赋给list-of-names变量 (setq list-of-names '("Sarah" "Chloe" "Mathilde")) ;; ^这里单引号表示这是一个列表...函数对列表列表每一个元素分别取出来,赋给hello函数 (mapcar 'hello list-of-names) ;; 重新定义greeting函数,在一个新,清空buffer中,对list-of-names

    2.2K30

    几分钟内学习 Clojure

    Clojure 是JVM上一个LISP语言变种,它比Common Lisp更强调纯函数式编程,但提供了一些STM工具以处理它所引入状态问题。...Clojure源码托管在:github 在线练习编译环境: himera learnclojure.clj 示例: ; 分号作为注释开始 ; Clojure 用一种把元素用括号括起来列表一样方式来书写...Hello World" ;你可以使用def来创建变量 (def x 1) x ; => 1 ; 将函数赋值给一个变量 (def hello-world (fn [] "Hello World"))...") ; => nil ; 使用let 来创建临时绑定 (let [a 1 b 2] (> a b)) ; => false ; 执行多条语句,返回最后一条语句 (do (print "Hello...") "World") ; => "World" (prints "Hello") ; 所有的函数都包含一个隐式do (defn print-and-say-hello [name] (print

    1.7K40
    领券