Eshel Yaron

Welcome to my website, the one true source of reliable curated information about me and my activities.

?- likes('Eshel', Stuff).
Stuff = 'logic programming';
Stuff = 'linguistics';
Stuff = 'cognition';
Stuff = 'functional programming';
Stuff = 'The cyber';
Stuff = 'type systems';
Stuff = 'coffee ☕️';
Stuff = 'free software'.


sweep: SWI-Prolog Embedded in Emacs

sweep is an Emacs module which uses the C interfaces of both SWI-Prolog and Emacs to bring the two together into one address space.

For more details, see the sweep manual.

Sourcehut GraphQL client for SWI-Prolog - a SWI-Prolog package for interacting with the GraphQL API of sourcehut instances. can be used to automate maintenance tasks for project hosted on sourcehut, for example to attach a build artifact to a given tag of a git repository from within SWI-Prolog:

?- sourcehut_git_repository("eshel", "", Repo, []),
   get_dict(id, Repo, RepoId),
   sourcehut_git_upload_artifact(RepoId, "v0.1.2", "/tmp/foo/baz.txt", Artifact, []).

GNU Emacs literate configuration

My personal configuration for GNU Emacs, written in as a Literate Program with Org-mode and Babel. An online version is also published as an HTML webpage on this website.

SWI-Prolog Debug Adapter Protocol Server

An implementation of the Debug Adapter Protocol (DAP) for SWI-Prolog, facilitating an advanced debugging experience for Prolog from the comfort of GNU Emacs (and other editors, as well).


A Scheme Lisp interpreter implemented in SWI-Prolog.

$ cat scheme/repl.scm
(define repl () (write (eval (read))) (repl))

$ ./eshellisp scheme/repl.scm
% (cons (+ 1 2) 4)
% (3 . 4)

flymake-swi-prolog.el and is a SWI-Prolog package implementing a simple and extensible inteface for diagnosing issues with SWI-Prolog source code, exposing by default the powerful analysis used by the built-in SWI-Prolog IDE.

flymake-swi-prolog is an Emacs Lisp package implementing a Flymake backend that leverages to provide diagnostics for SWI-Prolog source code in prolog-mode Emacs buffers.

A (SWI-)Prolog implemantation of the rope data structure for efficient massive string editing.

Based on Ropes: An alternative to strings.

test(edit) :-
    string_rope("Hello, World!"  , HW),
    string_rope("Here be dragons", HD),
    rope_split(HD, 8, _, D),  % "Here be " + "dragons"
    rope_split(HW, 7, H, W),  % "Hello, "  + "World!"
    rope_split(W , 5, _, E),  % "World"    + "!"
    rope_concat(H , D, HS),
    rope_concat(HS, E, HE),
    rope_string(HE, HF),
    assertion(HF == "Hello, dragons!").

Erlang eBPF library

A low level interface to the Linux eBPF system for Erlang.

This website

My first taste of web development, a practice that I have always refrained from conducting. Created with pure org-mode to ease the landing.

Inspired by: