Python和lisp在函数式编程上有哪些异同
def add(a,b): # 定义名称为add()的函数,并有两个参数 a, b z=a+b # 对传入的数据进行相加操作 return z # 函数一般都会有返回值,本函数返回 a+badd(1,3) # 调用add()函数,并传入 1,3 两个参数 # 那么讲返回 1+3 的结果, 也就是 add(1,3) == 4# print(add()) 这样是返回add()的结果,由于没有参数,所以会报错print(add(1,3)) # 将返回 4
看你提的这种问题,函数是每种语言很基础的东西。
你应该没有学过其他编程语言吧,如果你想深入学习语言编程的话,并不建议你将python作为入门语言。
至于原因吗:①python是脚本语言,或者说是解释型语言,与C,C++等编译型语言还是有些差别的 ②python是弱类型语言,变量的声明不用说明类型。这样并不能深入的体会指定类型带来的好处 ③入门语言还是建议从C语言开始。能更深入的体会底层的一些东西
当你学完C再使用python的时候,你会感觉你想要的功能基本都有相应的模块了。导入之后,稍微写点代码就能得到你想要的结果。
当然,并不是说python不好,正是因为python太方便,所以并不适合作为编程入门语言。
给你推荐点python教程吧, 一个视频一个文字,算是入门级别的吧
http://wenku.baidu.com/course/view/dca3bc64783e0912a2162a8f?cid=512
http://sebug.net/paper/python/
还有不要忘记官方文档
https://www.python.org/doc/
python是函数编程
函数编程定义:
1、"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。
2、它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。[2]
Python内在的函数式功能
自Python 1.0起,Python就已具有了以上所列中的绝大多数特点。但是就象Python所具有的大多数特性一样,这些特点出现在了一种混合了各种特性的语言 中。 和Python的OOP(面向对象编程) 特性非常象,你想用多少就用多少,剩下的都可以不管(直到你随后需要用到它们为止)。在Python 2.0中,加入了列表解析(list comprehensions)这个非常好用的”语法糖“。 尽管列表解析没有添加什么新功能,但它让很多旧功能看起来好了不少。
Python中函数式编程的基本要素包括functionsmap()、reduce()、filter()和lambda算子(operator)。 在Python 1.x中,apply()函数也可以非常方便地拿来将一个函数的列表返回值直接用于另外一个函数。Python 2.0为此提供了一个改进后的语法。可能有点让人惊奇,使用如此之少的函数(以及基本的算子)几乎就足以写出任何Python程序了;更加特别的是,几乎 用不着什么执行流程控制语句。
所有(if,elif,else,assert,try,except,finally,for,break,continue,while,def)这 些都都能通过仅仅使用函数式编程中的函数和算子就能以函数式编程的风格处理好。尽管真正地在程序中完全排除使用所有流程控制命令可能只在想参 加”Python混乱编程“大赛(可将Python代码写得跟Lisp代码非常象)时才有意义,但这对理解函数式编程如何通过函数和递归表达流程控制很有 价值。
剔除流程控制语句
剔除练习首先要考虑的第一件事是,实际上,Python会对布尔表达式求值进行“短路”处理。这就为我们提供了一个if/elif/else分支语句的表达式版(假设每个分支只调用一个函数,不是这种情况时也很容易组织成重新安排成这种情况)。 这里给出怎么做:
对Python中的条件调用进行短路处理
Python
# Normal statement-based flow control
if <cond1>: func1()
elif <cond2>: func2()
else: func3()
# Equivalent "short circuit" expression
(<cond1> and func1()) or (<cond2> and func2()) or (func3())
# Example "short circuit" expression
>>> x = 3
>>> def pr(s): return s
>>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))
'other'
>>> x = 2
>>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))
'two'
我们的表达式版本的条件调用看上去可能不算什么,更象是个小把戏;然而,如果我们注意到lambda算子必须返回一个表达式,这就更值得关注了。既然如我 们所示,表达式能够通过短路包含一个条件判断,那么,lambda表达式就是个完全通用的表达条件判断返回值的手段了。我们来一个例子:
Python中短路的Lambda
Python
>>> pr = lambda s:s
>>> namenum = lambda x: (x==1 and pr("one")) \
.... or (x==2 and pr("two")) \
.... or (pr("other"))
>>> namenum(1)
'one'
>>> namenum(2)
'two'
>>> namenum(3)
'other'
将函数作为具有首要地位的对象
前面的例子已经表明了Python中函数具有首要地位,但有点委婉。当我们用lambda操作创建一个函数对象时, 我们所得到的东西是完全通用的。就其本质而言,我们可以将我们的对象同名字”pr”和”namenum”绑定到一起, 以完全相同的方式,我们也也完全可以将数字23或者字符串”spam” 同这些名字绑定到一起。但是,就象我们可以无需将其绑定到任何名字之上就能直接使用数字23(也就是说,它可以用作函数的参数)一样,我们也可以直接使用 我们使用lambda创建的函数对象,而无需将其绑定到任何名字之上。在Python中,函数就是另外一种我们能够就像某种处理的值。
我们对具有首要地位的对象做的比较多的事情就是,将它们作为参数传递给函数式编程固有的函数map()、reduce()和filter()。这三个函数接受的第一个参数都是一个函数对象。
map()针对指定给它的一个或多个列表中每一项对应的内容,执行一次作为参数传递给它的那个函数 ,最后返回一个结果列表。
reduce()针对每个后继项以及最后结果的累积结果,执行一次作为参数传递给它的那个函数;例如,reduce(lambda n,m:n*m, range(1,10))是求”10的阶乘”的意思(换言之,将每一项和前面所得的乘积进行相乘)
filter()使用那个作为参数传递给它的函数,对一个列表中的所有项进行”求值“,返回一个由所有能够通过那个函数测试的项组成的经过遴选后的列表。
我们经常也会把函数对象传递给我们自己定义的函数,不过一般情况下这些自定义的函数就是前文提及的内建函数的某种形式的组合。
通过组合使用这三种函数式编程内建的函数, 能够实现范围惊人的“执行流程”操作(全都不用语句,仅仅使用表达式实现)。
✅一图搞懂:8种主流的编程范式!程序员必备知识
强调使用不可变数据和声明性表达式。Haskell、Lisp、Erlang等语言以及JavaScript、Python和Scala等语言中的一些功能都支持函数式编程范式。函数式编程的特点在于它的函数是一等公民,可以被命名、赋值、作为参数传递,并在必要时从其他函数返回。六、响应式编程 响应式编程处理异步数据流和更改的传播。事件驱动的...
当我谈论Lisp时我谈些什么
Lisp 是一种古老的编程语言,有着深远的影响。它在计算机编程历史中具有独特地位,对多种现代语言,如 Prolog, Erlang, Haskell, Python 等,产生了重要影响。Lisp 的核心概念包括 Lambda 表达式、符号计算、人工智能、函数式编程和数据作为代码。在 Lisp 中,数据结构以列表形式表示,使用特殊的数据结构 ...
如何使用python的胶水语言特性?
首先,你需要安装一个名为 ECL(Embeddable Common Lisp)的工具。ECL 是一个强大的 Common Lisp 解释器,支持多种平台,且提供了丰富的函数库。接着,你需要用 C 语言编写一个简单的入口函数,这个函数将作为调用点,用于从 Python 调用 Common Lisp 代码。你可以在 C 函数中调用 ECL 的 API 来...
5种开发人工智能的最佳编程语言
Python非常便携,可以在Linux,Windows等多平台上使用。另外,Python是一种多范式编程语言,支持面向对象,面向过程和函数式编程风格。由于它拥有简单的函数库和理想的结构,Python很适合神经网络和自然语言处理(NLP)解决方案的开发。但是,习惯于Python的开发人员在尝试使用其他语言时,难以调整状态使用不同的...
编程语言有哪些
3. 脚本语言:如JavaScript、PHP、Python、Ruby等,主要用于网页动态交互、服务器端编程,执行效率相对较低,但编写速度快。4. 命令行接口(CLI)语言:如Bash(Unix\/Linux)、PowerShell(Windows)等,用于操作系统管理和自动化任务。5. 函数式编程语言:如Haskell、Lisp、Scala等,强调通过计算函数的组合...
人工智能游戏辅助用什么语言开发
Lisp以其出色的原型设计能力和符号表达式支持,在AI领域中崭露头角。作为专为人工智能设计的语言,Lisp是第一个声明式和函数式编程语言,这使得它在处理复杂的逻辑问题上有着独特的优势。Prolog作为一种逻辑编程语言,虽然在易用性上可能不如Lisp,但在特定场景下,如解决推理和搜索问题时,Prolog的表现...
程序设计高级语言有哪些
1. 命令式语言:这种语言如Fortran、Pascal、C、C++、Basic、Ada等,其核心是模拟“数据存储\/数据操作”,强调语句或命令产生的副作用,与现代计算机体系结构紧密相连。现代大多数主流语言都属于这一类别。2. 函数式语言:如Lisp、Haskell、ML、Scheme和F#,这些语言基于数学函数概念,适用于人工智能等领域...
AI语言是什么
Lisp作为一种早期为应对人工智能而设计的语言,因其出色的原型设计能力和对符号表达式的支持,在AI领域崭露头角。Lisp是第一个声明式和函数式编程语言,与命令式和面向对象的语言如C、Fortran、Java、C#等有着显著区别。Lisp的这些特性使其在处理复杂算法和逻辑推理方面表现出色。Prolog则以逻辑编程为核心...
人工智能语言lisp和prolog
Prolog使用一致的数据结构“项(term)”构建数据和程序,Horn子句的形式使得事实、规则和询问的表达更为直观。其执行时的合一运算和自动匹配机制,同样体现了强大的模式匹配功能,尤其在推理任务中表现出色。总结来说,LISP和PROLOG都是人工智能语言的典型代表,分别在函数式和逻辑式编程中展示了强大的符号处理...
编程语言都有哪些种类
函数式编程语言:强调函数的使用和避免可变状态,例如 Haskell、Scala 和 Lisp。逻辑编程语言:基于一组事实和规则来解决问题,例如 Prolog 和 Datalog。按编译方式分类编译型语言:在执行前将代码编译成机器代码,例如 C、C++ 和 Java。解释型语言:逐行解释代码,例如 Python、JavaScript 和 Ruby。半编译...