git.fiddlerwoaroof.com
Raw Blame History
;;; fwoar-kanren-utils.el --- more functional utilities for emacs -*- lexical-binding: t; -*-

;; Copyright (C) 2020 Edward Langley

;; Author: Edward Langley <fwoar@elangley.org>
;; Version: 0.0.1
;; Keywords: minikanren,dom
;; URL: https://fwoar.co
;; Package-Requires: (reazon)

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; Some kanren utilities for dealing with the libxml dom

;;; Code:
(require 'reazon)

(reazon-defrel fwoar/tago (tag dom)
  (reazon-caro dom tag))

(reazon-defrel fwoar/attro (attr value dom)
  (reazon-fresh (attrs attr-pair dom-cdr)
    (reazon-cdro dom dom-cdr)
    (reazon-caro dom-cdr attrs)
    (reazon-membero attr-pair attrs)
    (reazon-conso attr value attr-pair)))

(reazon-defrel fwoar/childreno (children dom)
  (reazon-fresh (attrs attr-pair dom-cdr)
    (reazon-cdro dom dom-cdr)
    (reazon-cdro dom-cdr children)))

(reazon-defrel fwoar/childo (child dom)
  (reazon-fresh (children)
    (fwoar/childreno children dom)
    (reazon-membero child children)))

(reazon-defrel fwoar/dom-searcho (child dom)
  (reazon-disj
   (reazon-== child dom)
   (reazon-fresh (int)
     (reazon-conj
      (fwoar/childo int dom)
      (fwoar/dom-searcho child int)))))


(provide 'fwoar-kanren-utils)
;;; fwoar-kanren-utils.el ends here