3 ms·
It would be cool if it was implemented as a reader macro instead of just passing a string to a function.
by smabie 6y ago
It would be cool if it was implemented as a reader macro instead of just passing a string to a function.
- phantomics 6y agoWouldn't be too hard to do, someone in the video suggested a #⎕ reader macro followed by APL. Like take '#⎕string' then expand that to '(april "string")'. But April has many ways of passing options and external data for the compiled code to operate upon, and implementing a reader macro system that would support all those parameters would be complicated and require developers to learn a bunch of new syntax in order to use April with reader macros.
- phoe-krk 6y agoDo it yourself! (Implementation loosely based on phantomics' comment below.) (defun april-reader (stream char) (declare (ignore char)) `(april ,(read stream t nil t))) (set-macro-character #\⎕ #'april-reader)
- Avshalom 6y agoYou're probably gonna want something more complicated than that. Glancing at the github page it looks like at least the following need to be dealt with: (april "apl code") ; and april-f (april (with (stuff)) "apl code") ; and april-f (april-c "apl code" (input)) (april-c (with (stuff)) "apl code" (input))
- phoe-krk 6y agoYes, the above is a trivial implementation; handling multi-form input would need to be much more complex. Thankfully, for simple one-liners, you'll likely want either April literals (implemented above) or April anonymous functions, both of which won't take additional arguments; you should be able to implement both as simple reader macros.
- phantomics 6y agoAnother option is to load APL source from a file. (april-load #P"/path/to/code.apl") Then you can have files of pure APL code with no Lisp hanging around.