Red Rozenglass on Nostr: zardoz.el That is not lisp. You lost homoiconicity, and you're introducing large ...
zardoz.el (nprofile…jgyg) That is not lisp. You lost homoiconicity, and you're introducing large amounts of syntax. That is not the lisp way. A lispy implementation, I would argue, would look something like this:
<list>
<atom>defun</atom>
<atom>frob</atom>
<list><atom>x</atom></list>
<list>
<atom>+</atom>
<atom>2</atom>
<atom>x</atom>
</list>
</list>
This way, if you write macros to manipulate code, you don't care that the lists are function calls or arglists or defuns, they're just lists and atoms, which is an important property of lisp languages; homoiconicity. A minor concession might be made perhaps for strings:
(setq name "John Smith")
<list>
<atom>setq</atom>
<atom>name</atom>
<string><![CDATA[John Smith]]></string>
</list>
Macro stuff, special forms, quoting and unquoting (i.e. ` and , ) might need their own elements too, stuff like:
`(set-age user ,(1+ old-age))
becomes:
<quote>
<list>
<atom>set-age</atom>
<atom>user</atom>
<unquote>
<list>
<atom>1+</atom>
<atom>old-age</atom>
</list>
</unquote>
</list>
</quote>
Published at
2025-04-02 20:13:29Event JSON
{
"id": "d36c2faa5674901118d6bbbb4568b15cccf3ec07255ffaf9e8188a423613239f",
"pubkey": "ec9f49eafea9211a5d3c911adc0938d8ead1de1e299634b4ce3c38b681489b8a",
"created_at": 1743624809,
"kind": 1,
"tags": [
[
"p",
"aa31c88215d25d1d81323a0c1b4fd7908956f36f31849529bbff00458f98ac8d",
"wss://relay.mostr.pub"
],
[
"e",
"f67a9d2f2eec0daf4edc3dabfd93d4fe5d47eafb2f5c8668a325ff52873be605",
"wss://relay.mostr.pub",
"reply"
],
[
"proxy",
"https://fedi.dreamscape.link/rozenglass/p/1743624809.865506",
"activitypub"
]
],
"content": "nostr:nprofile1qy2hwumn8ghj7un9d3shjtnddaehgu3wwp6kyqpq4gcu3qs46fw3mqfj8gxpkn7hjzy4dum0xxzf22dmluqytruc4jxs4pjgyg That is not lisp. You lost homoiconicity, and you're introducing large amounts of syntax. That is not the lisp way. A lispy implementation, I would argue, would look something like this:\n\n\u003clist\u003e\n \u003catom\u003edefun\u003c/atom\u003e\n \u003catom\u003efrob\u003c/atom\u003e\n \u003clist\u003e\u003catom\u003ex\u003c/atom\u003e\u003c/list\u003e\n \u003clist\u003e\n \u003catom\u003e+\u003c/atom\u003e\n \u003catom\u003e2\u003c/atom\u003e\n \u003catom\u003ex\u003c/atom\u003e\n \u003c/list\u003e\n\u003c/list\u003e\nThis way, if you write macros to manipulate code, you don't care that the lists are function calls or arglists or defuns, they're just lists and atoms, which is an important property of lisp languages; homoiconicity. A minor concession might be made perhaps for strings:\n(setq name \"John Smith\")\n\u003clist\u003e\n \u003catom\u003esetq\u003c/atom\u003e\n \u003catom\u003ename\u003c/atom\u003e\n \u003cstring\u003e\u003c![CDATA[John Smith]]\u003e\u003c/string\u003e\n\u003c/list\u003e\nMacro stuff, special forms, quoting and unquoting (i.e. ` and , ) might need their own elements too, stuff like:\n\n`(set-age user ,(1+ old-age))\nbecomes:\n\u003cquote\u003e\n \u003clist\u003e\n \u003catom\u003eset-age\u003c/atom\u003e\n \u003catom\u003euser\u003c/atom\u003e\n \u003cunquote\u003e\n \u003clist\u003e\n \u003catom\u003e1+\u003c/atom\u003e\n \u003catom\u003eold-age\u003c/atom\u003e\n \u003c/list\u003e\n \u003c/unquote\u003e\n \u003c/list\u003e\n\u003c/quote\u003e\n\n",
"sig": "7e5a44de2ba8474a6b838a21d611a43cc97cb63887abe308398aa90bed8a7efae391b9cd561cce4240379e05c9c77d245d9882e277ff01f8d18634c0468d7872"
}