Because typically you'd be building `five` out of `zero`, but that's more of an "implementation detail" rather than a property of `five` or `zero`. Examples are numerous:
i. Peano Axioms: (Typically) your initial element is 0 and you'll get 1 by applying the successor function to 0 and 2 by applying that to 1 and so on.
ii. Von Neumann's definition of Ordinals: {} is zero and one is {{}} and two is {{}, {{}}} and so on.
iii. Conway's definition of Surreal numbers: {|} is zero and { {|} | } is one and so on.
iv. Church encoding
and many more.
P.S. I'm not a logician and don't know whether "more of an abstraction" has any well-defined meaning and not just the meaning that might be inferred by a software developer.
1. You shouldn't be updating your `.gitignore` continuously. You need to ignore everything and explicitly define exceptions e.g.
*
!.gitignore
!init.el
2. The reason I prefer ~/.emacs.d/ is that I have it in a git repo and on every system, I'll just clone the repo and soft link it in the home directory. This way, I have only one directory inside home about emacs within which my files are explicitly separated and tracked.
P.S. I've recently tried to move from Spacemacs to Emacs and by no means a pro, so the process I've described may not be optimal.
I solve this issue by using my own config directory; this way I soft-link two things from my dotfiles repo:
- .emacs - which defines my config dir and loads everything in there
- my own config dir (called .emacs.conf), in which I have lots of .el files with specific configurations
Emacs packages still write by default to .emacs.d, and this way I don't have to care about any of that when moving between machines, because my configuration and Emacs's ongoing state are separate.
To be honest, though, I'll probably be migrating into a single-file literate solution soon, which will render my own config directory unnecessary.
I do this as well! I have this repo [0] at ~/cfg, then I symlink what I need [1] as an init script. My end goal is to be able to run a single script and get everything [2] set up on a new machine (I change machines somewhat frequently and I got the manual process to under 45 minutes, so there's room for improvement). More on setting up Macs [3].
There is also GNU Stow [4] that does something similar, and probably better.
I used to do it that way. I've switched to `vcsh` to let me keep various files directly in my ~/ directory in various different git repos without needing a ~/.git/ marking the whole thing as a working directory.
1. I still need to grow my .gitignore file as I add more .el files of my own.
2. A similar scheme would be to maintain a directory called ~/elisp in git and make ~/.emacs a symlink to ~/elisp/emacs. And pretend that ~/.emacs.d/ does not exist.
So the units in Stack editor is not “files”, it’s “functions”(or “definitions”). And we navigate by functions, edit by functions, and finally program by functions. It’s more like the program is running and we got a call stack here. We edit the code that’s collected for a specific purpose without constantly switching the context. It can be faster.
i. Peano Axioms: (Typically) your initial element is 0 and you'll get 1 by applying the successor function to 0 and 2 by applying that to 1 and so on.
ii. Von Neumann's definition of Ordinals: {} is zero and one is {{}} and two is {{}, {{}}} and so on.
iii. Conway's definition of Surreal numbers: {|} is zero and { {|} | } is one and so on.
iv. Church encoding
and many more.
P.S. I'm not a logician and don't know whether "more of an abstraction" has any well-defined meaning and not just the meaning that might be inferred by a software developer.