gogotanaka/Hilbert

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Hilbert

[![Gem Version](https://badge.fury.io/rb/hilbert.svg)](http://badge.fury.io/rb/hilbert) [![Build Status](https://travis-ci.org/gogotanaka/Hilbert.svg?branch=master)](https://travis-ci.org/gogotanaka/Hilbert) [![Coverage Status](https://coveralls.io/repos/gogotanaka/Hilbert/badge.png?branch=master)](https://coveralls.io/r/gogotanaka/Hilbert?branch=master) [![Code Climate](https://codeclimate.com/github/gogotanaka/Hilbert/badges/gpa.svg)](https://codeclimate.com/github/gogotanaka/Hilbert) [![Dependency Status](https://gemnasium.com/gogotanaka/Hilbert.svg)](https://gemnasium.com/gogotanaka/Hilbert)

### Do you know the one best language in this world?

#### I believe mathematics (logic) is absolutely that language.

### How can we deal something as great as mathematics in a discrete world?

#### Hilbert is the answer.

Hilbert lets you have a sense of mathematics using a keyboard, the same as you would with a pen.

```
+---Discrete world---+                    +------Mathematics-------+
|        Ruby        |                    |        axiom           |
|        TeX         |<----  Hilbert ---->|    Uncountable noun    |
|       Python       |                    |  real number topology  |
+--------------------+                    +------------------------+
```

## Demo

The code below is input and output for the Hilbert interpreter. (You can try it with `hilbert -i`.)

### Logic
```coffeescript
P -> Q 
Q -> R
(P -> R)?
=> TRUE

P | Q # P or Q
~P    # not P
Q?    # Q is TRUE?
=> TRUE
```

### Differentiate

```
d/dx(cos(x))
=> ( - sin( x ) )

# You can omit parentheses

d/dx log(x)
=> ( 1 / x )

d/dy xy
=> ( x )

d/dx e^x
=> e ^ x
```

### Integrate

```
S(log(x)dx)[0..1]
=> - oo

S(sin(x)dx)[0..pi]
=> 2.0

S(cos(x)dx)[0..pi]
=> 0.0
```

### Limit

```
lim[x->oo] (1 + 1/x)^x
=> 2.7182682371744895

lim[x->0] 1/x
=> oo
```

### Sigma
```
∑[x=0,10] x
=> 55.0
```

### Matrix

```
(1 2 3; 4 5 6)
=> (1 2 3; 4 5 6)

(1 2 3; 4 5 6) + (1 2 3; 4 5 6)
=> (2 4 6; 8 10 12)

(1 2 3; 4 5 6) * (1 2 3)
=> (14 32)
```

### Function
```
f(x, y) = xy
f(1, 2)
=> 2
```


## How to use

Install the `hilbert` gem.

    $ gem install hilbert

Note to OS X Users: If the above `gem` command does not work with the stock version of Ruby (due to not being able to build a target indicated in the Makefile), then you will need to install a version of Ruby that includes the appropriate header files. Using [homebrew](http://brew.sh/) (`brew install ruby`) will suffice.

## Interpreter

    $ hilbert -i
    Enjoy! ->

## Use as native language

### Compile into R

    $ hilbert -r foo.hr

### Compile into Ruby

    $ hilbert -rb foo.hr

### Compile into Python

    $ hilbert -py foo.hr


## Use as math template within other langs


```rb
class ExampleClass
  def example_method
    #your Ruby codes
    ......

I love mathematics.
  a = (1 3 4)
  # your Hilbert codes
Q.E.D

  end
end
```

    $ hilbert -rb example.rb


```rb
class ExampleClass
  def example_method
    #your Ruby codes
    ......

    a = Vector[1, 3, 4]

  end
end
```

## Contributing

Any PRs or issues are welcome. (Please make them to [the `develop` branch](https://github.com/gogotanaka/Hilbert/tree/develop).)

You can become a committer, even if you only commit once.