summaryrefslogtreecommitdiffstats
path: root/txr.1
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-10-31 06:49:22 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-10-31 06:49:22 -0700
commit4b4ef6dfcf12e1db846b26a3b812aa010360d62f (patch)
treea80e4d82757e2385fa731f4fc07beb362e41d7d9 /txr.1
parente7523b22158785bcd542f2abfe3a3e0d96b7b1ab (diff)
downloadtxr-4b4ef6dfcf12e1db846b26a3b812aa010360d62f.tar.gz
txr-4b4ef6dfcf12e1db846b26a3b812aa010360d62f.tar.bz2
txr-4b4ef6dfcf12e1db846b26a3b812aa010360d62f.zip
Relax restrictions on dwim places.
No longer require the leftmost expression in a dwim place to itself be a place, except when the expression evaluates to a list, and the list is subject to an element deletion or a range operation. * eval.c (eval_init): Register dwim-set and dwim-del with one additional argument that the C functions now take. * lib.c (dwim_set, dwim_del): Take a new place_p argument which informs these functions whether the object they are operating on came from a syntactic place. The forbidden situations are diagnosed based on this flag: modification of the subrange of a list, or deletion of a list ref. Some error messages reworded. * lib.h (dwim_set, dwim_del): Declarations updated. * share/txr/stdlib/place.tl (defplace dwim): Produce a different update, clobber and delete expansion when the obj-place form isn't a place. In the non-place case, do not assign the result of the sys:dwim-set or sys:dwim-del operation back obj-place. Furthermore, pass a Boolean flag to sys:dwim-set and sys:dwim-del indicating which situation is the case: did the object argument come from a place or non-place. * txr.1: Documentation updated.
Diffstat (limited to 'txr.1')
-rw-r--r--txr.126
1 files changed, 15 insertions, 11 deletions
diff --git a/txr.1 b/txr.1
index cebf3b93..47b20ac1 100644
--- a/txr.1
+++ b/txr.1
@@ -12634,14 +12634,18 @@ at the specified
.metn index ,
which is a nonnegative integer.
-This form is also a place if the
-.meta sequence
-subform is a place. If a value is stored to this place, it replaces the
+This form is also a syntactic place.
+If a value is stored to this place, it replaces the
element.
The place may also be deleted, which has the effect of removing the element
from the sequence, shifting the elements at higher indices, if any, down one
element position, and shortening the sequence by one.
+If the place is deleted, and if
+.meta sequence
+is a list, then the
+.meta sequence
+form itself must be a place.
.meIP >> [ sequence << from-index..to-below-index ]
Retrieve the specified range of elements.
@@ -12655,14 +12659,17 @@ fields of a range object. The
.code rcons
function. See the section on Range Indexing below.
-This form is also a syntactic place, if the
-.meta sequence
-subform is a place. Storing a value in this place
+This form is also a syntactic place. Storing a value in this place
has the effect of replacing the subsequence with
a new subsequence. Deleting the place has the
effect of removing the specified subsequence
from
.metn sequence .
+If
+.meta sequence
+is a list, then the
+.meta sequence
+form must itself be a place.
The
.meta new-value
argument in a range assignment can be a string, vector or list,
@@ -22519,7 +22526,7 @@ This has an effect which can be described by the following code:
.cblk
(progn
- (set s s.(lambda-set a b c d v))
+ s s.(lambda-set a b c d v)
v)
.cble
@@ -22560,10 +22567,7 @@ arguments.
The return value of
.code lambda-set
-is significant. Unless there is a very good reason for the method to
-do otherwise, it should return the structure itself. This is because
-the place-mutating operators store this returned value back to the place
-which holds the structure itself.
+is ignored.
.TP* Example