表达式

如何模仿人的学习模式来教计算机程序解数学题?

旧时模样 提交于 2020-03-01 20:26:42
周末,看关于专家系统方面的书,其中有关于规则方面的内容,忽然就想,能不能模仿人的学习方式来提升计算机程序的计算能力呢? 试想,一个小孩子,他一开始什么也不会,首先,你要告诉他什么是数字,然后告诉他什么是加、减;然后告诉他什么是乘、除,还要告诉他有乘、除要先计算乘除,然后又引入了括号说,有括号永远要先计算括号。如此,随着告诉他的技能越多,他的解题能力也就越强。 于是就想着试验一下。 第一步,教计算机学习什么是数字。 下面的正则表达式,就是告诉“孩子”,数字就是前面可能有“-”号,当然也可能没有,接下来连续的数字0-9,组成的数字,后面可能还会有小数点开始加一堆0-9的数字,当然没有也没有关系。如此,它就算懂得认数字了。 public final class MathNumber { private MathNumber() { } public static String numberPattern = "[-]?[0-9]+([.][0-9]*)?"; public static Pattern pattern = Pattern.compile(numberPattern); public static Matcher match(String string) { Matcher match = pattern.matcher(string); if (match.find())

计算器 abacus 技术文档之三----自定义函数

馋奶兔 提交于 2020-02-29 03:30:24
计算器 abacus 是一个小巧却功能齐备的计算器,支持四则混合运算(包括逻辑运算),支持大量的数学函数,支持变量参与运算,支持自定义函数以扩充功能。目前版本是 2,地址: http://www.oschina.net/code/snippet_736932_13725 。本文就自定义函数作一介绍。 用户可以将含有参数的表达式定义为一个新函数,以实现含参表达式的复用,对于一元二次方程求根,可以定义函数 SolveEqution1x2p(a, b, c) = (- b + sqrt(b ^ 2 - 4 * a * c)) / (2 * a) 那么没有参数的表达式就不能定义成函数吗?照样可以,只要你喜欢,假使你不喜欢使用符号常量,你仍然可以通过定义函数来使用圆周率:Pi() = 3.141593,然后在需要圆周率的地方调用它就行了。进一步,可以在已定义函数的基础上定义新的函数,比如你定义了圆的面积函数(下式中pi 是符号常量,圆周率): AreaCircle(r) = pi * r * r 就可以继续定义圆环的面积 AreaRing(r1, r2) = AreaCircle (r1)- AreaCircle (r2) 如何,很刺激吧?我们来看一个更有趣的例子,先介绍一下程序内置的 if 条件函数 if(x, a, b) 这个函数有三个参数,当第一个参数 x 不为零时函数返回第二个参数

关于电商中复杂促销手段的一个解决思路-规则表达式

核能气质少年 提交于 2019-12-21 18:56:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一般来说,只要是面向零售,不管是B2C,C2C还是B2B2C模式,商城的促销模式都是差不多的,比如满就送,满x减x,满x赠x,满x折扣x,组合销售,优惠券等等。所有促销活动都有明确的起止周期,超期后活动自动关闭。 个人理解电商行业的促销行为有如下几个特点 手段灵活多变,而且多种多样。 促销的主体是运营商和商家。 经常根据营销策略动态调整 促销必须定义准确,不能存在歧义 促销可以组合应用,甚至多种促销手段存在依存关系或互斥关系 因此,最好用一种灵活可变的方式来设计促销机制。 我考虑的是用表达式引擎实现,非常灵活,最重要是很简单。 首先设计之初要理清促销的两大要素,一个是条件,另一个是资源,条件是促销规则成立的基础,资源是促销规则所要分配的内容,比如红包,金额,包邮之类。 条件主要包括 地域,组织,会员生日月份,会员生日,会员积分,会员等级,下单时间,整点,金额,件数,指定商品,下单日期/时间,定时(用做商品秒杀),限定数量,限定金额,商品组合等 资源主要包括 赠送现金 扣减费用 免单 免邮费 成为会员 送积分xx 送红包 送商品 表达式中可以插入java对象/方法,如某店搞活动,活动规则为 1.满100返10块,最高上限200元 2.晚上10点之后半价 两个规则不能同时成立 规则计算的返回值一定是一组结果

Spring Bean定义中表达式语言的支持

好久不见. 提交于 2019-12-05 13:24:18
SpEL(Spring Expression Language,Spring表达式语言)的一个重要的作用就是扩展Spring容器的功能,允许在Bean定义中使用SpEL。XML配置文件和Annotation中都可以使用SpEL。在XML和Annotation中使用SpEL时,都需要使用#{ expression }的格式来包装表达式。 例如有如下的Author类: public class Author { private String name; private List<String> books; private Object obj; //省略getter 和 setter } 这个Author类需要注入name和books属性。当然,可以按照以前的方式进行配置,但如果使用SpEL,将可以对Spring配置文件进一步简化: 因为本例要用到Spring的p命名空间和util命名空间,故先在applicationContext.xml文件的<beans>元素中增加以下内容: xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" http://www.springframework.org/schema/util http:

【讲古堂】表达式求值

流过昼夜 提交于 2019-12-04 22:05:07
【讲古堂】表达式求值 ( dubenju@126.com 2015/12/27) 什么是表达式 表达式是由数字,操作符,变量,常量等有意义地组合而成并能求得结果的式子。 例如: 32 + ( ( 9 * Celsius ) / 5 ) 4 + 2 * 55 / 2.5 组成表达式的信息种类繁多,这里只讨论数字表达式,即表达式由以下要素构成: 数字、操作符、变量、常量。 数字 不考虑进制的话,通常指十进制数,小数的时候是有小数点的。数字通常是以被操作对象的身分出现在表达式中的,叫做操作数。 操作符 表示对操作数进行哪种操作的符号叫做操作符,被操作的值叫做操作数,对操作数进行操作的过程称为表达式求值。根据操作对象的个数分为一元操作符和二元操作符。 一元操作符,操作只应用于单一操作数。例如:23!-n。 操作应用于两个操作数的叫二元操作符。例如:6*21、29/11、6.9+19.8、21.1-2.8 优先级 相对其他操作符,每个操作符都有一个优先级,优先级高的操作符比优先级低的操作符优先应用。一般的优先级是这样设置的: 分组操作符()具有最高优先级。 一元操作符-+比乘除模的优先级高。 次方乘除模比加减法的高。 操作数的类型变换 类型变换是指操作的过程中操作数的类型发生变化的现象。 比如: 1/3 1.5/0.3 变量与常量 变量是指值可以变化的量。比如x+5中的x。