Skip to content
This repository has been archived by the owner on Dec 17, 2023. It is now read-only.
/ csharp_ukanren Public archive
forked from jsl/ruby_ukanren

A port of microKanren (Ruby) to CSharp (the f# versions mentioned on the ukanren site look more interesting https://github.com/kurtschelfthout/FsLogic )

License

Notifications You must be signed in to change notification settings

ozzymcduff/csharp_ukanren

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

microKanren in CSharp Build status

microKanren is a minimalist relational (logic) programming language. This project is a port of microKanren to CSharp. It is an almost exact translation of the original implementation, which was written for Petite Chez Scheme.

Installation

To install MicroKanren, run the following command in the Package Manager Console

PM> Install-Package MicroKanren

Usage

The following example demonstrates how MicroKanren can be used from a simple program:

using MicroKanren;
class SimpleProgram:Core{
    public string Do(){
        var res = CallFresh((q)=> Eq(q, 5) )(EmptyState);
        return res.ToString();
    }
}

> new SimpleProgram().Do()
(((([0] . 5)) . 1))

See the spec file for more examples. The spec file is almost an exact port of the microKanren tests written in Scheme.

Credits

The code in this gem is closely based on the following sources:

  • The microKanren paper by Jason Hemann and Daniel P. Friedman. I read this paper a couple of times, and will probably have to read it a few more before I have a better understanding about what this code is doing and how to write more effective logic programs.
  • This code is also in parts copied from Scott Vokes' port of microKanren to Lua. It was great to have the Lua code as a second example of the implementation in the paper, and it made my job especially easy since Lua is so similar to Ruby.

Dependencies

This project requires .net 4.0 or higher.

Contributing

  1. Fork it ( https://github.com/wallymathieu/csharp_ukanren/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

See LICENSE.txt.

Author

See credits for source of original code. This is a port of a port written by [Justin Leitgeb] (http://justinleitgeb.com). This port is written by Oskar Gewalli.

About

A port of microKanren (Ruby) to CSharp (the f# versions mentioned on the ukanren site look more interesting https://github.com/kurtschelfthout/FsLogic )

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%