Eshel Yaron

Hi there, I’m Eshel Yaron and this is 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'.

Recent Posts

Projects

Sweep: SWI-Prolog Embedded in Emacs

Sweep is an Emacs package that 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. You can also browse it in multi-page format.

Dict: Emacs client for RFC2229 dictionary servers

Dict is an Emacs package that provides an interface for querying RFC2229 dictionary servers and displaying word definitions. It a simple and extensible tool, meant to do one job (looking up definitions in the dictionary) and to do it well. For more details, see the Dict manual.

Note: the core functionality of Dict is incorporated in Emacs’s built-in dictionary.el package starting from Emacs version 30. See also my blog post Extending Emacs’s Dictionary Library.

Sourcehut GraphQL client for SWI-Prolog

sourcehut.pl - a SWI-Prolog package for interacting with the GraphQL API of sourcehut instances.

sourcehut.pl 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", "sourcehut.pl", Repo, []),
   get_dict(id, Repo, RepoId),
   sourcehut_git_upload_artifact(RepoId, "v0.1.2", "/tmp/foo/baz.txt", Artifact, []).

eshellisp

A Scheme Lisp interpreter implemented in SWI-Prolog.

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

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

flymake-swi-prolog.el and diagnostics.pl

diagnostics.pl 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 diagnostics.pl to provide diagnostics for SWI-Prolog source code in prolog-mode Emacs buffers.

ropes.pl

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: