Skip to content
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

Improve keyword arguments test and key. #177

Merged
merged 1 commit into from
Oct 23, 2023
Merged

Conversation

okamsn
Copy link
Owner

@okamsn okamsn commented Oct 23, 2023

  • 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.

@okamsn okamsn force-pushed the deprecate-key-add-test branch 2 times, most recently from aa6d3ac to 39f2937 Compare October 23, 2023 01:19
- 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.
@okamsn okamsn merged commit 9dfd773 into master Oct 23, 2023
5 checks passed
@okamsn okamsn deleted the deprecate-key-add-test branch October 23, 2023 01:52
okamsn added a commit that referenced this pull request Nov 10, 2023
… 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant