Skip to content

Latest commit

 

History

History
40 lines (33 loc) · 1.28 KB

README.md

File metadata and controls

40 lines (33 loc) · 1.28 KB

logic

A logic programming library for F# based on miniKanren and μKanren. It is designed to offer an idiomatic F# programming style and also resemble the scheme version of miniKanren.

Example

The peano function in Scheme-miniKanren

(define peano
  (lambda (n)
    (conde
     ((== 'z n))
     ((fresh (n-)
             (== `(s. ,n-) n)
             (peano n-))))))
             
(run 3 (q) (peano q)) ;; '(z (s. z) (s. (s. z)))

the F# version is pretty similar

let rec peano n =
    logic {
        do! conde [ Str "z" == n;
                    logic {
                        let! n' = fresh
                        do! Pair (Str "s", n') == n
                        return! peano n'
                    } ]
    }

run 3 (fun q -> peano q) //  [Str "z"; Pair (Str "s",Str "z"); Pair (Str "s",Pair (Str "s",Str "z"))]

The Reasoned Schemer

For the functional programmer who wants to learn to think logically there is no better introduction than The Reasoned Schemer.

alt text