Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/junjihashimoto/th-cas
Compile time CAS(Computer Algebra System) for Haskell
https://github.com/junjihashimoto/th-cas
algebra cas computer-algebra haskell
Last synced: 2 months ago
JSON representation
Compile time CAS(Computer Algebra System) for Haskell
- Host: GitHub
- URL: https://github.com/junjihashimoto/th-cas
- Owner: junjihashimoto
- License: mit
- Created: 2015-04-10T01:54:39.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2019-11-27T17:30:11.000Z (about 5 years ago)
- Last Synced: 2024-07-30T17:49:52.854Z (5 months ago)
- Topics: algebra, cas, computer-algebra, haskell
- Language: Haskell
- Homepage:
- Size: 170 KB
- Stars: 17
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog.md
- License: LICENSE
Awesome Lists containing this project
README
# th-cas : Compile-time CAS(Computer Algebra System)
[![Hackage version](https://img.shields.io/hackage/v/th-cas.svg?style=flat)](https://hackage.haskell.org/package/th-cas) [![Build Status](https://travis-ci.org/junjihashimoto/th-cas.png?branch=master)](https://travis-ci.org/junjihashimoto/th-cas)
CAS(Computer Algebra System) operations like diff are done at compile-time.
Compile time operations is done in TemplateHaskell.## Interactive Usage
```th-cas``` supports interactive usage like mathematica.
To start repl, type "stack ghci".Variables are defined by ```V``` of data-constructor.
A example of intertative usage is below.
```
$ stack ghci
...
*Algebra.CAS>
*Algebra.CAS> let x = V "x"
*Algebra.CAS> let y = V "y"
*Algebra.CAS> x^2 + 2*x + x^2
2*x + 2*(x^2)
*Algebra.CAS> diff (x^2 + 2*x + x^2) x
2 + 4*x
*Algebra.CAS> linsolve [x+y=:2,x-y=:3]
Just [(x,5/2),(y,-1/2)]
*Algebra.CAS> subst [(x,1)] $ diff (x^2 + 2*x + x^2) x
6
```## Usage at compile time
Write ```diff function var``` with Quotes of TemplateHaskell.
```diff``` makes a diffirential of the function at compile-time.
So there is no overhead at execution-time.A example is below.
Write following code with quotes.
```
import Algebra.CAS.THmyfunc :: Int -> Int
myfunc x = $(diff [|x*x+2*x+1|] [|x|])
```At compile time, the quotes is translated to ```2*x+2```.
```
import Algebra.CAS.THmyfunc :: Int -> Int
myfunc x = 2*x+2
```