My programs have defects because some functions destroy or mutate shared data. I avoid mutating shared data in Common Lisp; for example, I use CONS. However, I made a mistake by usingSORT, which wasn't aware that SORT isdestructive. Sometimes I still forget that SORT mutates its input data. The function sort-snode below sorts a part of a tree.
(defunsort-snode(snodeattr)(flet((key-fn(r)(cdr(assocattrr))))(sortsnode#'<:key#'key-fn)))
Since it is based on SORT, it changes the input data, which is snode. After I found the output tree didn't look what I expected, I took days to see where my mistake was.
My workaround is running COPY-LIST before SORT, as shown below.
(defunsort-snode(snodeattr)(flet((key-fn(r)(cdr(assocattrr))))(sort(copy-listsnode)#'<:key#'key-fn)))
In brief, if you are new to Common Lisp, please beware of destructive operations, which is not limited to SORT. It can be NCONC.
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse