说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

多面编程语言Scala

HTML文档下载 WORD文档下载 PDF文档下载
Scala把近二十年间大行其道的面向对象编程与旧而有之的函数式编程有机结合起来,形成其独特的魔力。本文将带你领略Scala独特魅力,练就自己的寒冰掌、火焰刀。

如Scala官网宣称的:“Object-OrientedMeetsFunctional”,这一句当属对Scala最抽象的精准描述,它把近二十年间大行其道的面向对象编程与旧而有之的函数式编程有机结合起来,形成其独特的魔力。希望通过本文能够吸引你去了解、尝试Scala,体验一下其独特魅力,练就自己的寒冰掌、火焰刀。

回首初次接触Scala,时光已忽忽过去四五年。从当初“Scala取代Java”的争论,到今天两者的相安无事,Scala带给了我们哪些有意义的尝试呢?在我掌握的众多编程语言之中,Scala无疑是其中最让我感到舒适的,如Scala官网宣称的:“Object-OrientedMeetsFunctional”,这一句当属对Scala最抽象的精准描述,它把近二十年间大行其道的面向对象编程与旧而有之的函数式编程有机结合起来,形成其独特的魔力。不知你是否看过梁羽生的著作《绝塞传烽录》?里面白驼山主宇文博的绝学:左手“寒冰掌”、右手“火焰刀”,用来形容Scala最为合适了,能够将OOP与FP结合得如此完美的语言,我认为唯有Scala。

众所周知,Java称不上纯粹的面向对象语言,但Scala却拥有纯粹的面向对象特性,即便是1+1这么简单的事情,实际上也是执行1.+(1)。而在对象组合方面,Scala拥有比接口更加强大的武器──特质(trait)。

Scala同时作为一门函数式编程语言,理所当然地具备了函数式语言的函数为头等“公民”、方法无副作用等特性。事实上,Scala更吸引我的并不是OOP特性,而是FP特性!一边是OOP、一边是FP,这就是多面的Scala,极具魅力而且功能强大。

在多核时代,现代并发语言不断涌现出来,例如Erlang、Go、Rust,Scala当然也位列其中。Scala的并发特性,堪称Scala最吸引开发者的招牌式特性!Scala是静态类型的。许多人会把vals="ABC"这样的当作动态类型特性,而vals:String="ABC"才认为是静态类型特性。实际上,这无关类型争论,而是类型系统实现的范畴。是的,在Scala里,你可以放心大胆地使用vals="ABC",而Scala里强大的类型推断和模式匹配,绝对会让你爱不释手。

此外,Scala作为JVM语言,理所当然享有Java庞大而优质的资源,与Java间可实现无缝交互,事实上,Scala最终当然是编译为Java字节码。

本文将把重点放在Scala的特色之处。作为一门完备而日趋成熟的语言,Scala的知识点有不少,本文当然无法做到面面俱到,但希望能够带你感受Scala魅力,并理解其重要概念。

Scala的面向对象

开胃菜──类的定义

来看个开胃菜,定义一个类:


我们知道,动态语言一般都提供了REPL环境,同时,动态语言的程序代码都是以脚本方式解释运行的,这给开发带来了不少的便利。Scala虽然是静态类型系统的语言,但同样提供了这两个福利,让你倍感贴心。

因此,你可以任意采取以下运行方式:

  • 在命令行窗口或终端输入:scala,进入Scala的REPL窗口,逐行运行上述代码;
  • 此外,也可以将上述代码放入某个后缀名为.scala的文件里,如test.scala,然后通过脚本运行方式运行:scala test.scala。

测试信息“小强今年32岁,是一名程序员”结果出来了!

多么简单,类的定义就这么多,却能够做这么多事情,想想Java的实现吧,差别太大了。我们先来分析下代码。假设在上述第二种方式的test.scala文件中,注释掉后面两行并保存,运行:

  • scalac test.scala 
  • javap -p Person
我们先是把文件编译成字节码(这实际上是跟Java编译对应的第三种编译/运行方式),之后反编译并查看结果:


这个结果跟Java实现的代码类似(生成的getter和 setter跟Java实现有所不同,但在这里不是什么问题),可见,Scala帮我们做了多少简化工作。这段代码有以下值得注意的地方:

我们可以把字段定义和构造函数直接写在Scala的类定义里,其中,关键字val的含义是“不可变”,var 为“可变”,Scala的惯用法是优先考虑val,因为这更 贴近函数式编程风格; 

  • 在Scala中,语句末尾的分号是可选的;
  • Scala默认类访问修饰符为public;
  • 注意println("测试信息")这一行,将在主构造函数里执行;
  • val与var两者对应Java声明的差异性已在反编译代码中体现了。
伴生对象与伴生类

伴生对象与伴生类在Scala的面向对象编程方法中占据极其重要的位置,例如Scala中许多工具方法都是由伴 生对象提供的。

伴生对象首先是一个单例对象,单例对象用关键字object定义。在Scala中,单例对象分为两种,一种是并未自动关联到特定类上的单例对象,称为独立对象 (Standalone Object);另一种是关联到一个类上的单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象(Companion Object),对应类称为伴生类。 

Java中的类,可以既有静态成员,又有实例成员。而在Scala中没有静态成员(静态字段和静态方法),因为静态成员从严格意义而言是破坏面向对象纯洁性的,因此,Scala借助伴生对象来完整支持类一级的属 性和操作。伴生类和伴生对象间可以相互访问对方的 private字段和方法。

接下来看一个伴生类和伴生对象的例子(Person. scala)。


这是一个典型的伴生类和伴生对象的例子,注意以下说明:

  • 伴生类Person的构造函数定义为private,虽然这不是必须的,却可以有效防止外部实例化Person类,使得Person类只能供对应伴生对象使用;
  • 每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中;
  • 在伴生类中,可以访问伴生对象的private字段Person.uniqueSkill;
  • 而在伴生对象中,也可以访问伴生类的private方法Person.getUniqueSkill();
  • 最后,在外部不用实例化,直接通过伴生对象访问Person.printUniqueSkill()方法。
特质(Trait)

Scala的特质类似于Java中的接口作用,专门用来解决现实编程中的横切关注点矛盾,可以在类或实例中混入(Mixin)这些特质。实际上,特质最终会被编译成Java的接口及相应的实现类。Scala的特质提供的特性远比Java的接口灵活,让我们直接来看点有趣的东西吧。



我们先是定义了一个Programmer抽象类。最后定义了四个不同程序员的Trait,且都继承自Programmer抽象类,然后,通过不同的特质排列组合,看看我们产生的结果是什么样子的:

所有程序员都至少掌握一门编程语言。

我掌握Scala。我掌握Golang。

所有程序员都至少掌握一门编程语言。

我掌握Scala。我掌握Golang。我掌握PHP。......

Wow~!有趣的事情发生了,通过混入不同的特质组合,不同的程序员都可以有合适的词来介绍自己,而每个程序员的共性就是:“所有程序员都至少掌握一门编程语言”。让我们来解释一下具体思路:

这段代码里面,特质通过with混入实例,如:new  Programmer with Scalaist。当然,特质也可以混入类中;

  • 为什么信息可以传递呢?比如我掌握Scala。我掌握Golang。我掌握PHP?答案就在super.getSkill()上。该调用不是对父类的调用,而是对其左边混入的Trait的调用,如果到左边第一个,就是调用Programmer抽象类的getSkill()方法。这是Trait的一个链式延时绑定特性,那么在现实中,这个特性就表现出极大的灵活性,可以根据需要任意搭配,大大降低代码量。

Scala的面向对象特性,暂先介绍到这里。其实还有好些内容,限于篇幅,实在是有点意犹未尽的感觉。

Scala的函数式风格

Scala的魅力之一就是其函数式编程风格实现。如果把上面介绍的面向对象特性看成是Scala的“寒冰掌”,让你感受到了迥异于Java实现的特性,那么,Scala强大而魔幻的函数式特性,就是其另一大杀招“火焰刀”,喷发的是无坚不摧的怒焰之火。

集合类型

Scala常用集合类型有Array、Set、Map、Tuple和List等。Scala提供了可变(mutable)与不可变(immutable)的集合类型版本,多线程应用中应该使用不可变版本,这很容易理解。

  • Array:数组是可变的同类对象序列;
  • Set:无序不重复集合类型,有可变和不可变实现;
  • Map:键值对的映射,有可变和不可变实现;
  • Tuple:可以包含不同类元素,不可变实现;
  • List:Scala的列表是不可变实现的同类对象序列,因应函数式编程特性的需要。
  • List大概是日常开发中使用最多的集合类型了。

这些集合类型包含了许多高阶函数,如:map、find、filter、fold、reduce等等,构建出浓郁的函数式风格用法,接下来我们就来简单了解一下:


输出如下:

JavaScript很棒~

Scala很棒~

Golang很棒~

map()函数在List上迭代,对List中的每个元素,都会调用以参数形式传入的Lambda表达式(或者叫匿名函数)。其结果是创建一个新的List,其元素内容都发生了相应改变,可以从输出结果观察到。注意,代码中有一行是速写法代码,我个人比较喜欢这种形式,但在复杂代码中可读性差一些。

最后,我们用了另一个foreach()方法来迭代输出结果。

高阶函数、Lambda表达式,都是纯正的函数式编程风格。如果你接触过Haskell,就会发现Scala函数式风格的实现,在骨子里像极了Haskell,感觉非常亲切。在编写Scala代码的过程中,将处处体现出它的函数式编程风格,高效而简洁。

限于篇幅,我们只能浅尝辄止,如果有兴趣,可以进一步参考我以前写的两篇相关博文,里面有比较详细的描述:七八个函数,两三门语言㈠和七八个函数,两三门语言㈡•完结篇。

高阶函数、柯里化、不全函数和闭包

实际上我们在前面已经见识过Scala的高阶函数(Higher-order Function)了,只不过是Scala自带的map()和foreach()。高阶函数在维基百科中的定义 是:“高阶函数是至少满足下列一个条件的函数:接 受函数作为输入;输出一个函数”。接下来,我们来实现一个自己的高阶函数──求圆周 长和圆面积:


我们定义了一个高阶函数cycle。输入参数中传入一个函数值calc,其类型是函数,接收Float输入,输出也是Float。在实现里,我们会调用calc函数。在调用时,我们分别传入求圆周长和圆面积的匿名函数,用于实现calc函数的逻辑。

这样,我们用一个高阶函数cycle,就可以满足求圆周长和圆面积的需求,不需要分别定义两个函数来处理不同任务,而且代码直观简洁。最后,我们打印结果,输出一组半径分别对应的圆周长和圆面积。在这里,我们用到了映射Map:

圆周长:Map(1.0 -> 6.28, 2.3 -> 14.444, 4.5 -> 28.26) 

圆面积:Map(1.0 -> 3.14, 2.3 -> 16.6106, 4.5 ->63.585) 

接下来,我们对上述代码稍加改动:


输出结果同上。

注意到了吗?我们把cycle函数的两个输入参数进行了拆分(如上述代码第一行),同时在调用cycle函数时,方式也有所不同(如上述代码最后两行)。这是什么意思? 

这在函数式编程中称为柯里化(Curry),柯里化可以把函数定义中原有的一个参数列表转变为接收多个参数列表。在函数式编程中,一个参数列表里含多个参数的函数都是柯里函数,可以柯里化。

要知道,在函数式编程里,函数是一等的,当然函数也可以作为参数和返回被传递。这对初次接触函数式编程的开发者而言确实比较抽象。上述代码的理解,你可以这样想象:(cacl: Float => Float)是函数cycle2(r: Array[Float])的输入参数!进一步,可以这么理解:cacl取一个参数,变成了一个不全函数(Partially Function)cycle2(r: Array[Float]),所谓不全函数就是它还有参数未确定,你想要完整用它的话,还需要继续告知它未定的参数,如(cacl: Float => Float)。 

还没完!根据上述描述,我们继续看看如何用各种Hacker的调用方式:


可以用valc21=cycle2 _、val c22 = cycle2(Array(1.0f, 2.3f, 4.5f)) _诸如此类的方式创建不全函数,并调用它。

看得出来,不全函数同样可以提升代码的简洁程度,比如本例代码中,参数Array(1.0f, 2.3f, 4.5f)是固定不变的,我们就不用每次都在调用cycle2时传入它,可以先定义c22,再用c22来处理。 

函数式崇尚的“函数是第一等公民”理念可不容小觑。函数,就是这么任性!接下来,我们来了解下闭包(Closure)的概念,依旧先看个简单的例子:


这个例子用来求圆柱体的体积。这里定义了一个caclCylinderVolume函数(因为函数式风格里函数是一等公民,所以可以用这样的函数字面量方式来定义。或者也可以称之为代码块),函数里面引用了一个自由变量high,caclCylinderVolume函数并未绑定high。而在caclCylinderVolume函数运行时,要先“闭合”函数及其所引用变量high的外部上下文,这样也就绑定了变量high,此时绑定了变量high的函数对象称为闭包。

由代码可知,由于函数绑定到了变量high本身,因此,high如果发生改变,将影响函数的运算结果;而如果在函数里更新了变量,那这种更新在函数之外也会被体现。

模式匹配(PatternMatching

Scala的模式匹配实现非常强大。模式匹配为编程过程带来了莫大便利,在Scala并发编程中也得到了广泛应用。


输出结果如下:

多面者Scala~

你的Scala版本是:2.11.6

八成是干净简洁的Go、PHP语言呢?

可见,模式匹配特性非常好用,可以灵活应对许多复杂的应用场景:

  • 第一个case表达式匹配普通的字面量; 
  • 第二个case表达式匹配正则表达式;
  • 第三个case表达式使用了if判断,这种方式称为模式护卫(Pattern Guard),可以对匹配条件加以过滤;
  • 第四个case表达式使用了“_”来处理未匹配前面几项的情况。

此外,Scala的模式匹配还有更多用法,如case类匹配、option类型匹配,同时还能带入变量,匹配各种集合类型。综合运用模式匹配,能够极大提升开发效率。

并发编程

现代语言的特性往往是随硬件环境和技术趋势演进的,多核时代的来临,互联网大规模复杂业务处理,都对传统语言提出了挑战,于是,新展现的语言几乎都非常关注并发特性,Scala亦然。

Scala语言并发设计采用Actor模型,借鉴了Erlang的Actor实现,并且在Scala2.10之后,改为使用AkkaActor模型库。Actor模型主要特征如下:

  • “一切皆是参与者”,且各个actor间是独立的;
  • 发送者与已发送消息间解耦,这是Actor模型显著特点,据此实现异步通信;
  • actor是封装状态和行为的对象,通过消息交换进行相互通信,交换的消息存放在接收方的邮箱中;actor可以有父子关系,父actor可以监管子actor,子actor唯一的监管者就是父actor;
  • 一个actor就是一个容器,它包含了状态、行为、一个邮箱(邮箱用来接受消息)、子actor和一个监管策略。

    我们先来看个例子感受下:



    在这里,Concurrency是CalcActor的父actor。在Concurrency中先要构建一个Akka系统:


    同时,这里的设置将会在线程池里初始化称为“routee”的子actor(这里是CalcActor),数量为4,也就是我们需要4个CalcActor实例参与并发计算。这一步很关键。actor是一个容器,使用actorOf来创建Actor实例时,也就意味着需指定具体Actor实例,即指定哪个actor在执行任务,该actor必然要有“身份”标识,否则怎么指定呢?!

    在Concurrency中通过以下代码向CalcActor发送序号并启动并发计算:

    for(i<-1to4)calcActor!i

    然后,在CalcActor的receive中,通过模式匹配,对接收值进行处理,直到接收值处理完成。在运行结果就会发现每次输出的顺序都是不一样的,因为我们的程序是并发计算。比如某次的运行结果如下。

    • 序号为:1。
    • 序号为:3。
    • 序号为:2。
    • 序号为:4。

    actor是异步的,因为发送者与已发送消息间实现了解耦;在整个运算过程中,我们很容易理解发送者与已发送消息间的解耦特征,发送者和接收者各种关心自己要处理的任务即可,比如状态和行为处理、发送的时机与内容、接收消息的时机与内容等。当然,actor确实是一个容器,且五脏俱全:我们用类来封装,里面也封装了必须的逻辑方法。Akka基于JVM,虽然可以穿插混合应用函数式风格,但实现模式是面向对象,天然讲究抽象与封装,其当然也能应用于Java语言。我们的Scala之旅就要告一个段落了!Scala功能丰富而具有一定挑战度,上述三块内容,每一块都值得扩展详述,但由于篇幅关系,在此无法一一展开。

    希望通过本文能够吸引你去了解、尝试Scala,体验一下其独特魅力,练就自己的寒冰掌、火焰刀。



    作者简介:卢俊祥,网名2gua,译者,书迷;关注Web技术趋势,热衷App开发、Web开发、数据分析、架构设计以及各类编程语言;陈氏太极拳五十六式爱好者;佛禅人生,缘散缘聚。微博: @2gua、 博客。


    Strom8 CEO:搞好手游开发,合伙人很重要 2013年Q4全球PC出货量同比下滑6.9% 已连续下滑七个季度 一周消息树:2013年十大产品、图书、公司盘点 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势 研发周报:超实用的JavaScript技巧及最佳实践 2013最吃香的技能:Java称霸、Android势头正猛 移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 请问在asp中如何读取/显示access数据库中的备注字段 紧急求救:在VC++里如何通过ATL OLE DB访问(INSERT\UPDATE\DELETE\SELECT)ORACLE和SQL SERVER里的BLOB字段内容? 高薪寻找西安的兼职UNIX程序 员 在delphi中,怎么调用api函数? www.alldas.de为什么无法访问了??? 如何检测被覆盖的窗口区域是否发生了变化? 高薪寻找西安的兼职UNIX 程序员 如何制作下拉菜单 请高手指点:好猫为何不工作? 一种设想,20台电脑5根电话线上网,如何达到较快的速度? 对话框程序调试时的问题?!!!! 请介绍几本好用的自学C语言的书籍好吗?? 紧急求救,请高手来看看 .NET和JAVA到底哪个好? 谁来救我?ISequentialStream::write()为何不好使? 定义类型的困惑 大虾们,如何做一个图标选择框!!!(详情见内) ADO编程问题求解!!!!!!!!!!! ****************简单问题,高分求救??????????????????????? 请问怎样在TabStrip中的选项卡中增加图片?谢了 工程如何能建的工整一些? www.alldas.de为什么无法访问了? 关于动态控件的问题 ADO编程问题求解 怎么编程产生1MHz甚至更高频率的周期信号? 紧急求助—有关JMail4.1附件问题 挥泪大送分!!!!! 怎样才能让自己变胖? 做个仅有对话框的应用,但想把它放到托盘, 给ASP爱好者提个建议! 关于SQLserver2000“视图“的两个问题,请教高手! 好久没上网了,送分以庆祝再回csdn!!!!! 做浏览器,如何实现 “后退”,“前进”,这二个功能? 如何使C:盘,D盘的根目录不共享? 用resin时,是否需要jdk,如何配置?分必给! SDI中的某一个子视图里怎样对主窗口的状态栏进行更改?? ◇◆◇ 失恋代表什么? ◇◆◇ 我英语不懂,想考高程.行吗 ◇◆◇ 学生生涯快完了,大家来说说对学生生涯的感受,特别是什么最深刻的! ◇◆◇ 求救!如何把SQL命令从前端应用程序传给应用程序服务器 要去招商行笔试了,有参加过的兄弟给点建议。 ###############讨论一下->微软全力推出.NET技术和C#语言的出现,VC++还有多久的寿命??? 要去招商行笔试了,有参加过的兄弟给点建议 如何发一消息,帮别人问的 高手帮助!!! 要去招商行笔试,有参加过的兄弟给点建议。 要去招商行笔试,有参加过的兄弟给点建议 我配置的IIS,为什么只能读数据库,不能写入?为什么? 我要去招商行笔试了,有参加过的兄弟给点建议。 好久没发帖了……………… 请问LINUX/UNIX下那种扩展名的文件是可执行的?DOS的。EXE对应的格式是什么? 方程2的x次方=3-2x的解为x1,方程log2(x)=3-2x的解为x2,求x1+x2的值答案是3/2,可是我怎么都是2啊? 已知2+根号3是方程x2-4x+c的一个根,求方程的另一个根及c的值 无论x取何值,多项式(m-1)x的3次方+2mx的2次方+(m+1)x+p都等于px的2次方-qx+p,求(m+p)的p-q的值? 设方程2的-x次方=lgx绝对值的两个根为x1,x2,则x1乘以x2的积与0,1的大小关系 已知关于X的一元二次方程x的平方+(m+3)+m+1=0.若X1,X2是原方程的根,且|X1-X2|=二倍根号二.求m的值 当x等于3时,代数式px的3次方+qx+1的值为2002,当x等于-3时,求代数式px的3次方+qx+1的值 关于x的二次方程2x^2+(log2为底,m为真)x+log2为底根号m为真=0有两个实数根,求m的值两个相等的实数根。。对不起啊,少打两个字。。 x1、x2是方程x^+根号p*x+q=0的两个根且x1^+x1x2+x2^=3/2,1/x1^+1/x2^=5/2,求p、q的值 设x1、x2是关于x的方程x²+px+q=0的两根,x1+1、x2+1是关于x的x²+qx+p=0的两根,求p、q的值 若关于x的方程(根号x+3)+2x+m=0只有一个实数根,求m的取值范围 方程根号4-x2=lgx的根个数是几个? 已知X²+PX+q=O的两根之差等于方程X²+qX+P=0的两根之差那么除去P²-4q>0与q²-4P>0之外,P与q还应具有关系式 设x1,x2是方程2x²-3x-3=0的两个实数根,则x1/x2+x2/x1的值为 已知关于方程x^2+2x+2根号(x^2+2x+2p) -p^2=0,其中p为实数(1)若方程没有实数根,求p的范围(2)若p>0,为p为何值时,方程只有一个实数根,并求出这个根用换元法设根号中为a,我想知道分解因式后 已知X1,X2为方程X的平方加px加q等于0的两根,且X1加X2等于6,X1的平方加X2的平方等于20求p和q的值? 已知方程3x²-4x-2=0的两根是x1、x2求、x1²+x2² 2、1/x1²+1/x2²3、x1三次方+x2三次方. log根号2^(x-5)log2^(x-1) 已知关于X的方程x^2-px+q=0的两根分别为x1,x2,且x1^2+x2^2=7,1/x1+1/x2=3,求p+q的值 已知关于x的方程3x^2-5x+a=0的两个根为x1、x2,且-2小于x1小于0,1小于x2小于3,求实数a的取?、 log2(1+根号2+根号3)+log2(1+根号2 -根号3) 已知关于x的方程x²-px+q=0两根为x1、x2,则-x²+px-q=0等于多少A、-(x+x1)(x+x2)B、(x+x1)(x-x2)C、-(x-x1)(x-x2)C、(x-x1)(x+x1)选哪一个?最好有过程 已知关于X的方程3x^2-5x+a=0的一根分布在区间(-2,0)内,另一根分布在区间(1,3)内,求实数a的取值范围 已知函数f(x)=2^x+x,g(x)=x-log1/2x(1/2为底数),h(x)=log2x-根号x(2为底数)的零点是x1,x2,x3,比较大小 已知三角形ABC的一边长为5,另外两边长恰是方程2x^2-12x+m+1=0的两根,求实数m的取值范围已知方程x^2+px+q=0的两个实数根分别比方程x^2+qx+p=0的两实数根小1,求以1/p,1/q为两根的一元二次方程 已知关于x的方程3x^2-6(m-1)x+m^2+1=0的两个根x1,x2满足|x1|+|x2|=2,求实数m的值 已知x∈[根号2,8],函数f(x)=log2 (x/2)乘以log根号2 ((根号x)/2)求该函数的最大值与最小值,注:这两个对数式是相乘,底数分别是2和(根号2),真数分别是 (x÷2)与 (根号x÷2),在10月23日下午3 已知关于x的一元二次方程x2+px+q=0的两个实数根为p.q,则p,q=? 设x1,x2是方程3x方-5x-7=0的两根.求(1)x1方+x2方=?(2)1/x1+1/x2=?(3)X2/X1+X1/X2=? 已知函数f(x)=log2(2^x+1),g(x)=log2(2^x-1),若关于x的函数F(x)=g(x)-f(x)-m在[1,2]上有零点,求m范围 已知方程x^2+px+q=0的两根是a,b.求证:一元二次方程qx^2+p(1+q)x+(1+q)^2=0的根为a+1/b和b+1/a如题. 设方程3x²-5x-7=0的两根,分别为x1,x2,求一.(x1-x2) 二.(x1-2)(x2-2) 若关于x的方程根号下1-x^2=log2(x-a)有正数解,则实数a的取值范围 设x1,x2是方程x²+px+q=0的两实数,x1+1,x2+1是关于x的方程x²+qx+p=0的两实跟,则p=?q=? 已知,方程3x²-5x-7=0的两个根为x1、x2(韦达定理)求|x1-x2|根据韦达定理x1+x2=-b/ax1x2=c/a 关于X的方程根号下1-X^2=x+a在区间[1,1]上有解,则实数a的取值范围是 若p,q为正实数,且关于x的方程x2+px+q=0与x2+qx+p=0均有实根,求p+q的最小值cdinten 你的答案不对恶,把4代进去就是错的。 已知方程-x2+3x-m=3-x在x∈(0,3)内有唯一解,求实数m的取值范围 使得方程根号(16-x^2)-x-m=0有实数解,则实数m的取值范围?答案是4≤m≤4根号2.这个好像要画图!麻烦给个图解, 方程x的平方+px+q=0的解集是A,方程X的平方+qx+2p=0的解集是B,又AnB={-1},求AUB 若正数a为方程3x^2-5x+3=0的两个根x1,x2的比例中项,求a(我觉得3x^2-5x+3=0这个方程无解) 已知全集U=R A={x f(x)=根号(X-1)(X-2)} B={x log2(X-a) 若方程x^2+px+q=0与x^2+qx+p=0有一公共根,且p不等于q,求(p+q)^2009的值答出来还送积分哦~加油.. 设集合A={x1,x2,x3}={x|x^3=1,x∈C},则集合B={x1x2,x1x3,x2x3}(x1,x2,x3∈A)与A的关系是 已知函数f(x)=log2(x^2-ax-a)在区间(-∞ ,1减根号3]是单调递减函数.求实数a的取值范围 一元二次方程px平方+qx平方+r=0(p不等于0)的两根为0和-1,则q:p= 已知5a的y+5次方b的3x次方,与-4a的2x次方b的2-4y次方是同类项,则x= y= 已知a>0a≠1,试求使方程log2(x-ka)=log2根号下(x^2-a^2)有解的k的取值范围希望得到图象法的解释,谢 已知方程x^2+px+q=0的一个根与方程x^2+qx-p=0的一个根互为相反数,并且p不等于q,求p-q的值. 已知2a的y+5次方b的3x次方与2分之5a的2x次方b的2-4y次方是同类项则x=【】,y=【】 若log2(2-a)/根号(a-1)有意义,则a的取值范围 已知:方程x^2+px+q=0的两个根为a,b,而a+1和b+1是关于x的方程x^2+qx+p=0的两根,求p,q的值. 已知关于x的方程2x^2+(log2m)x+log2根号m=0,有两个相等的实数根,求m的值 设关于方程4^x-2^x+1-b=0,若方程有实数解,求实数b的取值范围 以知关于X的方程 X的平方-pX+qX=0 的两个根是2和-3,求p,q的值. 若方程(1/2)^x=log2(X)的解为x1,方程(1/2)^x=log1/2X的解为x2,则x1x2的取值范围为若方程(1/2)的x次方=log以2为底x的对数的解为X1,若方程(1/2)的x次方=log以1/2为底X的对数的解为x2,则x1.x2的取值范围是什么 方程根号下(4-x^2)=lgx的根的个数是请把步骤写得清楚点,谢谢 如果x=3时,代数式px的3次方+qx+1的值为2008,则当x等于-3时px的3次方+qx+1 若x1,x2为方程【2的x次方=(1/2)的-1/x+1次方】的两个实数解,则x1+x2= 方程根号下4-x^2=lg x的根的个数4-x^2都在根号里 当x=-2时,代数式px的3次方+qx+1的值等于2012,那么当x=2时,代数式px+qx+1的值为多少?错了,当x=-2时,代数式px的3次方+qx+1的值等于2012,那么当x=2时,代数式px的3次方+qx+1的值为多少?四个选项A.2010 B.-201
    备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn