40 karma · joined June 1, 2016
Hello HN!
Without macros, regular expressions are strings at compile time and then at runtime objects are created based on the strings to evaluate them.
With macros, regular expressions are expanded at compile time into Common Lisp code that implements the evaluation.
There's a similar idea with an ORM library.
Without macros, the object-relational mapping is defined at compile time and any dynamic SQL is generated at run time.
With macros, the object-relational mapping is used at compile time to expand the query macros into Common Lisp code that includes the actual SQL.
Then also remember that the compiler is available at runtime in a lisp, so the distinction only matters when comparing it to non-lisps.
It's a wonderful tour of advanced macro concepts. With several of the macros presented I found myself saying "well that's just x language feature in y" but that's missing the point. The point is that Common Lisp allows you to implement your own language features, with macros of course!
This chapter is a wonderful climax to the whole book. Lisp moving Forth moving Lisp reminded me of the intertwined nature of DNA, RNA and proteins in Biology.
There's great humour throughout the book, I especially enjoyed the little sideways jabs at Scheme programmers!
I noticed that as well. My eyes feverishly scanning the previous paragraph for the definition.
This saves me from throwing away my working copy when I switch to a different task;
/source/repos/AcmeCorp 2fddd74f9a [bug/CurrentWork]
/source/repos/AcmeCorp-hotfix 27175cf6c5 [hotfix/2023-11-27.1]
/source/repos/AcmeCorp-master 016ca20b75 [master]
/source/repos/AcmeCorp-reference 454be5348d [feature/RecentReviewedWork]
/source/repos/AcmeCorp-release 95027177d7 [release9.12.0]Hiring for;
- Remote Full Stack .NET Software Developer; https://careers.agepartnership.co.uk/vacancies/vacancy?vacan...
- Junior opportunities also available for the above role.
Age Partnership is the UK's number 1 equity release advisor; http://www.agepartnership.co.uk.
As the Software Development team (ca. 10 members) at Age Partnership we build .NET applications and services for our colleagues in roles such as Financial Advisors, Administrators and Customer Solutions Agents in the Financial Services sector.
https://careers.agepartnership.co.uk/vacancies/
Apply through the above portal or email adam dot morgan at age partnership dot com for more information. At the moment we can only accept candidates with right to work in the UK.
Hiring for;
- Remote Full Stack .NET Software Developer; https://careers.agepartnership.co.uk/vacancies/vacancy?vacan...
- Junior opportunities also available for the above role.
Age Partnership is the UK's number 1 equity release advisor; http://www.agepartnership.co.uk.
As the Software Development team (ca. 10 members) at Age Partnership we build .NET applications and services for our colleagues in roles such as Financial Advisors, Administrators and Customer Solutions Agents in the Financial Services sector.
https://careers.agepartnership.co.uk/vacancies/
Apply through the above portal or email adam dot morgan at age partnership dot com for more information.
My solution was to open a dedicated current account and or credit card for each category. This makes assigning a category to transactions simple because I know which budget category each account is designated to.
This also helps with day-to-day budgeting because I have setup scheduled transactions to top-up my essentials and luxuries bank accounts with the correct amount of funds from my savings. A side effect is the stark reminder that using the credit cards eats away my goals budget because I've already spent my allocated funds for essentials or luxuries.
One downside here is losing the credit card protection on some purchases. The work around is to transfer funds back to savings when making these purchases. Another is that it's difficult to adopt immediately because opening several accounts may affect credit rating or rouse suspicion from financial institutions.