-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix key
and describe argument order of test
#170
Comments
Turns out, the CLHS describes See:
Union also applies Therefore, we do not seem to have a bug, but we should still check all uses and |
Now, the questions become:
As Loopy is an Emacs Lisp library and not a Common Lisp library, I think that it |
The benefit of ;; => ((a . 1) (b . 2) (c . 4))
(loopy (list i '((a . 1) (b . 2) (a . 3) (c . 4)))
(adjoin i :key #'car)) should work similarly to ;; => ((a . 1) (b . 2) (c . 4))
(loopy (with (test-val))
(list i '((a . 1) (b . 2) (a . 3) (c . 4)))
(set test-val (car i))
(adjoin i :test (lambda (seq-val _)
(equal (car seq-val)
test-val)))) , the membership test being something like (cl-with-gensyms (test-val seq-val)
`(cl-loop with ,test-val = (funcall ,key ,element)
for ,seq-val in ,list
thereis (funcall ,test (funcall ,key ,seq-val) ,test-val))) . |
- Document the argument order of `test` as the first argument being the value from the sequence and the second argument being the tested item. This is the same order as used by `seq-contains-p` and the opposite of `cl-member`. - Add `loopy--member-p`, used for tests for `adjoin`, `union`, and `nunion`. This function can be optimized during byte compilation via `loopy--member-p-comp` to become `member`, `memq`, or `memql` when possible, as done with `cl-member`. - Simplify `loopy--plist-bind` into a wrapper around `cl-destructuring-bind`. - Add `loopy--instr-let2*`, with works like `macroexp-let2*` except that it will also append variable-instructions to the result of the body as needed. This will allow us to stop manually checking in each command whether we need to create a variable to hold a value. Now, we create the variable is `macroexp-const-p` believes that the value would not be constant. - Do not remove `key`. The use of a separate argument allows us to optimize the transform function by only calling it once on the tested item during the execution of each command. It is decided that re-creating this behavior with `set` and an ignored argument in the test function is too awkward. See also issues #176, #170, and this PR.
We have decided to keep |
- Document the argument order of `test` as the first argument being the value from the sequence and the second argument being the tested item. This is the same order as used by `seq-contains-p` and the opposite of `cl-member`. - Add `loopy--member-p`, used for tests for `adjoin`, `union`, and `nunion`. This function can be optimized during byte compilation via `loopy--member-p-comp` to become `member`, `memq`, or `memql` when possible, as done with `cl-member`. - Simplify `loopy--plist-bind` into a wrapper around `cl-destructuring-bind`. - Add `loopy--instr-let2*`, with works like `macroexp-let2*` except that it will also append variable-instructions to the result of the body as needed. This will allow us to stop manually checking in each command whether we need to create a variable to hold a value. Now, we create the variable is `macroexp-const-p` believes that the value would not be constant. - Do not remove `key`. The use of a separate argument allows us to optimize the transform function by only calling it once on the tested item during the execution of each command. It is decided that re-creating this behavior with `set` and an ignored argument in the test function is too awkward. - Remove mention of `init` keyword argument, which should have been deleted already. - Update the CHANGELOG and correct some links. - Update the README. See also issues #176, #170, and this PR.
- Document the argument order of `test` as the first argument being the value from the sequence and the second argument being the tested item. This is the same order as used by `seq-contains-p` and the opposite of `cl-member`. - Add `loopy--member-p`, used for tests for `adjoin`, `union`, and `nunion`. This function can be optimized during byte compilation via `loopy--member-p-comp` to become `member`, `memq`, or `memql` when possible, as done with `cl-member`. - Simplify `loopy--plist-bind` into a wrapper around `cl-destructuring-bind`. - Add `loopy--instr-let2*`, with works like `macroexp-let2*` except that it will also append variable-instructions to the result of the body as needed. This will allow us to stop manually checking in each command whether we need to create a variable to hold a value. Now, we create the variable is `macroexp-const-p` believes that the value would not be constant. - Do not remove `key`. The use of a separate argument allows us to optimize the transform function by only calling it once on the tested item during the execution of each command. It is decided that re-creating this behavior with `set` and an ignored argument in the test function is too awkward. - Remove mention of `init` keyword argument, which should have been deleted already. - Add examples for the common accumulation keyword arguments. - Update the CHANGELOG and correct some links. - Update the README. See also issues #176, #170, and this PR.
- Document the argument order of `test` as the first argument being the value from the sequence and the second argument being the tested item. This is the same order as used by `seq-contains-p` and the opposite of `cl-member`. - Add `loopy--member-p`, used for tests for `adjoin`, `union`, and `nunion`. This function can be optimized during byte compilation via `loopy--member-p-comp` to become `member`, `memq`, or `memql` when possible, as done with `cl-member`. - Simplify `loopy--plist-bind` into a wrapper around `cl-destructuring-bind`. - Add `loopy--instr-let2*`, with works like `macroexp-let2*` except that it will also append variable-instructions to the result of the body as needed. This will allow us to stop manually checking in each command whether we need to create a variable to hold a value. Now, we create the variable is `macroexp-const-p` believes that the value would not be constant. - Do not remove `key`. The use of a separate argument allows us to optimize the transform function by only calling it once on the tested item during the execution of each command. It is decided that re-creating this behavior with `set` and an ignored argument in the test function is too awkward. - Remove mention of `init` keyword argument, which should have been deleted already. - Add examples for the common accumulation keyword arguments. - Update the CHANGELOG and correct some links. - Update the README. See also issues #176, #170, and this PR.
- Document the argument order of `test` as the first argument being the value from the sequence and the second argument being the tested item. This is the same order as used by `seq-contains-p` and the opposite of `cl-member`. - Add `loopy--member-p`, used for tests for `adjoin`, `union`, and `nunion`. This function can be optimized during byte compilation via `loopy--member-p-comp` to become `member`, `memq`, or `memql` when possible, as done with `cl-member`. - Simplify `loopy--plist-bind` into a wrapper around `cl-destructuring-bind`. - Add `loopy--instr-let2*`, with works like `macroexp-let2*` except that it will also append variable-instructions to the result of the body as needed. This will allow us to stop manually checking in each command whether we need to create a variable to hold a value. Now, we create the variable is `macroexp-const-p` believes that the value would not be constant. - Do not remove `key`. The use of a separate argument allows us to optimize the transform function by only calling it once on the tested item during the execution of each command. It is decided that re-creating this behavior with `set` and an ignored argument in the test function is too awkward. - Remove mention of `init` keyword argument, which should have been deleted already. - Add examples for the common accumulation keyword arguments. - Update the CHANGELOG and correct some links. - Update the README. See also issues #176, #170, and this PR #177.
Done in #177. |
… various clean-ups. - Add `loopy--instr-let-var*`, `loopy--instr-let-const*`, `loopy--instr-let-var`, `loopy--instr-let-const`. These macros are similar to `macroexp-let2*` in that the `const` versions try to pass constant values directly without creating a variable in the Loopy expansion. - Update `array`, `array-ref`, `cons`, `list`, `list-ref`, `seq`, `seq-ref`, `seq-index`, `adjoin`, `union`, `nunion` - Don't update `numbers` until after we remove the non-keyword args. - Replace some uses of `seq-let` with `cl-destructuring-bind`. - Use `loopy--bind-main-body` in some places. - Add some TODOs. - Fix `list-ref` and `seq-ref` tests to not modify literal constant list. - Make `loopy--find-start-by-end-dir-vals` return the test function. - Add `:test` to `array`, `array-ref`, `sequence`, `sequence-index`, and `sequence-ref`. - When going up on lists, use `nthcdr` instead of `elt`. - Add `sequence`, `sequence-ref`, `sequence-index`, `array`, and `array-ref` tests for `:downfrom` and `:upfrom` as needed. See also topics #170, #176, #178, and this PR #180.
… various clean-ups. (#180) - Add `loopy--instr-let-var*`, `loopy--instr-let-const*`, `loopy--instr-let-var`, `loopy--instr-let-const`. These macros are similar to `macroexp-let2*` in that the `const` versions try to pass constant values directly without creating a variable in the Loopy expansion. - Update `array`, `array-ref`, `cons`, `list`, `list-ref`, `seq`, `seq-ref`, `seq-index`, `adjoin`, `union`, `nunion` - Don't update `numbers` until after we remove the non-keyword args. - Replace some uses of `seq-let` with `cl-destructuring-bind`. - Use `loopy--bind-main-body` in some places. - Add some TODOs. - Fix `list-ref` tests to not modify literal constant list. - Fix `seq-ref` tests to not modify literal constant list. - Make `loopy--find-start-by-end-dir-vals` return the test function. - Add `:test` to `array`, `array-ref`, `sequence`, `sequence-index`, and `sequence-ref`. - When going up on lists, use `nthcdr` instead of `elt`. - Add `sequence`, `sequence-ref`, `sequence-index`, `array`, and `array-ref` tests for `:downfrom` and `:upfrom` as needed. See also topics #170, #176, #177, and this PR #180.
key
should only be applied to the sequences, not the value to accumulate.Similarly, we should make sure that
test
also passes arguments as(VAR, VAL)
, which is the same order these arguments use in the command call ((adjoin VAR VAL)
).TODO: Check behavior of all functions that use key, such as
cl-sort
.The text was updated successfully, but these errors were encountered: