An open API service indexing awesome lists of open source software.

https://github.com/abrudz/aplcart

A novel approach to finding your way in APL
https://github.com/abrudz/aplcart

apl dyalog dyalog-apl dyalog-library dyalogapl help idioms information learning lookup lookup-table opensearch primitives reference seach-engine syntax tips tips-and-tricks tips-tricks tricks

Last synced: 11 days ago
JSON representation

A novel approach to finding your way in APL

Awesome Lists containing this project

README

          

# APLcart – *A novel approach to finding your way in [APL](https://aplwiki.com)*

**There is plenty of documentation on what parts of APL do. APLcart seeks to answer *How do I…* questions.**

APLcart is a searchable collection of over three thousand short APL phrases intended for both beginners and professionals, with content provided by the community. Knowledge of basic APL syntax is a prerequisite.

APLcart can also be used for [exercising your APL skills](#quiz).

See [APL Wiki](https://aplwiki.com/wiki/APLcart) for background and history.

## Usage

*→ See also [the video introduction](https://dyalog.tv/Dyalog19/?v=r3owA7tfKE8).*

### Notes

- APLcart is for finding out *how to do* things, not for finding out, for example, what a symbol means or what a system function does. Please use the language documentation for such purposes.

- The site may take some seconds to load due to the information being processed by the browser. Once ready, it does not require internet access any more.

- All code in APLcart assumes the latest version of Dyalog APL Unicode edition and system defaults, for example `⎕IO←1`, `⎕ML←1`, `⎕DIV←0`.

- Entries are meant for copying and pasting to the extent possible. Therefore, many entries are more involved than what might appear as necessary. For example, *Cube root* is listed as `(*∘÷∘3)N` instead of the straight-forward `N*÷3`. This is so that `*∘÷∘3` can be copied and used in defining `CubeRoot←*∘÷∘3` which would not be possible with the simpler expression.

### Interface

See [here](https://www.w3schools.com/tags/att_global_accesskey.asp#table2) how to use access-keys on your system.

- Hit [here](https://aplcart.info) and start typing (access-key q — for _**q**uery_ — to re-focus)
- Insert leading and trailing slashes to [use regex](https://aplcart.info?q=%2F\b11\b%2F) (access-key r ― for _**r**egex_ ― to toggle)
- [Some entries](https://aplcart.info?q=(>)) have a which can be clicked to open example code in a sandbox
- [Some entries](https://aplcart.info?q=(?)) have a ? which can be clicked to open online documentation
- Hit [?](#usage) in the top left corner to access this documentation (access-key e — for _**e**xplain_)
- Hit [×](https://aplcart.info?q=) at the end of the input field to clear it (access-key x — for _e**x**punge_)
- Hit [#](https://aplcart.info?q=42) in the top right corner copy to the current query to the address bar and to your clipboard (access-key c — for _**c**opy_)
- Hit :octocat:︎ in the bottom right corner to access APLcart's source-code on GitHub (access-key a — for _**a**plcart_)
- Hit ♥︎ in the bottom right corner to donate to the author (access-key d — for _**d**onate_)
- Hit [](https://aplcart.info?w) in the bottom right corner to cycle theme (access-keys b for _**b**lack_, g for _**g**rey_, w for _**w**hite_)
- Hit the result list to enable movement keys for scrolling (access-key z)
- Hit [the input field](https://aplcart.info) at the top to start a new query (access-key e — for _**q**uery_)

## Quiz

You can use APLcart to exercise your APL skills by solving various types of tasks:

* Writing a function for a given task
* Explaining the purpose of a given function
* Filling in an obscured symbol

While APLcart does not feature checking of your answer (indeed, there can often be various answers to any given task), you can compare your answer to APLcart's.

### Interface

See [here](https://www.w3schools.com/tags/att_global_accesskey.asp#table2) how to use access-keys on your system.

- Hit [here](https://aplcart.info/quiz) and choose task type, and figure out the answer. You may want to use [an APL interpreter](https://aplwiki.com/wiki/Running_APL).
- Hit the logo [⊆⌈](https://aplcart.info ) in the top left corner to go to the main APLcart page (access-key a — for _**a**plcart_)
- Hit [?](#usage) in the top left corner to access this documentation (access-key e — for _**e**xplain_)
- Hit one of the Reveal buttons to reveal APLcart's answer (there may be other correct answers) to that task
- Hit one of the Next… buttons to proceed to the next task of that type
- Hit :octocat:︎ in the bottom right corner to access APLcart's source-code on GitHub (access-key a — for _**a**plcart_)
- Hit ♥︎ in the bottom right corner to donate to the author (access-key d — for _**d**onate_)
- Hit [](https://aplcart.info?w) in the bottom right corner to cycle theme (access-keys b for _**b**lack_, g for _**g**rey_, w for _**w**hite_)

The access keys for the Reveal and Next… buttons are the first letter of the second word on each button:

* Writing a function for a given task: c to _reveal **c**ode_ and t for _next **t**ask_
* Explaining the purpose of a given function: p to _reveal **p**urpose_ and f for _next **f**unction_
* Filling in an obscured symbol: o to _reveal **o**bscured_ and q for _next **q**uest_

## DuckDuckGo support

DuckDuckGo allows you to search APLcart directly using the `!aplcart` bang. For example, [searching for `!aplcart 42`](https://duckduckgo.com/?q=!aplcart+42) redirects to APLcart. This also means that if you set your browser's default search engine to DuckDuckGo, you can search APLcart directly from your browser address bar by prefixing your search with `!aplcart`.

## Application Integration

### Browsers

APLcart supports [OpenSearch](https://en.wikipedia.org/wiki/OpenSearch) and as such can be added as search engine on various browsers, including Safari, Edge, Firefox, and Chrome.

### Dyalog APL

APLcart is supplied as the user command `]APLCart` and the API function `⎕SE.Dyalog.Utils.APLcart`. For information about the user command, enter `]APLcart -?`. The API function takes a query as right argument, and optionally `1` as left argument to return all columns (even hidden ones) from the database, rather than just the shown first 2. A full database dump can be done with `table←1⎕SE.Dyalog.Utils.APLcart''`

### Dyalog Windows IDE

The Windows Dyalog IDE allows using an online search when F1 is pressed with the cursor on an unknown word:

- Options ▸ Configure ▸ Help/DMX ▸ Use online help for non-Dyalog topics ▸ URL: `https://aplcart.info?q=%s`

### Dyalog RIDE

RIDE allows adding a website to its menu bar:

- macOS: Dyalog ▸ Preferences ▸ Menu, then below the `&Help` line, insert a line containing &APLcart =https://aplcart.info
- other platforms: Edit ▸ Preferences ▸ Menu, then below the `&Help` line, insert a line containing &APLcart =https://aplcart.info

You can now press Alt-Alt,a to launch APLcart.

## URL API ("permalinks")

After clicking [#](https://aplcart.info?q=42) simply copy the current address from your browser's address bar to share the current query. Note that your current theme is intentionally not included, to avoid blinding the recipient. Note that the result for such a URL isn't permanent; it depends on APLcart's content at the time of usage.

### Manual construction

After [aplcart.info](https://aplcart.info/) you can add `?` and the following options, separated by `&` if you want both a theme and a query:

- [w](https://aplcart.info?w) select **w**hite theme
- [b](https://aplcart.info?b) select **b**lack theme
- [q=query](https://aplcart.info?q=query) prepopulate the _Tell me about_ **q**uery field

For example, for a white interface looking for "find", use [aplcart.info?w&q=find](https://aplcart.info?w&q=find)

## Scope

To answer *how do I* questions, APLcart currently searches over 3000 entries:

- General syntax, like `name f←Y`
- Primitives, like `!`
- Control structures, like `:If`
- Keywords, like `:Access`
- System commands, like `)CLEAR`
- System functions, like `⎕SIGNAL`
- System constants, like `⎕A`
- System operators, like `⎕R`
- System variables, like `⎕IO`
- GUI objects, like `HTMLRenderer`
- I-beams, like `819⌶`
- Errors numbers and messages, like `11::DOMAIN ERROR`
- User commands, like `]Box`
- A selection of simple dfns, dops, and derived functions like `(0=|)`
- All of dfns.dws, like `dfns.cal` (In APLcart, entries from here are prefixed `dfns.` . To use, insert `{(⍎⍵⎕NS⍬).⎕CY⍵}'dfns'` into your code, then call, for example, `dfns.cal`.)
- Performance idioms from Dyalog's idiom list, like `{(+/∨\' '≠⌽⍵)↑¨↓⍵}`
- Idioms from the APL2 idiom list, like `(+/|)` (fully updated to use modern APL)
- James A. Brown's favourite idioms (fully updated to use modern APL)
- All idioms from the FinnAPL idiom list, like `(⊢⍳⌈/)` (fully updated to use modern APL)
- The Yale/APL79 idiom list (fully updated to use modern APL)
- Selected entries from Dyalog's #onelinerwednesday series, like `(×/⊢÷+/-2×⊢)`
- Adapted entries from JSoftware's Phrase Book (translated to APL)
- and other entries [submitted](https://github.com/abrudz/aplcart/issues/new?assignees=abrudz&labels=addition&template=content-request.md&title=) by users like you!

## Features wish list
- more links to TIO examples

Got an idea for improving the site? [Suggest it!](https://github.com/abrudz/aplcart/issues/new?assignees=abrudz&labels=enhancement&template=feature_request.md&title=)

## [Contributing](CONTRIBUTING.md)

Wrote a cool train? Found a clever dfn? [Submit it!](https://github.com/abrudz/aplcart/issues/new?assignees=abrudz&labels=addition&template=content-request.md&title=)

Missing something? Faulty content? [Report it!](https://github.com/abrudz/aplcart/issues/new?assignees=abrudz&labels=bug&template=bug_report.md&title=)