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

你能用十个原语实现任何纯LISP函数吗?(即没有类型谓词)

是的,我可以用十个原语实现任何纯LISP函数。以下是十个原语:

  1. atom:用于判断一个元素是否为原子(即不可再分的数据类型)。如果元素是原子,则返回真;否则返回假。
  2. eq:用于判断两个元素是否相等。如果两个元素相等,则返回真;否则返回假。
  3. car:用于获取一个列表的第一个元素。
  4. cdr:用于获取一个列表的除第一个元素外的剩余部分。
  5. cons:用于将两个元素组合成一个列表。
  6. cond:用于实现条件语句。根据给定的条件,选择执行相应的代码块。
  7. quote:用于返回一个表达式本身,而不是对其进行求值。
  8. lambda:用于定义一个匿名函数。
  9. label:用于给一个函数命名,以便可以递归调用。
  10. apply:用于将一个函数应用到一组参数上。

通过使用这些原语,可以实现任何纯LISP函数。这些原语提供了基本的操作,如判断相等、获取列表元素、组合列表、实现条件语句和定义函数等。通过适当地组合和使用这些原语,可以实现复杂的函数逻辑和算法。

请注意,这里没有提及特定的腾讯云产品或链接地址,因为这些原语是LISP编程语言的基本概念,与云计算领域的具体产品和服务无关。

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

相关·内容

Clojure与LispClojure与Lisp

(艾伦·凯) "任何C或Fortran程序复杂到一定程度之后,都会包含一个临时开发的、只有一半功能的、不完全符合规格的、到处都是bug的、运行速度很慢的Common Lisp实现。"...自2000年起,LISP共享者合力支援的自由开源社区逐渐形成,致力于LISP后续发展。 当前最新潮的编程语言,只是实现了他在1958年的设想而已。 这怎么可能呢?计算机技术的发展,不是日新月异?...一种数据类型应该有的功能,它都有。 3 递归 Lisp是第一种支持递归函数的高级语言。 4 变量的动态类型Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。...(2)专注:前缀运算符不需要去考虑优先级,也没有什么菱形继承的问题,动态类型系统(有利有弊),REPL提供的探索式编程方法(告别修改/编译/运行的死循环,所见所得)。...(4)清晰:函数(前面提到),immutable var,immutable数据结构,STM避免锁问题。不可变减少了心智的负担,降低了多线程编程的难度,函数也更利于测试和调试。

1.9K30

Lisp的本质(The Nature of Lisp)学习思考

Ant可以在简单原语的基础上写出更复杂的原语, 就像其他编程语言常用的作法一样。这也就是我们一开始提到的基于XML的编程语言。这样做用处不大(知道为甚么?), 但是真的很酷。...真正有意思的三种类型是符号(symbol), 表和函数。这一章的剩余部分, 我都会用来介绍这几种类型, 还要介绍Lisp环境是怎样编译和运行源码的。这个过程用Lisp的术语来说通常叫做求值。...Lisp函数的角色十分特殊, 函数也是一种数据类型, 就像整数和字符串一样, 因此可以把它赋值给符号。乘法函数Lisp的内置函数, 默认赋给*, 可以把其他函数赋值给*, 那样*就不代表乘法了。...而且, Lisp没有语义约束, 可以构造任何数据结构, 只要你原意。 Lisp通过宏(macro)来做元编程。我们写一组宏来把任务列表(to-do list)转换为专用领域语言。...学会Lisp也可能意味着明天可能会被解雇, 因为总是强调, 如果公司所有软件都用Lisp写, 公司将会如何卓越, 而这些话的同事会听烦的。Lisp值得努力学习?

1.7K60

clojure基础入门(一)

注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。...谓词函数 谓词函数是一个判断式,一个返回bool值的函数或者仿函数,用来测试条件是否成立。 与或非(and or not): ?...quot) ;判断quot是不是一个函数true 测试一个对象的类型谓词:class?,coll?,decimal?,delay?,float?,fn?,instance?,integer?...测试数字的谓词有:even?,neg?,odd?,pos?,zero?。 总结 Clojure里面的每个操作被实现成以下三种形式:  函数(function)     文中以defn定义的。  ...宏(macro)           Clojure中几乎所有的函数和宏都是用Clojure代码实现的,关于宏后面再说。

1.5K30

clojure基础入门(一)

注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。...谓词函数 谓词函数是一个判断式,一个返回bool值的函数或者仿函数,用来测试条件是否成立。 与或非(and or not): ?...quot) ;判断quot是不是一个函数true 测试一个对象的类型谓词:class?,coll?,decimal?,delay?,float?,fn?,instance?,integer?...测试数字的谓词有:even?,neg?,odd?,pos?,zero?。 总结 Clojure里面的每个操作被实现成以下三种形式:  函数(function)     文中以defn定义的。  ...宏(macro)           Clojure中几乎所有的函数和宏都是用Clojure代码实现的,关于宏后面再说。

1.3K40

编程语言进化史《禅与计算机程序设计艺术》 陈光剑

当让使用数字编程,写几百个数字、甚至几千个数字,每天面对的是数字,我大胆预测:”程序员群体100%会 有精神问题”。...主要的面向对象语言是 Smalltalk。 虽然各种语言属于不同的类型,但它们各自都不同程度地对其他类型的运算模式有所支持。...文章中图灵描述了它是什么,并且证明了,只要图灵机可以被实现,就可以用来解决任何可计算问题。...对任何输入都能在有限时间内停机? 哥德尔证明了任何一个形式系统,只要包括了简单的初等数论描述,而且是自洽的,它必定包含某些系统内所允许的方法既不能证明真也不能证伪的命题。...能用C语言模拟出单纸带的图灵机?明显可以(具体的实现可以在网上找)。 那么Python呢?Java呢?都可以。

1.5K10

18.计算机科学导论之人工智能初识学习笔记

简而言之,AI 模仿人类行为和能力创建软件, 人脑与人工智能对比 功耗:20W/几十万倍 鲁棒性:极强 / 弱 推广性:强 / 弱 犯大错误概率(原理): 没有 / 有 学习样本:少量 / 大量...例如,可以在交通监控解决方案中使用图像分类模型,根据图像所包含的车辆类型(例如出租车、公共汽车、骑自行车的人等)对图像进行分类。...(3) 编程语言 描述: 虽然有些通用语言(如C、C++和Java、Python)能用来编写智能软件,但有两种语言是特别为人工智能设计的,它们是 LISP 和 PROLOG 语言 1) LISP LISP...“母亲”来定义的,如果在两个句子中的玛丽是指同一 个人,我们可以推导出琳达和安妮间的新的关系:祖母(琳达,安妮), 这就是谓词逻辑要实现的目的。...注意在基于规则的系统中,每条规则都是独立处理的,与其他规则没有关联。

61220

:browser) 简单类型可不简单啊~)

任何Lisp方言中Symbol作为标识符(Identity),如命名空间名称、函数名称、变量名称、Special Form名称等等。...原因十分简单但又难以理解——Lisp中代码数据,数据代码。作为Lisp的方言cljs自然传承了这一耀眼的特性!...如if就是一个原语,即使是Macro也没有办法从无来构造一个,不信大家自己试试吧! 部分常用的Special Form如下: (def symbol init?)...而面向对象中,没有函数只有方法,而方法的构造前必须先构建其所依赖的类型类型实例。  ...总结  本文较详尽地介绍了Keyword,然后稍微介绍了Symbol、Var和Special Form,而Lisp中“代码数据,数据代码”需要结合Symbol的解释过程说明效果才有所体现,这个由于篇幅较大

69470

为什么Lisp语言如此先进?(译文)

现在大家都觉得这是理所当然的,但是Fortran I就没有这个结构,它只有基于底层机器指令的goto结构。   2. 函数也是一种数据类型。...一种数据类型应该有的功能,它都有。   3. 递归。Lisp是第一种支持递归函数的高级语言。   4. 变量的动态类型。...如果需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果某个新功能,它开发了三个月,那么需要五年才能做出来。 知道?上面的对比,还只是考虑到最好的情况。...而且尽管Python确实支持函数数据类型,但是没有一种字面量的表示方式(literal representation)可以生成函数(除非函数体只有一个表达式),所以需要创造一个命名函数,把它返回。...在面向对象编程的语言中,能够在有限程度上模拟一个闭包(一个函数,通过它可以引用由包含这个函数的代码所定义的变量)。

1.2K60

《SICP》读书笔记之一:构造过程抽象(上)

而在组合式求值中,解释器本身就是在遵循一个过程而工作的,具体来说: 求值该组合式的各个子表达式 将过程(最左边的子表达式的值,运算符)应用于参数(其他表达式的值,运算对象) 上述步骤表明,为了实现对组合式的求值过程...1.6 条件表达式和谓词 目前为止我们定义出的过程类的表达能力还非常有限,还没有办法去进行某些检测,然后根据检测的结果进行不同的操作。...此时解释器返回该谓词所对应的结果表达式 的值,作为整个条件表达式的值。如果没有 的值为 true,则 cond 的值为未定义。...最后,我们需要设置一个初始值来启动,一般设置为 1(实际上为 1.0,大部分 Lisp 实现没有区别): (define (sqrt x) (sqrt-iter 1.0 x)) 现在,我们就可以像其他过程一样使用...虽然我们还没有介绍任何迭代结构(循环),但利用常规的过程调用,我们也可以实现这一点。 1.8 过程作为黑盒抽象 sqrt 是我们用一组手工定义的过程来实现一个计算过程的第一个例子。

78520

如何编写高质量的 JS 函数(3) --函数式编程

LISP 就是函数式语言的鼻祖,完成了 lamda 演算的实现实现了 运算才是本质的运算系统。 上图是 Lisp 的图片,感受一下图片符号的魅力。 为什么我说是曙光? 是因为,并没有真正的胜利。...lambda 演算系统 证明了:任何一个可计算函数能用这种形式来表达和求值,它等价于图灵机。 至此,我阐述了函数式语言出现的原因。...但是在函数式语言中,是没有 try catch 的,通常使用函子来代替 try catch 。 看到上面这些话,可能会感到不能理解,为什么要用函子来代替 try catch 。...会发现只能用递归实现循环、没有 try catch 等要求,是合理且合适的。 PS: 这就好像是一直使用函数式语言的人突然接触命令式语言,也会满头雾水的。 七、函数式编程不允许使用可变状态的?...所有的数据都应以参数的形式提供给函数,而 this 不遵守这种规则。 二、为什么JS函数内部可以使用for循环? 很多人可能没有想过这个问题 其实在函数式语言中,是不存在循环语句的。

1.7K00

几种编程语言的优缺点

比如,Lisp 机器,是上世纪 50 年代对 Lisp 计算模型的实现Lisp 模型是基于 lambda 代数的一种计算语言表示法,后者是与图灵机同构的一种模型。...因为这些操作系统都是冯·诺曼机的操作系统,能用别的?...我每分钟打一百三到一百四十个英文单词,在 Emacs 里,当我在写没有格式要求的文本的时候。我测过这个时间速度。自己写了一个测打字速度的 Emacs 应用。但我想跟你说的不只是这个。...哥们,说一个没有内建的字符串的语言是人用的。 但是 Java 跟 C++ 比少了一些好东西,比如(函数调用时)传引用,栈上的对象,typedef,宏,以及运算符重载。...C被 C++ 代替,至少对大应用开发而又需要性能和数据类型的人们来说。

3.4K110

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

Ant可以在简单原语的基础上写出更复 杂的原语, 就像其他编程语言常用的作法一样。这也就是我们一开始提到的基于XML的编 程语言。这样做用处不大(知道为甚么?), 但是真的很酷。...真正有意思的三种类型是 符号(symbol), 表和函数。这一章的剩余部分, 我都会用来介绍这几种类型, 还要介绍 Lisp环境是怎样编译和运行源码的。这个过程用Lisp的术语来说通常叫做求值。...Lisp函数的角色十分特殊, 函数也是一种数据 类型, 就像整数和字符串一样, 因此可以把它赋值给符号。...而且, Lisp没有语义约束, 可以构造 任何数据结构, 只要你原意。 Lisp通过宏(macro)来做元编程。我们写一组宏来把任务列表(to-do list)转换为专用领 域语言。...学会Lisp也可能意味着明天可能会被解雇, 因为总是 强调, 如果公司所有软件都用Lisp写, 公司将会如何卓越, 而这些话的同事会听烦的。 Lisp值得努力学习?

1.4K20

颠覆者的游戏:程序语言

血淋淋的事实告诉大家,能用apple plus去打apple,要用orange打apple。...这是语言在发展过程中不断复杂化之后必然的反弹过程 —— 如今,但凡一个支持模版的面向对象的语言,不管有没有类型推定(type interence),代码在抽象和泛化两头撕扯一阵,感觉已经处在六道轮回中,...lisp的诸多思想中,代码数据,数据代码,是最具破坏性的。通过 quote,unquote,在代码的语法树上辗转腾挪,几乎是在以上帝视角来撰写程序。...dotnet的LINQ很sexy,然而,任何一门衍生于lisp的语言,都可以自己定义macro,从而轻易撰写出这样的代码: query = from w in Weather, where...当然,对上面的程序,可以在算法上做各种各样的优化,甚至换c来实现,也许可以最终接近elixir能达到的水平,但是代码的复杂度已经走进了另一个世界。 这就是lisp带来的颠覆,一套全新的思想体系。

1K80

NUS CS1101S:SICP JavaScript 描述:前言、序言和致谢

就此而言,我们还可以问:我们真的需要 100 个函数?是否有一个单一的通用函数可以满足所有其他函数的作用?...原语、组合方式、函数抽象、命名以及使用通用数据结构的约定方式来专门区分:这些是一个良好编程语言的基本构建块。从那里开始,想象力和基于经验的良好工程判断可以做剩下的事情。 —Guy L....Lisp 本身可以被赋予语义(顺便说一句,这是另一个模型),如果一个程序的功能可以在谓词演算中指定,那么逻辑的证明方法可以用来进行可接受的正确性论证。...最后,正是这种语法和语义的简单性造成了所有 Lisp 程序员所承担的负担和自由。任何规模超过几行的 Lisp 程序都无法在没有自由功能的情况下编写。发明和适应;发作和重新发明!...例如,JavaScript 对象的概念——按任何标准来看都是其基本组成部分之一——甚至没有提到!

15310

亚马逊工程师论各种编程语言的优缺点

比如,Lisp 机器,是上世纪 50 年代对 Lisp 计算模型的实现Lisp 模型是基于 lambda 代数的一种计算语言表示法,后者是与图灵机同构的一种模型。...因为这些操作系统都是冯·诺曼机的操作系统,能用别的?...我每分钟打一百三到一百四十个英文单词,在 Emacs 里,当我在写没有格式要求的文本的时候。我测过这个时间速度。自己写了一个测打字速度的 Emacs 应用。但我想跟你说的不只是这个。   ...哥们,说一个没有内建的字符串的语言是人用的。   但是 Java 跟 C++ 比少了一些好东西,比如(函数调用时)传引用,栈上的对象,typedef,宏,以及运算符重载。...C被 C++ 代替,至少对大应用开发而又需要性能和数据类型的人们来说。

2.2K80

解释器模式举例-TypeScript 类型体操天花板,用类型运算写一个 Lisp 解释器

类型当成一门函数式编程语言其实不算准确,比如 类型就缺少一个标志性的能力「First-Class-」,在表现上就是没有高阶函数,但是这并不影响他的表达能力。...,由于没有能用递归代替循环,但是就会遇到一个非常尴尬的问题「爆栈」,所以函数式编程用尾递归(尾调用)的方式解决了这个问题。   ...在 类型运算里面函数栈只有 50 层,几乎做不了任何复杂的运算,但是 在 4.5-beta 版里已经支持了类型运算的尾递归优化,用尾递归的方式来写递归极限可以达到 1000 层,远超原来的 50 层...,但是因为 类型不支持高阶函数,所以只能耦合 Loop / 和 Test,并且简化 ,比如如下用类型实现的尾递归版本 Join例子,就没有明确的 Loop / / Test 和 的定义,但其实都耦合在函数里面...unknown : _DivideBy;   词法分析   词法分析过程也比较简单,我挑选 Lisp 的语法进行实现,就是因为 Lisp S 表达式非常容易解析,解析的过程非常简单,核心代码如下,整体逻辑就是一种类型一种类型

44230

编程语言的出现都这么随意

1960 年的 Lisp没有来得及设计自己的语法,就被麦卡锡的学生实现了,因为没有语法,麦卡锡的学生就以列表格式的语法分析树(,S(Symbolic)表达式)作为临时语法。...强类型惰性函数式语言:Haskell Haskell 是 1990 年标准化 Miranda 语言的结果。 Miranda 诞生于 1986 年,部分基于 ML 语言。...JavaScript 和 Java 没有任何关系,它的前身是 ScriptEase。...最后 JavaScript 是一个: 表面叫 Java 脚本,但是和 Java 没有任何关系; 表面上是一个像 C 语言一样的面向过程语言,但实际上是一个原型面向对象语言; 表面上创建了一个对象,但其实只是一个关联列表...; 表面上在定义变量和赋值,其实只是对; 表面上声明函数,其实只是对。

1.6K60

《Kotin 极简教程》第8章 函数式编程(FP)(1)第8章 函数式编程(FP)《Kotlin极简教程》正式上架:

如果为了理解一个对象如何与其他对象进行复合,当你发现不得不深入挖掘对象的实现之时,此时所用的编程范式的原本优势就荡然无存了。 FP通过函数组合来构造其逻辑系统。...它包括一条变换规则 (变量替换) 和一条函数定义方式,λ演算之通用在于,任何一个可计算函数能用这种形式来表达和求值。 λ演算强调的是变换规则的运用,这里的变换规则本质上就是函数映射。...螢幕快照 2017-07-08 19.12.37.png 在λ演算中只有函数,一门编程语言中的数据类型,比如boolean、number、list等,都可以使用λ演算来实现。...image.png 在Javascript里没有任何语法专门代表lambda, 只写成这样的嵌套函数function{ return function{...} }。...这样就出现了一个问题 —— 如何在Lambda Calculus中实现递归函数匿名递归函数。Haskell B.

1.4K20
领券