Context Dependent Semantic: Python, Lisp setf
Python Ruby JavaScript Etc
Many language have the syntax a[i] = x
to assign or replace a element in a list. It is a syntax that has context dependent semantics.
The issue here, is that it uses the same notation to indicate a “place”. For example,
a[3]
is the third index in array.
So,
a[3]=4
means make the third index to have value of 4.
The problem here, is that there's different meaning of a[3]
in the 2 cases.
Normally,
a[3]
evaluates to a value.
But in a[3]=4
,
the
a[3]
does not evaluate. Rather, it's part of the syntax that tells the compiler of a “storage location”.
So, you see, the a[3]
in print a[3]
and a[3]=4
have diff meaning, and is context dependent.
Common Lisp setf
The Common Lisp setf is the most screwed design in computer languages possible.
here's elisp manual explaining setf.
![elisp manual generalized variable 2017 04 07](i/elisp_manual_generalized_variable_2017-04-07.png)
Forth and Bliss
And of course Forth also explicitly has fetch and store ops so you can say
3 a @ .
andx @ 3 a !
for printing and assignmentThe Bliss language (DEC Systems lang) had a unary dot operator to return a value so you'd say
a[3]=.x
andprint .a[3]
—from Bahstin Beer Bum @mmaug, 2016-10-05