Author Archives: Eric MacAdie

Working with some numerical test functions

Here are some Clojure functions for numerical tests.


You’re welcome.


Working With Clojure Arithmetic Functions

Continuing the exploration of the Clojure API, here are some of the arithmetic functions.


You’re welcome.


Working with structs

Here are some examples working with the Clojure API.

Here I look at various functions based on StuctMaps. The Clojure website says that records are now usually a better option. StructMaps have faster accessors that regular maps.

Here are some examples with defstruct:

Here are some examples with create-struct (pretty much the same):

If you create instances with “struct” instead of “struct-map”, you can list the args in order without the keys.


You’re welcome.

Working With conj

Another page exploring the Clojure API.

Today, it’s conj.

Added 2017-10-04_22.55.23



You’re welcome.

assoc and update

Working with assoc and update in Clojure.

Code entered at 2017-10-04_19.34.11.


You’re welcome.

2017-10-01 Update

I am still going through Simply Scheme. I am on chapter 8.

I may also start going through the Clojure API. I have tried 4Clojure a few times, and I tried the Kotlin Koans. I don’t think that is a good way for me to learn. I have a Kotlin book that I am looking at. I have thought about going through the functions on the Clojure Cheat Sheet, but I would need some way to keep track of what I have done. I made a page with a list of the functions in the core Clojure API for version 1.8. I have thought about this for a while, but recently I found a page called “One Weird Trick To Become a Clojure Expert“, which advocates going through the API. I may not go alphabetically.

Plus, unlike the Kotlin API, the core Clojure API is small enough that you can actually get through it without feeling overwhelmed.

I also found out that lein and boot do not work with JDK 1.9 on Ubuntu. I gathered from web searches that Clojure 1.9 will solve the issue. It seems to work fine on Windows 10.

You’re welcome.


This week I worked more on Simply Scheme. I got done with Chapter Six. Chapter Seven looks pretty short.

The Austin Clojure group had a code get-together at Cafe Express. There were only a few of us there. I worked on Simply Scheme.

One thing a lot of veteran Lisp/Scheme people do not like about Clojure is that it uses other characters for data structures (vectors, maps, sets) in places where other Lisps just use parentheses. I think I agree with Clojure for changing things a bit. I think it makes things more clear. There was a line about this topic in Chapter 7 of Simply Scheme that made me think about this:

Like cond, let uses parentheses both with the usual meaning (invoking a procedure) and to group sub-arguments that belong together.

There was a lot of discussion about JavaScript at the Clojure Meetup this weekend. I generally do not like anything related to JavaScript, not even ClojureScript. I have heard great things about it, and that David Nolen is a really smart guy, but it just seems like if you use ClojureScript, you will probably have to deal with a bunch of JavaScript anyway. So for now, I am not too eager to do anything mobile with Clojure. It seems like ReactNative still has a bad license, and you have to deal with Node on top of it all.

A couple of guys mentioned WebAssembly. I first read about that on the Racket mailing list in a thread in which a few people (myself included) were lamenting the inescapability of JavaScript. I think it is a drag that a lot of people want to use JavaScript everywhere. I would like an actual alternative (not just yet another *js framework, or a language that transpiles to JS). Will that be WebAssembly?

Someone on Hacker News somewhere warned that if a site uses WebAssembly, a site could prevent you from blocking ads if they really wanted to force you to see them. Stay tuned.

You’re welcome.

2017-09-17 Update

This week (and especially this weekend) were not too productive. I was hoping to look at some Clojure libraries for TensorFlow.

But I started out updating one of my laptops to Ubuntu 17, and I was unable to log in. So I downloaded Ubuntu Gnome and spent a lot of time trying to get that right. I hate hate hate the default Gnome window manager (I think it is called “mutter”). I tried to switch to another window manager, locked myself out, and then I tried to install Mint.

For some reason I was not able to burn the iso files, so I re-installed Ubuntu Gnome and figured out how to get compiz t work to make it somewhat usable.

I also thought about working on an nftables firewall, but there are some migration utilities that will be available in the next version of Ubuntu. I think the next version is coming out in a month.

You’re welcome.

2017-09-10 Update

This weekend I made another attempt at some numeric programming. I have been working on a Clojure library named Neanderthal. It can use CUDA, OpenCL or native libraries. Instead of using BLAS and LAPACK for native libraries, it uses the Intel Math Kernel Library.

In order to use the native library, I installed the Intel MKL library. I did have a bit of trouble with the library. This worked:

export LD_LIBRARY_PATH=/home/ericm/intel/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64_lin/

For some reason, the “export” had to be on the front. I tried without, and I got an error. But I was able to copy and paste the code from the native example here.

I was able to get the code running from the first OpenCL example.

These are some packages I installed to get the OpenCL example to work:

aptitude install ocl-icd-opencl-dev
aptitude install dkms
aptitude install beignet-opencl-icd

I will also look at TensorFlow. There are a few libraries that let you use Clojure.

You’re welcome.