Clojure实现规则引擎

规则引擎

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

when

<conditions>

then

<actions>;

最为著名的规则引擎是Drools,现由JBoss维护,分为Guvnor,Expert,Jbpm5,Jbpm5和Planner五个模块,应用在jBPM工作流中。

目前Java中开源规则引擎也非常多,Open Source Rule Engines in Java,Java也已经指定了ru......

Compojure hello world

断断续续学习了很久的Clojure,对语法也半生不熟的了,不过基本可以使用了,写点web的项目锻炼一下Clojure的熟练度。

背景介绍

Compojure是Ring的中间件,实现了request的路由功能。

建立项目

开发Clojure项目标配的Lein,使用Lein命令 lein new compojure-example,建立项目。

添加依赖

初步建立项目之后,项目中只有Clojure-core的依赖,想要使用Compojure还需要添加相关的依赖。在project.clj中新增依赖:

[org.clojure/clojure "1.6.0&q......

Clojure function

今天记录一下Clojure的function.

Functions are first class object in Clojure.

定义函数

defn

最常用的函数定义方式就是使用defn来定义,首先来写个hello world.

(defn hello-world

[name]

(println (name " say Hello,World!"))

(hello-world "brucefeng")

函数再控制台上将会输入“brucefeng say Hello,World!"

通常我们在使用函数是基本有一......

Clojure的数据结构

基本数据结构

Boolean

Character

Keyword

Nil

String

Symbol

Metadata

Sequences

List

Map

Vector

Set

Struct

Clojure ns require use import

ns

ns用来定义当前的命名空间,可以配合import,require,use进行使用。

(ns foo.bar

(:refer-clojure :exclude [ancestors printf])

(:require [clojure.contrib sql sql.tests])

(:use [my.lib this that])

(:import [java.util Date Timer Random]

(java.sql Connection Statement)))

require

require 是将clojure load进入当前的命名空间,会跳过已经lo......