File: runstar

package info (click to toggle)
scheme9 2025.08.12-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,080 kB
  • sloc: lisp: 16,752; ansic: 11,869; sh: 806; makefile: 237; sed: 6
file content (17 lines) | stat: -rw-r--r-- 621 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
S9 LIB  (run* (variable) query)  ==>  list
        (run* () query)          ==>  list

        (load-from-library "amk.scm")

Run the given AMK (Another Micro Kanren) query and return its
result, if any. See the book "Logic Programming in Scheme"[1]
for an introduction to AMK. If a variable is given, return all
values for that variable that satisfy the query.

[1] http://www.lulu.com/shop/nils-m-holm/logic-programming-in-scheme/\
    paperback/product-18693432.html

(run* (q) (fresh (h t) 
            (== q (list h t))
            (appendo h t '(1 2 3))))
  ==>  ((() (1 2 3)) ((1) (2 3)) ((1 2) (3)) ((1 2 3) ()))