davidar / moded-logic

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

moded-logic

Gitpod ready-to-code Coverage Status

A Haskell implementation of Constraint-Based Mode Analysis of Mercury, targeting the Logic monad.

Logic program

append [] b b.
append (h:t) b (h:tb) :- append t b tb.

Usage

> observeAll (append_ooi [1..5])
[([],[1,2,3,4,5]),([1],[2,3,4,5]),([1,2],[3,4,5]),([1,2,3],[4,5]),([1,2,3,4],[5]),([1,2,3,4,5],[])]

Code generated by mode analysis

append_iii a1 a2 a3 = (do
  guard $ a1 == []
  b <- pure a2
  guard $ a3 == b
  pure ()
 ) <|> (do
  (h0:t) <- pure a1
  b <- pure a2
  (h1:tb) <- pure a3
  h <- pure h1
  guard $ h0 == h
  () <- append_iii t b tb
  pure ()
 )

append_iio a1 a2 = (do
  guard $ a1 == []
  b <- pure a2
  a3 <- pure b
  pure (a3)
 ) <|> (do
  (h0:t) <- pure a1
  h <- pure h0
  h1 <- pure h
  b <- pure a2
  (tb) <- append_iio t b
  a3 <- pure (h1:tb)
  pure (a3)
 )

append_ooi a3 = (do
  a1 <- pure []
  b <- pure a3
  a2 <- pure b
  pure (a1,a2)
 ) <|> (do
  (h1:tb) <- pure a3
  h <- pure h1
  h0 <- pure h
  (t,b) <- append_ooi tb
  a1 <- pure (h0:t)
  a2 <- pure b
  pure (a1,a2)
 )

About

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Haskell 99.7%Language:Dockerfile 0.3%