├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ ├── content-request-pub.md │ ├── content-request.md │ ├── feature_request.md │ └── tio-link-request.md └── pull_request_template.md ├── .gitignore ├── APL386.ttf ├── APLcart.dyalog ├── CNAME ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── File.aplf ├── LICENSE ├── Logo.png ├── README.md ├── Reorder.aplf ├── ReorderFile.aplf ├── Synonym.aplf ├── Synonyms.aplf ├── Test.aplf ├── Trim.aplf ├── allucmds.aplf ├── apl333.ttf ├── aplcart.css ├── aplcart.js ├── chars.apla ├── class.apla ├── favicon.ico ├── favicon.svg ├── find-your-way.png ├── github.svg ├── index.html ├── index.mipage ├── opensearch.xml ├── pub ├── CONTRIBUTING.md ├── index.html ├── pub.css ├── pub.js └── pub.tsv ├── quiz ├── index.html ├── quiz.css └── quiz.js ├── table.tsv ├── task └── index.html ├── tt.tsv ├── type.apla ├── what └── index.html └── ⎕IO.apln /.gitattributes: -------------------------------------------------------------------------------- 1 | *.apl? linguist-language=APL 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help improve APLcart 4 | title: Problem with [SHORT DESCRIPTION] 5 | labels: bug 6 | assignees: abrudz 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: abrudz 3 | - url: https://chat.stackexchange.com/rooms/52405/the-apl-orchard 4 | - about: Please pin @Adám in The APL Orchard on Stack Exchange 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/content-request-pub.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Content request (pub) 3 | about: Suggest additional content for APLcart's list of publications (aplcart.info/pub) 4 | title: Please add [SHORT DESCRIPTION] 5 | labels: pub 6 | assignees: 7 | 8 | --- 9 | 10 | **Suggested additional code entry** (required) 11 | ``` 12 | paste description and/or URL here 13 | ``` 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/content-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Content request 3 | about: Suggest additional content for APLcart 4 | title: Please add [SHORT DESCRIPTION] 5 | labels: addition 6 | assignees: abrudz 7 | 8 | --- 9 | 10 | **Suggested additional code entry** (required) 11 | ``` 12 | paste code here 13 | ``` 14 | 15 | **Description** (required) 16 | ``` 17 | paste description here 18 | ``` 19 | 20 | **Class** (optional) 21 | ``` 22 | Tacit | Dfn | Dop | Primitive | Syntax | Non-syntax | System | I-beam | Constant | … 23 | ``` 24 | 25 | **Type** (optional) 26 | ``` 27 | Dyadic Function | Monadic Function | Function | Array | Assignment | Command | Ucmd | … 28 | ``` 29 | 30 | **Group** (optional) 31 | ``` 32 | Dyadic Operator | Monadic Operator | Structure | Keyword | UCMD GROUP | … 33 | ``` 34 | 35 | **Category** (required) 36 | ``` 37 | Array Properties | Boolean/Logical | Comparison | Data Conversion | Expression | Function Application | Index Generation | Mathematical | Selection | Sets | Structural | System | Text 38 | ``` 39 | 40 | **Keywords** (optional) 41 | ``` 42 | space-separated synonyms (e.g. first 1st) and alternative spellings (e.g. normalise normalize) 43 | ``` 44 | **TIO (optional)** 45 | ``` 46 | Try it online URL (e.g. https://tio.run/##SyzI0U2pTMzJT/8PBAA) 47 | ``` 48 | --- 49 | **Note:** By submitting this issue, you permit your contribution to be [used without restriction](../../blob/master/LICENSE). 50 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for APLcart 4 | title: 'Feature request: [SHORT DESCRIPTION]' 5 | labels: enhancement 6 | assignees: abrudz 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/tio-link-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: TIO link request 3 | about: Suggest a TIO link for an APLcart entry 4 | title: TIO link request 5 | labels: addition 6 | assignees: abrudz 7 | 8 | --- 9 | 10 | **Existing code entry** (required) 11 | ``` 12 | paste code here 13 | ``` 14 | 15 | **TIO (required)** 16 | 17 | Try it online URL (e.g. https://tio.run/##SyzI0U2pTMzJT////1Hf1EdtE9Q9UnNy8nUUwvOLclIU1f//BwA) 18 | 19 | --- 20 | **Note:** By submitting this issue, you permit your contribution to be [used without restriction](../../blob/master/LICENSE). 21 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | Before submitting this Pull Request, please go through the following checklist: 2 | 3 | --- 4 | 5 | Describe what this PR changes: 6 | 7 | This change … 8 | 9 | --- 10 | 11 | If you've fixed [a logged issue](https://github.com/abrudz/APLcart/issues), complete the following line by putting the issue number to the immediate right of the # symbol: 12 | 13 | Fixes # 14 | 15 | --- 16 | 17 | If you've made changes to `table.tsv`: 18 | 19 | - [ ] from your APL session, check that the table is well-formatted 20 | - `]link.import # path/aplcart` 21 | - `Test'path/aplcart/table.tsv'` should return `1` 22 | 23 | --- 24 | 25 | If you've made code or styling changes: 26 | 27 | - [ ] Fire up a local server and check that the site functions properly. 28 | For example, you can use [MiServer](https://github.com/Dyalog/MiServer/releases/latest): 29 | 30 | - `)load miserver.dws` 31 | - `Start'path/aplcart'` 32 | - Open [`localhost:8080`](http://localhost:8080/) in your browser 33 | 34 | --- 35 | 36 | Thank you for your contribution to APLcart, @abrudz will have a look as soon as convenient. 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | sessions.dcf -------------------------------------------------------------------------------- /APL386.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abrudz/aplcart/aa5060423247195752fa6f3d506b3526a4bc029c/APL386.ttf -------------------------------------------------------------------------------- /APLcart.dyalog: -------------------------------------------------------------------------------- 1 | :Namespace APLcart ⍝ v1.00 2 | ⍝ 2021 02 04 Adam: Initial code 3 | ⎕IO←1 ⋄ ⎕ML←1 4 | 5 | :Section Interface for user command system 6 | desc←'Search APLcart for how to do things' 7 | syntax←']APLcart [] [[-list[=n]] [-raw[=all]] | [-url]] [-browser] [-popup] [-theme=b|w]' 8 | 9 | ∇ r←List 10 | r←⎕NS ⍬ 11 | r.Name←'APLcart' 12 | r.Group←'Tools' 13 | r.Desc←desc 14 | r.Parse←'99S -browser -popup -theme=b w g -list[∊]0123456789 -open -raw[=]all -url' 15 | ∇ 16 | 17 | ∇ r←Run(cmd input);legend;list;help;n;url;msg;lines;hr;args;fmt;limit;theme 18 | list←0≢input.list 19 | args←×≢input.Arguments 20 | fmt←0≡input.raw 21 | 22 | :If fmt≤input.url∨input.browser∨input.popup∨list∨args 23 | theme←input.theme∊'bw' 24 | :If input.url 25 | '-list and -raw conflict with -url'⎕SIGNAL 11↑⍨list>fmt 26 | '-list conflicts with -url'⎕SIGNAL list↑11 27 | '-raw conflicts with -url'⎕SIGNAL fmt↓11 28 | :EndIf 29 | 30 | url←'https://aplcart.info' 31 | url,←'?'/⍨args∨theme 32 | url,←input.theme∩'bw' 33 | url,←'&'/⍨args∧theme 34 | url,←args/'q=',1↓∊' ',¨input.Arguments 35 | 36 | r←0⍴⊂'' 37 | :If input.browser 38 | {}⎕SE.UCMD'open ',url 39 | :EndIf 40 | :If input.popup 41 | hr←⍎'⎕SE.Dyalog.APLcartpopup'⎕WC'HtmlRenderer'('URL'url) 42 | hr.(⎕WS'Event'('DoPopup' 'Popup')) 43 | hr.Popup←'⎕SE.Dyalog.APLcartPopup'∘{ 44 | uu←'URL'(⊃⍬⍴2⌽⍵) 45 | ×⎕NC ⍺:⍺ ⎕WS uu 46 | ⍺ ⎕WC'HtmlRenderer'uu 47 | } 48 | :EndIf 49 | :If list∨args∧input.url⍱input.popup∨input.browser 50 | n←≢r←(input.raw≡'all')Q input.Arguments 51 | help←'' 52 | :Select input.list 53 | :CaseList 0(,'0') ⋄ limit←10 ⋄ help←(limit to show up to ; -list to show all' 54 | :Case 1 ⋄ limit←n ⋄ help←') (-list= to show no more than '/⍨10 space separated search terms (use /term/ for regex)' 91 | r,←⊂'' 92 | r,←⊂'-list list all results (not valid with -url; default: 10)' 93 | r,←⊂'-list= list no more than results' 94 | r,←⊂'' 95 | r,←⊂'-raw return raw two-column matrix (not valid with -url)' 96 | r,←⊂'-raw=all return raw eight-column matrix' 97 | r,←⊂'' 98 | r,←⊂'-browser open website in browser' 99 | r,←⊂'-popup open website in a popup popup' 100 | r,←⊂'-url return URL for online query (not valid with -list or -raw)' 101 | r,←⊂'-theme=b|w use black or white theme in browser/popup (default: grey)' 102 | r,←⊂'' 103 | r,←⊂'Examples:' 104 | r,←⊂' ]APLcart remove blanks -l=5 ⍝ list first five results for "remove blanks"' 105 | r,←⊂' ]APLcart /highest|lowest/ ⍝ list up to 10 results for "highest" or "lowest"' 106 | r,←⊂' ]APLcart -b ⍝ open APLcart in browser' 107 | r,←⊂' ]APLcart -p -t=b ⍝ open APLcart in popup window using black theme' 108 | r,←⊂' ]APLcart -u ⍝ internet address for APLcart' 109 | r,←⊂' ]table←APLcart -r=all ⍝ database dump' 110 | r,←⊂'' 111 | r,←⊂']Open https://github.com/abrudz/aplcart/blob/master/README.md ⍝ for APLcart documentation' 112 | r 113 | } 114 | 115 | :EndSection 116 | 117 | :Section API functions 118 | ∇ t←table;hc;data;resp 119 | hc←⎕SE.SALT.Load'HttpCommand -nolink' 120 | resp←hc.Get'https://raw.githubusercontent.com/abrudz/aplcart/master/table.tsv' 121 | {0≠⍵:⎕SIGNAL⊂('EN' 26)('EM' 'CONNECTION ERROR')('Message'('Response code ',⍕⍵))}resp.rc 122 | t←'.*\r?\n'⎕R''⍠'Mode' 'D'⍠'ML' 1⍠'ResultText' 'Nested'⊢'http\S+(\t|$)'⎕R''⊢resp.Data ⍝ remove header and URLs 123 | ⎕EX'table' ⋄ table←t ⍝ cache 124 | ∇ 125 | Q←{ 126 | ⍺←0 ⍝ all columns 127 | terms←' '(≠⊆⊢)⍣(' '∊⍵)⊢⍵ 128 | Filter←{ 129 | regex←'//'≡(⊃,⊃∘⌽)⍺ 130 | pat←regex↓(-regex)↓⍺ 131 | pat ⎕S'%'⍠'Regex'(regex 1)⍠'ML' 1⍠1⊢⍵ 132 | } 133 | 26::⎕SIGNAL⊂⎕DMX.(('EN'EN)('EM'EM)('Message'Message)) 134 | r←⊃Filter/terms,⊂table 135 | ↑(⎕UCS 9)(≠⊆⊢)¨'^[^\t]+\t[^\t]+'⎕S'&'⍣(~⍺)⊢r 136 | } 137 | :EndSection 138 | 139 | :EndNamespace 140 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | aplcart.info -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at abrudz@aplcart.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | If something is missing or not right, please [submit an issue](https://github.com/abrudz/aplcart/issues/new/choose). 4 | 5 | You can also submit a pull request, especially against [table.tsv](table.tsv) — the really simple TSV file database: 6 | 7 | - `<`, `>`, `&`, `'`, and `"` are automatically escaped 8 | - rows are separated by line breaks 9 | - line breaks may be CR+LF or just LF 10 | - empty rows are ignored 11 | - trailing line break is optional 12 | - columns are separated by tabs (` `) 13 | - do *not* put a trailing tab at the end of any line 14 | 15 | ## Example entries from table.tsv 16 | 17 | |SYNTAX|DESCRIPTION|CLASS|TYPE|GROUP|CATEGORY|KEYWORDS| 18 | |------|-----------|-----|----|-----|---------|--------| 19 | | +Y |Conjugate ('Identity' if Y not complex)|Primitive|Monadic|Function|Scalar|Function|Mathematical|plus complex| 20 | |(+⌿÷≢)N|Mean of N|Tacit|Monadic Function| |Mathematical|average arithmeticmean| 21 | |(f⍤r)Y|Rank: f on or between trailing rank-r subarrays|Primitive|Monadic Function|Dyadic Operator|Function Application| jotdiaeresis rank paw| 22 | |X(f⍤r)Y|Rank: f on or between trailing rank-r subarrays|Primitive|Monadic Function|Dyadic Operator|Function Application| jotdiaeresis rank paw| 23 | |X⌷⍨∘⊂J|Items of X at positions J|Tacit|Dyadic Function| |Selection|index| 24 | 25 | You don't have to fill all the columns, but do try to maximise the number of keyword synonyms in the KEYWORDS column 26 | 27 | ### Notation for arguments and operands 28 | 29 | Note how arguments and operands are given short menmonic names, as follows: 30 | 31 | |NAME
 |PLACEMENT
relative to main subject|TYPE
of array| 32 | | - | - | -| 33 | |X|left|any array| 34 | |Y|right|any array (can be on the left in combination with Z)| 35 | |Z|right|any array (only used when X and Y are not enough)| 36 | |M|left|numeric array| 37 | |N|right|numeric array| 38 | |I|left|integer array| 39 | |J|right|integer array| 40 | |A|left|Boolean (0/1)| 41 | |B|right|Boolean (0/1)| 42 | |C|left|character| 43 | |D|right|character| 44 | |f|left|function| 45 | |g|mid|function| 46 | |h|right|function| 47 | |ax|right|axis specification (`[`…`]`)| 48 | 49 | A name can optionally be followed by a specification of its (maximum) rank: 50 | 51 | |SUFFIX|RANK|DESCRIPTION| 52 | | - | - | -| 53 | |s|0|scalar/singleton| 54 | |v|1|vector/list| 55 | |m|2|matrix/table| 56 | -------------------------------------------------------------------------------- /File.aplf: -------------------------------------------------------------------------------- 1 | File←{ 2 | f←⍵,(0=≢⍵)/'table.tsv',⍨⊃⎕NPARTS 50 ⎕ATX⊃⎕SI 3 | ⍺←⊢ 4 | ⍺ ⎕CSV⍠'Separator'(⎕UCS 9)⍠'QuoteChar' ''⍠'IfExists' 'Replace'⊂f 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Adám Brudzewsky 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software, except content obtained from 14 | table.tsv and from the public facing website, which may be copied and used without 15 | this restriction. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abrudz/aplcart/aa5060423247195752fa6f3d506b3526a4bc029c/Logo.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # APLcart – *A novel approach to finding your way in [APL](https://aplwiki.com)* 2 | 3 | **There is plenty of documentation on what parts of APL do. APLcart seeks to answer *How do I…* questions.** 4 | 5 | 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. 6 | 7 | APLcart can also be used for [exercising your APL skills](#quiz). 8 | 9 | See [APL Wiki](https://aplwiki.com/wiki/APLcart) for background and history. 10 | 11 | ## Usage 12 | 13 | *→ See also [the video introduction](https://dyalog.tv/Dyalog19/?v=r3owA7tfKE8).* 14 | 15 | ### Notes 16 | 17 | - 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. 18 | 19 | - 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. 20 | 21 | - All code in APLcart assumes the latest version of Dyalog APL Unicode edition and system defaults, for example `⎕IO←1`, `⎕ML←1`, `⎕DIV←0`. 22 | 23 | - 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. 24 | 25 | ### Interface 26 | 27 | See [here](https://www.w3schools.com/tags/att_global_accesskey.asp#table2) how to use access-keys on your system. 28 | 29 | - Hit [here](https://aplcart.info) and start typing (access-key q — for _**q**uery_ — to re-focus) 30 | - Insert leading and trailing slashes to [use regex](https://aplcart.info?q=%2F\b11\b%2F) (access-key r ― for _**r**egex_ ― to toggle) 31 | - [Some entries](https://aplcart.info?q=(>)) have a which can be clicked to open example code in a sandbox 32 | - [Some entries](https://aplcart.info?q=(?)) have a ? which can be clicked to open online documentation 33 | - Hit [?](#usage) in the top left corner to access this documentation (access-key e — for _**e**xplain_) 34 | - Hit [×](https://aplcart.info?q=) at the end of the input field to clear it (access-key x — for _e**x**punge_) 35 | - 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_) 36 | - Hit :octocat:︎ in the bottom right corner to access APLcart's source-code on GitHub (access-key a — for _**a**plcart_) 37 | - Hit ♥︎ in the bottom right corner to donate to the author (access-key d — for _**d**onate_) 38 | - 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_) 39 | - Hit the result list to enable movement keys for scrolling (access-key z) 40 | - Hit [the input field](https://aplcart.info) at the top to start a new query (access-key e — for _**q**uery_) 41 | 42 | ## Quiz 43 | 44 | You can use APLcart to exercise your APL skills by solving various types of tasks: 45 | 46 | * Writing a function for a given task 47 | * Explaining the purpose of a given function 48 | * Filling in an obscured symbol 49 | 50 | 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. 51 | 52 | ### Interface 53 | 54 | See [here](https://www.w3schools.com/tags/att_global_accesskey.asp#table2) how to use access-keys on your system. 55 | 56 | - 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). 57 | - Hit the logo [⊆⌈](https://aplcart.info ) in the top left corner to go to the main APLcart page (access-key a — for _**a**plcart_) 58 | - Hit [?](#usage) in the top left corner to access this documentation (access-key e — for _**e**xplain_) 59 | - Hit one of the Reveal buttons to reveal APLcart's answer (there may be other correct answers) to that task 60 | - Hit one of the Next… buttons to proceed to the next task of that type 61 | - Hit :octocat:︎ in the bottom right corner to access APLcart's source-code on GitHub (access-key a — for _**a**plcart_) 62 | - Hit ♥︎ in the bottom right corner to donate to the author (access-key d — for _**d**onate_) 63 | - 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_) 64 | 65 | The access keys for the Reveal and Next… buttons are the first letter of the second word on each button: 66 | 67 | * Writing a function for a given task: c to _reveal **c**ode_ and t for _next **t**ask_ 68 | * Explaining the purpose of a given function: p to _reveal **p**urpose_ and f for _next **f**unction_ 69 | * Filling in an obscured symbol: o to _reveal **o**bscured_ and q for _next **q**uest_ 70 | 71 | ## DuckDuckGo support 72 | 73 | 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`. 74 | 75 | ## Application Integration 76 | 77 | ### Browsers 78 | 79 | 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. 80 | 81 | ### Dyalog APL 82 | 83 | 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''` 84 | 85 | ### Dyalog Windows IDE 86 | 87 | The Windows Dyalog IDE allows using an online search when F1 is pressed with the cursor on an unknown word: 88 | 89 | - Options ▸ Configure ▸ Help/DMX ▸ Use online help for non-Dyalog topics ▸ URL: `https://aplcart.info?q=%s` 90 | 91 | ### Dyalog RIDE 92 | 93 | RIDE allows adding a website to its menu bar: 94 | 95 | - macOS: Dyalog ▸ Preferences ▸ Menu, then below the `&Help` line, insert a line containing &APLcart =https://aplcart.info 96 | - other platforms: Edit ▸ Preferences ▸ Menu, then below the `&Help` line, insert a line containing &APLcart =https://aplcart.info 97 | 98 | You can now press Alt-Alt,a to launch APLcart. 99 | 100 | ## URL API ("permalinks") 101 | 102 | 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. 103 | 104 | ### Manual construction 105 | 106 | After [aplcart.info](https://aplcart.info/) you can add `?` and the following options, separated by `&` if you want both a theme and a query: 107 | 108 | - [w](https://aplcart.info?w) select **w**hite theme 109 | - [b](https://aplcart.info?b) select **b**lack theme 110 | - [q=query](https://aplcart.info?q=query) prepopulate the _Tell me about_ **q**uery field 111 | 112 | For example, for a white interface looking for "find", use [aplcart.info?w&q=find](https://aplcart.info?w&q=find) 113 | 114 | ## Scope 115 | 116 | To answer *how do I* questions, APLcart currently searches over 3000 entries: 117 | 118 | - General syntax, like `name f←Y` 119 | - Primitives, like `!` 120 | - Control structures, like `:If` 121 | - Keywords, like `:Access` 122 | - System commands, like `)CLEAR` 123 | - System functions, like `⎕SIGNAL` 124 | - System constants, like `⎕A` 125 | - System operators, like `⎕R` 126 | - System variables, like `⎕IO` 127 | - GUI objects, like `HTMLRenderer` 128 | - I-beams, like `819⌶` 129 | - Errors numbers and messages, like `11::DOMAIN ERROR` 130 | - User commands, like `]Box` 131 | - A selection of simple dfns, dops, and derived functions like `(0=|)` 132 | - 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`.) 133 | - Performance idioms from Dyalog's idiom list, like `{(+/∨\' '≠⌽⍵)↑¨↓⍵}` 134 | - Idioms from the APL2 idiom list, like `(+/|)` (fully updated to use modern APL) 135 | - James A. Brown's favourite idioms (fully updated to use modern APL) 136 | - All idioms from the FinnAPL idiom list, like `(⊢⍳⌈/)` (fully updated to use modern APL) 137 | - The Yale/APL79 idiom list (fully updated to use modern APL) 138 | - Selected entries from Dyalog's #onelinerwednesday series, like `(×/⊢÷+/-2×⊢)` 139 | - Adapted entries from JSoftware's Phrase Book (translated to APL) 140 | - and other entries [submitted](https://github.com/abrudz/aplcart/issues/new?assignees=abrudz&labels=addition&template=content-request.md&title=) by users like you! 141 | 142 | ## Features wish list 143 | - more links to TIO examples 144 | 145 | 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=) 146 | 147 | ## [Contributing](CONTRIBUTING.md) 148 | 149 | 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=) 150 | 151 | Missing something? Faulty content? [Report it!](https://github.com/abrudz/aplcart/issues/new?assignees=abrudz&labels=bug&template=bug_report.md&title=) 152 | -------------------------------------------------------------------------------- /Reorder.aplf: -------------------------------------------------------------------------------- 1 | t←Reorder t;syntaxdata;classdata;typedata;length;complexity;letters;syntax 2 | ⎕SHADOW,1↑t 3 | {⍎⍕(,1↑⍵)'←↑¨⊂[1]1↓⍵'}t 4 | syntaxdata←chars⍳SYNTAX 5 | classdata←class⍳CLASS 6 | typedata←type⍳TYPE 7 | syntax←(↓SYNTAX)~¨⊂' ',letters←'¯_∆⍙⍬',⎕D,⎕A,⎕C⎕A 8 | complexity←↑((⊂∘⍒⌷⊢)(chars~letters)∘⍳)¨syntax 9 | length←≢¨syntax 10 | t⌷⍨←⊂⍋0⍪classdata,length,complexity,syntaxdata,typedata 11 | -------------------------------------------------------------------------------- /ReorderFile.aplf: -------------------------------------------------------------------------------- 1 | ReorderFile←{⍵ File⍨Reorder File ⍵} 2 | -------------------------------------------------------------------------------- /Synonym.aplf: -------------------------------------------------------------------------------- 1 | table←terms Synonym table;mask;In;i;in;relevant;add;report 2 | ⍝ Add synonyms to table.tsv 3 | In←{∨/≢¨('(^|\(|\s|,)\Q',⍺,'\E($|\)|\s|,)')⎕S ⍬⍠'ML' 1⍠1¨⍵} 4 | 5 | :If 2=≢table 6 | (table report)←table 7 | :Else 8 | report←¯1 9 | :EndIf 10 | terms(∪⊣,~¨)←'-' 11 | in←terms In¨⊂table 12 | relevant←⍸⊃∨/in 13 | :For i :In relevant 14 | add←,/' ',¨terms/⍨~i⊃¨in 15 | :If 0in1to6 10 | url,⍨kws,⍨¯1↓first7 11 | } 12 | header⍪ProcessRow⍤1⊢body 13 | } 14 | -------------------------------------------------------------------------------- /allucmds.aplf: -------------------------------------------------------------------------------- 1 |  allucmds←{ 2 | 3 | r←⎕FMT ⎕SE.UCMD'??' 4 | s←2↓¯3↓r 5 | t←1↓¨s⊂[1]⍨∧/' '=s 6 | groups←{'^ (\w+).+'⎕R'\1'⊃↓⍵}¨t 7 | gdescrs←{':'~⍨'^ \w+ +(.+)'⎕R'\1'⊃↓⍵}¨t 8 | u←1↓¨t 9 | v←(groups{⊂⍺ ⍵}¨gdescrs){ 10 | syntax←∊']',⍺[1],'.','^ +(\w+)'⎕S'\1'⊢⍵ 11 | description←∊'^ +\w+ +(.+)'⎕S'\1'⊢⍵ 12 | class←'Non-syntax' 13 | type←'Ucmd' 14 | group←1⊃⍺ 15 | category←'User command' 16 | keywords←2⊃⍺ 17 | ' +$'⎕R''⊢syntax description class type group category keywords 18 | }¨¨↓¨u 19 | ↑⊃⍪/v 20 | } 21 | -------------------------------------------------------------------------------- /apl333.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abrudz/aplcart/aa5060423247195752fa6f3d506b3526a4bc029c/apl333.ttf -------------------------------------------------------------------------------- /aplcart.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:P;src:local('APL333'),url(apl333.ttf)} *{font-family:P;text-decoration:none} 2 | @font-face{font-family:M;src:local('APL386 Unicode'),url(APL386.ttf)} #q,td:first-child{font-family:M} 3 | i{display:none} 4 | html,body{height:100%} 5 | body{display:flex;flex-flow:column;margin:0;font-size:16px; 6 | overflow:hidden;position:relative;color:#222; content:"w";background:#ddd } .w{background:#ddd;filter:invert(0)} 7 | @media(prefers-color-scheme:dark){body[class=""]{content:"g";background:#444;filter:invert(.85)}} .g{background:#444;filter:invert(.85)} 8 | @media(prefers-contrast:more) {body[class=""]{content:"b";background:#222;filter:invert(1) }} .b{background:#222;filter:invert(1)} 9 | .h{display:grid;grid-template-columns:7em auto 2em 2em 2em;padding:0.5em} 10 | label{justify-self:right} 11 | #q{grid-column:2/3;place-self:center stretch;border:none;font-size:medium} 12 | p{grid-column:1/-1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:1ex 0 0 0} 13 | a:hover,a:focus,tr:hover td{color:#000} 14 | .o,td a{height:1em;border-radius:1em;border:.25ex solid currentcolor;width:1em;line-height:1em} 15 | a{place-self:center;display:inline-block;text-align:center;color:unset; 16 | -webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} 17 | #y{background:#fff;height:100%;flex: 1 1 auto;position:relative;margin:0 0.5em} 18 | #k{overflow-y:scroll;overflow-x:hidden;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;box-sizing:border-box} 19 | #t{width:100%;table-layout:fixed;color:#333;white-space:pre-wrap;word-wrap:break-word} 20 | td{padding:.5em} 21 | td a{margin-right:0.75em;color:#bbb} 22 | td:first-child a:before{display:inline-block;position:relative;margin-left:0.33ex;line-height:0;content:''; 23 | border:0.6ex solid transparent;border-left:1ex solid currentcolor;border-right:none} 24 | #u{text-align:center} 25 | #w{background:linear-gradient(to right,currentcolor 50%,transparent 50%)} 26 | @media(max-width:1320px){s{display:none}} 27 | @media(max-width:420px){.o{display:none} .h{grid-template-columns:7em auto} #u{text-align:right}} 28 | -------------------------------------------------------------------------------- /aplcart.js: -------------------------------------------------------------------------------- 1 | C=_=>{ 2 | history.replaceState({},document.title,location.pathname+(q.value?"?q="+encodeURIComponent(q.value):"")) 3 | u=location.toString().replace("#","").replace(/^https:\/\/aplcart\.info\//,"https://aplcart.info") 4 | F(navigator.clipboard.writeText(u).catch(_=>prompt("Query URL:",u))) 5 | } 6 | F=_=>q.focus() 7 | I=_=>{ 8 | var s=new URLSearchParams(location.search) 9 | b.className=0==s.get("b")?"b":0==s.get("g")?"g":0==s.get("w")?"w":window.getComputedStyle(b).content[1] 10 | um.href="/quiz?"+b.className 11 | if(s.get("self")!=null){document.querySelectorAll("[target]").forEach(e=>e.target="_self");um.href+="&self"} 12 | fetch("table.tsv").then(d=>d.text()).then(d=>{ 13 | ps=d.replace(/[<>&'"]/g,x=>({'<':'<','>':'>','&':'&',"'":''','"':'"'}[x])).trim().split(/\r?\n/g).splice(1).map(r=>r.split("\t")) 14 | c=ps.map(r=>r[0]) 15 | e=ps.map(r=>r[1]) 16 | u=ps.map(r=>r[7]) 17 | h=ps.map(r=>r[8]) 18 | p=d.split(/\r?\n/g).splice(1).map(x=>x.toLowerCase().replace(/https:\S+\t/,"(>)").replace(/https:\S+$/,"(?)")) 19 | r="" 20 | for(var i=0;i'+(u[i]?'':'')+c[i]+''+(h[i]?'?':'')+e[i]+''} 21 | t.innerHTML=r 22 | F(Q(q.value=s.get("q")))})} 23 | Q=_=>{ 24 | var f,l=q.value.split(' '),r=t.rows,n=0 25 | for(var i=0;i-1);if(!f)break} 27 | n+=!(r[i].hidden=!f)} 28 | z.textContent=n+" of "+r.length} 29 | R=_=>{qs=q.selectionStart;qe=q.selectionEnd 30 | if((v=q.value)[0]+v[vl=v.length-1]=="//"){q.value=v.slice(1,vl);q.selectionStart=qs-1;q.selectionEnd=qe-1 31 | }else{q.value="/"+v+"/";q.selectionStart=qs+1;q.selectionEnd=qe+1};Q()} 32 | W=x=>{F(b.className=x?x:"wbg"[1+"wb".indexOf(b.className)]);um.href="/quiz?"+b.className} 33 | X=_=>F(Q(q.value="")) 34 | -------------------------------------------------------------------------------- /chars.apla: -------------------------------------------------------------------------------- 1 | (' ⊢⊣+-×∨∧⌈⌊⌽⊖÷|!?<≤=≥>≠≡≢↓↑⍴*⍟○~⍨∘¨⍥/⌿⍤@⍱⍲,⍪⊃⊂⊆⌷⍳∊⍸∪∩⍣⍋⍒\⍀[;]⍉⌸⍷⌺.⊥⊤⌹⍎⍕&⌶⍠⎕⍞←⋄:∇→#⍬0123456789_∆⍙XYZMNIJABCDEFGHIJKLMNOPQRSTUVWXYZfghasvmabcdefghijklmnopqrstuvwxyzÀ',(⎕UCS 13 13)) 2 | -------------------------------------------------------------------------------- /class.apla: -------------------------------------------------------------------------------- 1 | [ 2 | ('Primitive ') 3 | ('System ') 4 | ('Tacit ') 5 | ('Dfn ') 6 | ('Dop ') 7 | ] 8 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abrudz/aplcart/aa5060423247195752fa6f3d506b3526a4bc029c/favicon.ico -------------------------------------------------------------------------------- /favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /find-your-way.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abrudz/aplcart/aa5060423247195752fa6f3d506b3526a4bc029c/find-your-way.png -------------------------------------------------------------------------------- /github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | APLcart - Find your way in APL 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | × 18 | ? 19 | # 20 |

X, Y, Z: any type array  M, N: numeric array  I, J: integer array  A, B: Boolean array  C, D: character array  f, g, h: function ax: bracket axis s: scalar  v: vector  m: matrix

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | Quiz 29 | 30 | 31 | 32 |   33 | 34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /index.mipage: -------------------------------------------------------------------------------- 1 | :Class index : MiPage 2 | ∇ Compose 3 | :Access public 4 | :Trap 0 5 | table←⎕CSV⍠'Separator'(⎕UCS 9)⍠'QuoteChar' ''⍠'IfExists' 'Replace'⊂#.Boot.AppRoot,'table.tsv' 6 | {⎕SIGNAL ⍵}(9≠cols)/⊂('EN' 5)('Message'('Table has ',(⍕cols←⊃⌽⍴table),' instead of 9 columns')) 7 | Add _.Redirect'/index.html' 8 | :Else 9 | Add _.h1(⎕←⎕DMX.Message) 10 | :EndTrap 11 | ∇ 12 | :EndClass 13 | -------------------------------------------------------------------------------- /opensearch.xml: -------------------------------------------------------------------------------- 1 | 3 | APLcart 4 | Search APLcart: A novel approach to finding your way in APL 5 | UTF-8 6 | https://aplcart.info/favicon.ico 7 | 8 | https://aplcart.info/ 9 | 10 | -------------------------------------------------------------------------------- /pub/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # CONTRIBUTING 2 | 3 | 1. Append new publications to the end of `pub.tsv` 4 | **(TYPE)**\**Authors/Presenters**\**Title/Link**\**Description**\**YEAR**\**Space-separated tags** 5 | 1. Use Dyalog to sort entries 6 | By year, then alphabetical titles 7 | 8 | ```APL 9 | ]get pub.tsv 10 | head←1↑pub 11 | tail←1↓pub 12 | tail←tail[⍒tail[;5];] ⍝ By year 13 | tail←,[1 2]tail[;5]{⍵[⍒⍵[;3];]}⌸tail ⍝ Alphabetical titles 14 | tail←tail⌿⍨~tail≡⍤1⊢6⍴⊂' ' ⍝ Remove empties 15 | r←head⍪tail 16 | r⎕CSV⍠('Separator'(⎕UCS 9))('IfExists' 'Replace')⊢'pub.tsv' 17 | ``` 18 | -------------------------------------------------------------------------------- /pub/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | APLcart - APL Publications 6 | 7 | 8 | 9 | ⊆⌈ 10 | ? 11 | 12 | × 13 | # 14 |

15 | (I): 16 | interactive notebook/tutorial(T): 17 | text article/blog/documentation/paper/tutorial(V): 18 | video webcast/webinar/presentation

19 |
20 |
21 | 22 | Main     23 | Quiz 24 | 25 | 26 | 27 | 28 |   29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /pub/pub.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:P;src:local('APL333'),url(/apl333.ttf)} 2 | @font-face{font-family:M;src:local('APL385 Unicode'),url(/apl385.ttf)} 3 | i{display:none} 4 | *{font-family:P} 5 | #q{font-family:M} 6 | body{filter:invert(.85);background:#444;color:#222;overflow:hidden;position:relative;font-size:16px} 7 | .b{filter:invert(1);background:#222} .w{filter:invert(0);background:#ddd} 8 | div{background:#fff;height:calc(100vh - 13ex);overflow-y:scroll;overflow-x:hidden} 9 | #t{width:100%;color:#333;white-space:pre-wrap;word-wrap: break-word} 10 | td{padding:.5em} 11 | #z{margin-top:1ex;display:inline-block;width:calc(100% - 1.75em)} 12 | #q{width:calc(100vw - 15.2em);border:none;border-radius:0 1em 1em 0;font-size:medium;padding-right:1.1em} 13 | body>a,span>a{text-decoration:none;display:inline-block;text-align:center;z-index:1;line-height:1em;color:unset; 14 | -webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} 15 | body>a,#o>a{width:1em} 16 | #m{letter-spacing:-.25ex;font-size:133%} 17 | #e,#x,#c,#s,#w,#a{border-radius:1em;border:.25ex solid currentcolor} 18 | s{text-decoration:none} 19 | td a{color:inherit;text-decoration-color:#ddd} 20 | a{cursor:pointer} 21 | a:hover,a:focus{color:#000;text-decoration-color:unset} 22 | #a{position:absolute;right:4.5em;bottom:0em;height:1em} 23 | #s{position:absolute;right:2.4em;bottom:0em} 24 | #w{right:0;background:linear-gradient(to right,currentcolor 50%,transparent 50%);position:relative} 25 | #e{margin:0 .5em} 26 | #x{margin:0 0.75em 0 -1.5em} 27 | #c{right:0.1em;position:relative} 28 | #u{position:absolute;left:0;width:100%;text-align:center;bottom:0} 29 | p{top:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:1ex 0} 30 | ::-ms-clear{display:none} 31 | @media(max-width:930px){s{display:none}} 32 | @media(max-width:320px){ 33 | #e,#x,#c{display:none} 34 | #q{border-radius:0;width:calc(100vw - 9.5em);padding-right:unset} 35 | } 36 | -------------------------------------------------------------------------------- /pub/pub.js: -------------------------------------------------------------------------------- 1 | C=_=>F(history.replaceState({},document.title,location.pathname+(q.value?"?q="+encodeURIComponent(q.value):""))) 2 | F=_=>q.focus() 3 | I=_=>{ 4 | var s=new URLSearchParams(location.search) 5 | b.className=0==s.get("w")?"w":0==s.get("b")?"b":"" 6 | um1.href="/?"+b.className 7 | um2.href="/quiz?"+b.className 8 | fetch("pub.tsv").then(d=>d.text()).then(d=>{ 9 | ps=d.replace(/[<>&'"]/g,x=>({'<':'<','>':'>','&':'&',"'":''','"':'"'}[x])) 10 | .trim() 11 | .replace(/.+\r?\n/,'') 12 | .replace(/\[(.+?)\]\(([\S\b]+)\)/g,'$1') 13 | .replace(/\t[^\t]*\r?\n/g,"\r\n") 14 | .replace(/\t/g,"") 15 | p=d.toLowerCase().split(/\r?\n/g).splice(1) 16 | t.innerHTML=ps 17 | F(Q(q.value=s.get("q")))})} 18 | Q=_=>{ 19 | var f,l=q.value.toLowerCase().split(' '),r=t.rows,n=0 20 | for(var i=0;i-1;if(!f)break} 22 | n+=!(r[i].hidden=!f)} 23 | z.textContent="Showing "+n+" of "+r.length} 24 | W=x=>{F(b.className=x?x:"wbg"[1+"wb".indexOf(b.className[0])]);um.href="/quiz?"+b.className} 25 | X=_=>F(Q(q.value="")) 26 | P=x=>Q(q.value=((new RegExp("\\("+x+"\\)")).test(q.value)?"":"("+x.toUpperCase()+") ")+q.value.replace(/ *\([itv]\) */ig," ").trim()) 27 | -------------------------------------------------------------------------------- /pub/pub.tsv: -------------------------------------------------------------------------------- 1 | TYPE AUTHOR(S) TITLE ABSTRACT YEAR KEYWORDS 2 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Train Spotting in Dyalog APL](https://dyalog.tv/Webinar/?v=Enlh5qwwDuY) 2020 dyalog webinar tacit point free functional programming 3 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Thinking in APL: Array-Oriented Solutions - Part 2](https://dyalog.tv/Webinar/?v=Qzwn6z3y0DA) Several approaches to converting boolean location vectors to expansion vectors are explored 2020 data transformation black box loop first at operator laminate compress @ / \ ,[] 4 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Thinking in APL: Array-Oriented Solutions - Part 1](https://dyalog.tv/Webinar/?v=myoK22rq1jk) An introduction to APL thinking and array programming 2020 metzger programming heuristics value first then shape problems solving techniques algorithm translating translation 5 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [The Rank Operator](https://dyalog.tv/Webinar/?v=IBct81IopRk) An introduction to the rank operator and leading-axis theory 2020 ⍤ dyadic monadic cells ,⍥⊂ 6 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [The Rank Operator and Dyadic Transpose](https://dyalog.tv/Webinar/?v=zBqdeDJPPRc) On the relationship between bracket-axis specification and rank with dyadic transpose 2020 [Dyalog Webinar](https://aplwiki.com/wiki/Dyalog_webinar) split enclose with axis axes bracket axis ravel merge catenate ↑ ↓ ⍉ ⊂[] ,[] ,⍤ ⊂⍤ ↑[] ↓[] 7 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Selecting from Arrays](https://dyalog.tv/Webinar/?v=AgYDvSF2FfU) How many ways can you select from arrays? 2020 indexing selection ⌷⍤0 99 [] indexer subarrays cells k-cells rank axis 8 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Progressive Set Functions](https://dyalog.tv/Webinar/?v=6SAsgEvUmkU) Index-of (X⍳Y) and membership (∊) for multisets 2020 pdi dyadic iota indexof membership multiset multiplicity queues queueing system index-of 9 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Language Features of Dyalog version 18.0 in Depth - Part 5](https://dyalog.tv/Webinar/?v=HU8jebyXKqc) Updates to the Partitioned Enclose function ⊂ and Mix-with-Axis ↑[] 2020 ⊂[] dyadic transpose ⍉ reorder axes 10 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Language Features of Dyalog version 18.0 in Depth - Part 4](https://dyalog.tv/Webinar/?v=Me5hhP07ySw) Demonstrating where (⍸) with non-negative integers 2020 ⍸⍣¯1 (∪∘.≡⊢) signature classification nub matrix 11 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Language Features of Dyalog version 18.0 in Depth - Part 3](https://dyalog.tv/Webinar/?v=OA-a04-mJ04) Improvements to ⎕JSON, ⎕R and ⎕S 2020 ⎕JSON⍠ high rank dialect regex neol JSON5 \f& variant text processing character data case folding mapping 12 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Language Features of Dyalog version 18.0 in Depth - Part 2](https://dyalog.tv/Webinar/?v=9sSFdQcu2dU) Demonstrating the constant operator ⍨, ⎕DT system function and 1200⌶ for datetime formatting 2020 constant datetime format ⍨ A⍨ ⎕DT 1200⌶ i-beam ibeam 13 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Language Features of Dyalog version 18.0 in Depth - Part 1](https://dyalog.tv/Webinar/?v=Hln3zryunsw) Introducing ⎕C, over ⍥, atop ⍤ and unique mask ≠ 2020 case convert folding mapping text character processing functions composition operators nub sieve normalisation normalization 14 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Introducing Dyalog version 18.0](https://dyalog.tv/Webinar/?v=BSQr203sbWc) An overview of improvements to Dyalog in version 18.0 2020 15 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Fast APL](https://dyalog.tv/Webinar/?v=HWSMwzdZBSs) 2020 tags 16 | (I) Kruger [Advent of Code 2017, Dyalog APL edition](https://nbviewer.jupyter.org/github/xpqz/AoCDyalog/blob/master/Advent%20of%20Code%202017%20Dyalog%20APL.ipynb) A walk-through of solutions to the 2017 AoC contest 2020 17 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Advanced Use of The Rank Operator](https://dyalog.tv/Webinar/?v=5wW76XX0kqk) Negative rank and infinite rank are relative to the rank of the argument array. Multiple applications of rank generalise the outer product. 2020 Dyalog webinar ⍤¯k ⍤j⍤k ⍤99 ⍤inf ⍤(⌊/⍬) ⍤⍬ inner product _table operator laminate+ dfns tc trace ,[] 18 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [APL and Microsoft Excel](https://dyalog.tv/Webinar/?v=hs90SdUc9dE) Reading and writing Microsoft Excel files and interacting with the Microsoft Excel application process 2020 .xlsx spreadsheet ole com client server program control xl2apl apl2xl from to 19 | (V) [Hughes](http://www.mjhsoftwareservices.co.uk/) [qWC (Cross-platform ⎕WC) – an Introduction and Update](https://dyalog.tv/Webinar/?v=l3e1z2se9dI) 2019 ⎕WC GUI graphics graphical user interface web html css js javascript 20 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [TryAPL – The Next Generation](https://dyalog.tv/Webinar/?v=w4t13pge4mw) 2019 21 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Source Code Management with Dyalog v17.1](https://dyalog.tv/Webinar/?v=de-eVOkxzrg) 2019 22 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Molecular Dynamics in Dyalog APL](https://dyalog.tv/Webinar/?v=GDp89NbSW5Q) 2019 23 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Introducing the 2019 APL Problem Solving Competition](https://dyalog.tv/Webinar/?v=SFwPwRnhWjU) 2019 24 | (V) [Park](https://aplwiki.com/wiki/Richard_Park) [Concluding the 2019 APL Problem Solving Competition](https://dyalog.tv/Webinar/?v=NDJTco8vQbs) 2019 25 | (V) [Foad](https://aplwiki.com/wiki/Jay_Foad) [Adventures in Advent of Code](https://dyalog.tv/Webinar/?v=Q_vgSN6rza0) 2019 26 | (V) [Foad](https://aplwiki.com/wiki/Jay_Foad), [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Total Array Ordering](https://dyalog.tv/Webinar/?v=8cbPLRAcC7M) 2018 27 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky), [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Namespace-Directory Synchronisation](https://dyalog.tv/Webinar/?v=8zcUYjdEPG0) 2018 28 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Microservices in Dyalog APL](https://dyalog.tv/Webinar/?v=KKJMeGAWGaE) 2018 29 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Jupyter Notebook support for Dyalog APL](https://dyalog.tv/Webinar/?v=P7rGW5ZMq9w) 2018 30 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Inverted Tables](https://dyalog.tv/Dyalog18/?v=IOWDkqKbMwk) 2018 [Dyalog '18](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2718) 31 | (V) Becker [Cross-Platform Charting](https://dyalog.tv/Webinar/?v=wapJgEXSzvc) 2018 32 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [Creating and managing your own User Commands](https://dyalog.tv/Webinar/?v=LWJzRGrOC3k) 2018 33 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Acquiring Data from the Internet using HttpCommand, ⎕JSON and ⎕XML](https://dyalog.tv/Webinar/?v=yDpRGaheEH4) 2018 34 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [APL Processes and Isolates in the Cloud](https://dyalog.tv/Webinar/?v=bpP99KEfUxI) 2018 35 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Tolerant Unique](https://dyalog.tv/Dyalog17/?v=fPWky9IOG40) 2017 [Dyalog '17](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2717) 36 | (V) Oosters, Murray, Buettner [Summer Intern Show](https://dyalog.tv/Webinar/?v=yk36ONBMK20) 2017 37 | (V) Becker, [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Source Code Management with GitHub and APL](https://dyalog.tv/Webinar/?v=S3JBHDayVjU) 2017 38 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg), Smith [Something Old, Something New, Something Experimental](https://dyalog.tv/Webinar/?v=cPwlaEaTm4Y) Using native files, ⎕CSV and the HTMLRenderer 2017 ⎕NCREATE ⎕NERASE ⎕NAPPEND ⎕NREPLACE ⎕NREAD ⎕NTIE ⎕NUNTIE ⎕NDELETE ⎕MKDIR ⎕NEXISTS ⎕NINFO ⎕NPARTS ⎕NGET ⎕NPUT ⎕CSV ⎕WC MiServer web graphics graphical user interface 39 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Index-Of on Multiple Floats](https://dyalog.tv/Dyalog17/?v=69ncBGN3YiI) 2017 [Dyalog '17](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2717) 40 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg) [Celebrating the release of Dyalog 16.0 and RIDE 4.0](https://dyalog.tv/Webinar/?v=2zBE8dByWo4) New features in Dyalog version 16.0 2017 ⍸ iota underbar interval index ⌸ key ⊆ left-shoe partition apl2 ⎕CSV ⎕JSON Conga HTTP OOP connection filtering CSS JS Javascript CES chromium embedded framework 41 | (V) [Brudzewsky](https://aplwiki.com/wiki/Ad%C3%A1m_Brudzewsky) [APL CodeGolf Autumn Tournament](https://dyalog.tv/Webinar/?v=3FjYly2G_QI) 2017 42 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg), [Scholes](https://aplwiki.com/wiki/John_Scholes) [A closer look at the new primitives in version 16.0](https://dyalog.tv/Webinar/?v=OeOpdGF1bnc) 2017 43 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui), [Foad](https://aplwiki.com/wiki/Jay_Foad) [Performance: The Neverending Story](https://dyalog.tv/Dyalog16/?v=2AeONlTj1aY) 2016 [Dyalog '16](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2716) 44 | (V) [Scholes](https://aplwiki.com/wiki/John_Scholes), [Hui](https://aplwiki.com/wiki/Roger_Hui) [New Primitive Functions and Operators](https://dyalog.tv/Dyalog16/?v=vms4_Fpqmv8) 2016 [Dyalog '16](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2716) 45 | (V) [Scholes](https://aplwiki.com/wiki/John_Scholes), [Hui](https://aplwiki.com/wiki/Roger_Hui) [Future Operator Proposals: Cut, Under, Merge](https://dyalog.tv/Dyalog15/?v=9KOto3xXS3c) 2015 [Dyalog '15](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2715) 46 | (V) [Foad](https://aplwiki.com/wiki/Jay_Foad), [Hui](https://aplwiki.com/wiki/Roger_Hui) [Core Performance](https://dyalog.tv/Dyalog15/?v=AJzY4DgUVws) 2015 [Dyalog '15](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2715) 47 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui), Kekäläinen [The Tuning Pipeline](https://dyalog.tv/Dyalog14/?v=7GDya-E3pxI) 2014 [Dyalog '14](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2714) 48 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Rank and Friends](https://dyalog.tv/Dyalog13/?v=J05FEbqDsZM) 2013 [Dyalog '13](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2713) 49 | (V) [Kromberg](https://aplwiki.com/wiki/Morten_Kromberg), [Hui](https://aplwiki.com/wiki/Roger_Hui) [Primitive Performance](https://dyalog.tv/Dyalog13/?v=84t87EO5ZEE) 2013 [Dyalog '13](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2713) 50 | (V) [Scholes](https://aplwiki.com/wiki/John_Scholes), [Hui](https://aplwiki.com/wiki/Roger_Hui) [Potential Version 14.0 Language Features](https://dyalog.tv/Dyalog12/?v=KrrHYjPXc84) 2012 [Dyalog '12](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2712) 51 | (V) [Scholes](https://aplwiki.com/wiki/John_Scholes), [Hui](https://aplwiki.com/wiki/Roger_Hui) [What is Functional Programming?](https://dyalog.tv/Dyalog11/?v=bQlH49krwbk) 2011 [Dyalog '11](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2711) 52 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Rational Numbers](https://dyalog.tv/Dyalog11/?v=CkaQQYcxpfM) 2011 [Dyalog '11](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2711) 53 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [The Rank Operator](https://dyalog.tv/Dyalog09/?v=ui76NE5cMWo) 2009 [Dyalog '09](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2709) 54 | (V) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Performance Improvements in Dyalog: A Case Study](https://dyalog.tv/Dyalog08/?v=k8Wt5sDDzgI) 2008 [Dyalog '08](https://aplwiki.com/wiki/Dyalog_user_meeting#Dyalog_.2708) 55 | (T) [Hui](https://aplwiki.com/wiki/Roger_Hui), [Iverson](https://aplwiki.com/wiki/Ken_Iverson), [McDonnell](https://aplwiki.com/wiki/Eugene_McDonnell) [Tacit Definition](https://www.jsoftware.com/papers/TacitDefn.htm) 1991 [APL91](https://aplwiki.com/wiki/APL_conference#1991), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 21, Number 4 56 | (T) [Hui](https://aplwiki.com/wiki/Roger_Hui), [Iverson](https://aplwiki.com/wiki/Ken_Iverson), [McDonnell](https://aplwiki.com/wiki/Eugene_McDonnell), [Whitney](https://aplwiki.com/wiki/Arthur_Whitney) [APL\?](https://www.jsoftware.com/papers/J1990.htm) 1990 [APL90](https://aplwiki.com/wiki/APL_conference#1990), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 20, Number 4 57 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson), [McDonnell](https://aplwiki.com/wiki/Eugene_McDonnell) [Phrasal Forms](https://www.jsoftware.com/papers/fork.htm) 1989 [APL89](https://aplwiki.com/wiki/APL_conference#1989), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 19, Number 4 58 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [A Commentary on APL Development](https://www.jsoftware.com/papers/commentary.htm) 1988 [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 19, Number 1 59 | (T) [Hui](https://aplwiki.com/wiki/Roger_Hui) [Some Uses of { and }](https://www.jsoftware.com/papers/from.htm) 1987 [APL87](https://aplwiki.com/wiki/APL_conference#1987), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 17, Number 4 60 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [APL87](https://www.jsoftware.com/papers/APL87.htm) 1987 [APL87](https://aplwiki.com/wiki/APL_conference#1987), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 17, Number 4 61 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [A Dictionary of APL](https://www.jsoftware.com/papers/APLDictionary.htm) 1987 [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 18, Number 1 62 | (T) Pesch [Empty Frames in SHARP APL](https://www.jsoftware.com/papers/EmptyFrames.htm) 1986 [APL86](https://aplwiki.com/wiki/APL_conference#1986), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 16, Number 4 63 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson), Pesch, Schueler [An Operator Calculus](https://www.jsoftware.com/papers/APLOperatorCalculus.htm) 1984 [APL84](https://aplwiki.com/wiki/APL_conference#1984), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 14, Number 4 64 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Rationalized APL](https://www.jsoftware.com/papers/RationalizedAPL.htm) 1983 [I.P. Sharp Associates](https://aplwiki.com/wiki/I.P._Sharp_Associates) 65 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Letter to J.K. Tuttle](https://www.jsoftware.com/papers/JKTletter.htm) 1983 66 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [APL Syntax and Semantics](https://www.jsoftware.com/papers/APLSyntaxSemantics.htm) 1983 [APL83](https://aplwiki.com/wiki/APL_conference#1983), [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 13, Number 3 67 | (T) Azzarello (editor) [The Early Years](https://www.jsoftware.com/papers/QQ_Early_Years.htm) 1982 [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), APL Press, Palo Alto 68 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson), [Whitney](https://aplwiki.com/wiki/Arthur_Whitney) [Practical Uses of a Model of APL](https://www.jsoftware.com/papers/APLModel.htm) 1982 [APL82](https://aplwiki.com/wiki/APL_conference#1982), A[APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 13, Number 1 69 | (T) [Hui](https://aplwiki.com/wiki/Roger_Hui) [The N Queens Problem](https://www.jsoftware.com/papers/nqueens.htm) 1981 [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 11, Number 3 70 | (T) Orth [A Comparison of the IPSA and STSC Implementations of Operators and General Arrays](https://www.jsoftware.com/papers/IPSA_STSC.htm) 1981 [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 12, Number 2 71 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [The Inductive Method of Introducing APL](https://www.jsoftware.com/papers/InductiveMethod.htm) 1980 1980 APL Users Meeting Proceedings 72 | (T) [Bernecky](https://aplwiki.com/wiki/Bob_Bernecky), [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Operators and Enclosed Arrays](https://www.jsoftware.com/papers/opea.htm) 1980 1980 APL Users Meeting Proceedings 73 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Notation as a Tool of Thought](https://www.jsoftware.com/papers/tot.htm) 1980 Communications of the ACM, Volume 23, Number 8 74 | (T) Goldsmith [Corporate Communications Using the SHARP APL Mailbox](https://www.jsoftware.com/papers/Goldsmith_Mailbox_1980.pdf) 1980 1980 APL Users Meeting Proceedings 75 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [The Role of Operators in APL](https://www.jsoftware.com/papers/APLOperators.htm) 1979 APL79, APL Quote Quad, Volume 9, Number 4 76 | (T) [Falkoff](https://aplwiki.com/wiki/Adin_Falkoff), [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [The Evolution of APL](https://www.jsoftware.com/papers/APLEvol.htm) 1978 ACM SIGPLAN Notices, Volume 13, Number 8 77 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Programming Style in APL](https://www.jsoftware.com/papers/APLStyle.htm) 1978 1978 APL Users Meeting Proceedings 78 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Operators and Functions](https://www.jsoftware.com/papers/opfns.htm) 1978 Research Report #RC7091, [IBM](https://aplwiki.com/wiki/IBM) 79 | (T) [Perlis](https://aplwiki.com/wiki/Alan_Perlis) [Almost Perfect Artifacts Improve only in Small Ways: APL is more French than English](https://www.jsoftware.com/papers/perlis78.htm) 1978 [APL78](https://aplwiki.com/wiki/APL_conference#1978) 80 | (T) Gaboury [Letter to the Editor](https://www.jsoftware.com/papers/Gaboury.htm) 1977 [APL Quote Quad](https://aplwiki.com/wiki/APL_Quote_Quad), Volume 7, Number 4 81 | (T) [Perlis](https://aplwiki.com/wiki/Alan_Perlis) [In Praise of APL: A Language for Lyrical Programming](https://www.jsoftware.com/papers/perlis77.htm) 1977 [SIAM News](https://en.wikipedia.org/wiki/Society_for_Industrial_and_Applied_Mathematics) 82 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Formal Function Definition](https://www.jsoftware.com/papers/DirectDef.htm) 1976 Chapter 10 of Elementary Analysis, APL Press 83 | (T) [SIGAPL](https://aplwiki.com/wiki/SIGAPL) [Iverson Receives Harry Goode Award](https://www.jsoftware.com/papers/goode.htm) 1975 [APL Quote Quad, Volume 6, Number 2](https://aplwiki.com/wiki/APL_Quote_Quad) 84 | (T) [Falkoff](https://aplwiki.com/wiki/Adin_Falkoff), [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [The Design of APL](https://www.jsoftware.com/papers/APLDesign.htm) 1973 [IBM Journal of Research and Development, Volume 17, Number 4](https://en.wikipedia.org/wiki/IBM_Journal_of_Research_and_Development) 85 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Algebra as a Language](https://www.jsoftware.com/papers/algebra.htm) 1972 Appendix A of Algebra: An Algorithmic Treatmentson-Wesley 86 | (T) [Falkoff](https://aplwiki.com/wiki/Adin_Falkoff) [APL\360 History](https://www.jsoftware.com/papers/apl360history.htm) 1969 Proceedings of the [APL Users Conference](https://aplwiki.com/wiki/APL_conference#1969) at [SUNY Binghamton](https://en.wikipedia.org/wiki/Binghamton_University) 87 | (T) [Falkoff](https://aplwiki.com/wiki/Adin_Falkoff), [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [The APL\360 Terminal System](https://www.jsoftware.com/papers/APL360TerminalSystem.htm) 1967 Research Report RC-1922, [IBM](https://aplwiki.com/wiki/IBM) 88 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Conventions Governing Order of Evaluation](https://www.jsoftware.com/papers/EvalOrder.htm) 1966 Appendix A of Elementary Functions: An Algorithmic Treatment, Science Research Associates 89 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Formalism in Programming Languages](https://www.jsoftware.com/papers/FPL.htm) 1964 Communications of the [ACM](https://en.wikipedia.org/wiki/Association_for_Computing_Machinery), Volume 7, Number 2 90 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Programming Notation in System Design](https://www.jsoftware.com/papers/PNSD.htm) 1963 [IBM Systems Journal](https://en.wikipedia.org/wiki/IBM_Journal_of_Research_and_Development), Volume 2, Number 2 91 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [A Programming Language](https://www.jsoftware.com/papers/APL.htm) 1962 [Wiley](https://en.wikipedia.org/wiki/Wiley_(publisher)) 92 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [A Programming Language](https://www.jsoftware.com/papers/AFIPS196205.htm) 1962 Proceedings of the [AFIPS](https://en.wikipedia.org/wiki/American_Federation_of_Information_Processing_Societies) Spring Joint Computer Conference, San Francisco 93 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [A Common Language for Hardware, SoftwareApplications](https://www.jsoftware.com/papers/AFIPS196212.htm) 1962 Proceedings of the [AFIPS](https://en.wikipedia.org/wiki/American_Federation_of_Information_Processing_Societies) Fall Joint Computer Conference, Philadelphia 94 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [The Description of Finite Sequential Processes](https://www.jsoftware.com/papers/DFSP.htm) 1960 Symposium on Information Theory, [Royal Institution](https://en.wikipedia.org/wiki/Royal_Institution), London 95 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Machine Solutions of Linear Differential Equations ― Applications to a Dynamic Economic Model](https://www.jsoftware.com/papers/MSLDE.htm) The present study was undertaken to obtain solutions to a dynamic economic model proposed by Leontief, and to develop methods of computation suitable to the Mark IV Computer. 1954 Doctoral Thesis, [Harvard University](https://en.wikipedia.org/wiki/Harvard_University) 96 | (T) [Iverson](https://aplwiki.com/wiki/Ken_Iverson) [Graduate Instruction and Research](https://www.jsoftware.com/papers/GradIR.htm) 1954 The First Conference on Training Personnel for the Computing Machine Field, Arvid W. Jacobson, editor, [Wayne State University](https://en.wikipedia.org/wiki/Wayne_State_University) 97 | (T) [Dyalog Ltd](https://aplwiki.com/wiki/Dyalog_Ltd.) [Workspaces](https://help.dyalog.com/latest/#Language/Introduction/Workspaces.htm) Introduction to the use of workspaces to hold one's code and data cont. 98 | -------------------------------------------------------------------------------- /quiz/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | APLcart - Quiz 6 | 7 | 8 | 9 | ⊆⌈ 10 | ? 11 | Quiz me on: 12 |
13 |
14 |

Writing a function for a given task

15 |
16 | 17 | 18 |

19 |       
20 |
21 |

Explaining the purpose of a given function

22 |
23 | 24 | 25 |

26 |
27 |
28 |

Filling in an obscured symbol

29 |
30 | 31 | 32 |
33 |
34 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /quiz/quiz.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:P;src:local('APL333'),url(/apl333.ttf)} 2 | @font-face{font-family:M;src:local('APL386 Unicode'),url(/APL386.ttf)} 3 | i{display:none} 4 | *{font-family:P} 5 | body{color:#222;overflow:hidden;position:relative;font-size:16px;content:"w";background:#ddd} .w{background:#ddd;filter:invert(0)} 6 | @media(prefers-color-scheme:dark){body[class=""]{content:"g";background:#444;filter:invert(.85)}} .g{background:#444;filter:invert(.85)} 7 | @media(prefers-contrast:more) {body[class=""]{content:"b";background:#222;filter:invert(1) }} .b{background:#222;filter:invert(1)} 8 | pre,code{font-family:M;white-space:pre-wrap} 9 | code 10 | img{margin-bottom:4px;opacity:90%;} 11 | #a{position:relative;top:6.5px;height:16px;margin-right:.6ex;border-radius:1em;border:.25ex solid currentcolor;width:16px} 12 | a{display:inline-block;text-align:center;z-index:1;width:1em;line-height:1em;color:unset; 13 | -webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none} 14 | a:hover,a:focus{color:#000} 15 | a:hover img,a:focus img{opacity:1} 16 | #e{margin:0 .5em} 17 | #e,#s,#w{border-radius:1em;border:.25ex solid currentcolor} 18 | #s,#w{margin:0 .3em;position:relative} 19 | #w{background:linear-gradient(to right,currentcolor 50%,transparent 50%)} 20 | #q{margin-top:1em} 21 | #m{letter-spacing:-.25ex;font-size:133%} 22 | p,#p1,#p2,#p3{margin-left:1em;font-size:larger;min-height:1.1em} 23 | #p3{margin-left:0} 24 | article{background:#fff;padding:1ex;margin-bottom:.5em} 25 | h2{margin:0 0 .5ex 0;font-weight:unset} 26 | #c{overflow-y:auto;height:calc(100vh - 4.8em);margin-top:1ex} 27 | footer{text-align:right} 28 | #u{width:100%;text-align:center;position:absolute;bottom:0;left:0} 29 | del,ins{font-family:inherit;border:3px solid #0003;text-decoration:none;white-space:pre;border-radius:.33em;padding:0 1px 0 2px} -------------------------------------------------------------------------------- /quiz/quiz.js: -------------------------------------------------------------------------------- 1 | var ps 2 | I=_=>{ 3 | var s=new URLSearchParams(location.search) 4 | console.log(window.getComputedStyle(b).content[1]) 5 | b.className=0==s.get("b")?"b":0==s.get("g")?"g":0==s.get("w")?"w":window.getComputedStyle(b).content[1] 6 | console.log(window.getComputedStyle(b).content[1]) 7 | um.href="/?"+b.className 8 | if(s.get("self")!=null){document.querySelectorAll("[target]").forEach(e=>e.target="_self");um.href+="&self"} 9 | fetch("/table.tsv").then(d=>d.text()).then(d=>{ 10 | ps=d.replace(/[<>&'"]/g,x=>({'<':'<','>':'>','&':'&',"'":''','"':'"'}[x])).trim().split(/\r?\n/g).splice(1).map(r=>r.split("\t")) 11 | .filter(x=>-1===x[0].indexOf("dfns.") && ["Tacit", "Dfn"].includes(x[2]) && ["Monadic Function", "Dyadic Function"].includes(x[3]) && x[4]==="") 12 | Q1();Q2();Q3()})} 13 | E=x=>(["any","a numeric","an integer","a Boolean","a character"]["XMIACYNJBD".indexOf(x[0])%5]+(x[1]?[" scalar"," vector"," matrix"]["svm".indexOf(x[1])]:" array")+(x?" "+x+"":"")) 14 | R=x=>x[Math.floor(Math.random()*x.length)] 15 | X=x=>x[0].match(/^[a-z]*/i)[0] 16 | Y=x=>x[0].match(/[a-z]*$/i)[0] 17 | Q1=_=>{ 18 | c1=R(ps);a=X(c1);w=Y(c1) 19 | q1.innerHTML=`Write a ${c1[3].match(/\w+/)[0].toLowerCase()} ${c1[5].toLowerCase()} function, ${a?a+" ":""}YourFunction ${w}, that for ${a?E(a)+" and ":""}${E(w)}, solves the following ${["easy","medium-difficulty","hard"][(x=>Math.floor(3*x.indexOf(c1)/x.length))(ps.filter(x=>x[2]===c1[2]))]} task:

${c1[1]}

` 20 | } 21 | Q2=_=>{ 22 | c2=R(ps);a=X(c2);w=Y(c2) 23 | q2.innerHTML=`What does the following ${c2[3].match(/\w+/)[0].toLowerCase()} ${c2[5].toLowerCase()} function compute when given ${a?E(a)+" and ":""}${E(w)}?

${c2[0]}

` 24 | } 25 | Q3=_=>{ 26 | c3=R(ps);a=X(c3);w=Y(c3) 27 | r=/[^\[\]\{\}\(\)\w¯\d&;⋄'#∆⍙⍺⍵⎕⍞ ]/g 28 | n=Math.floor(Math.random()*c3[0].match(r).length) 29 | i=0;c3d=c3[0].replace(/<|>/g,x=>({'<':'<','>':'>'}[x])).replace(r,x=>i++==n?"@@":x).replace(/<|>/g,x=>({'<':'<','>':'>'}[x])).replace('@@',' ') 30 | i=0;c3i=c3[0].replace(/<|>/g,x=>({'<':'<','>':'>'}[x])).replace(r,x=>i++==n?"@←@"+x+"@→@":x).replace(/<|>/g,x=>({'<':'<','>':'>'}[x])).replace('@←@','').replace('@→@','') 31 | q3.innerHTML=`What is the obscured symbol in the following ${c3[3].match(/\w+/)[0].toLowerCase()} ${c3[5].toLowerCase()} function:

${c3d}

which when given ${a?E(a)+" and ":""}${E(w)}, solves the task:

${c3[1]}

` 32 | } 33 | W=x=>{b.className=x?x:"wbg"[1+"wb".indexOf(b.className)];um.href="/?"+b.className} 34 | -------------------------------------------------------------------------------- /task/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | APLcart - Quiz 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /type.apla: -------------------------------------------------------------------------------- 1 | [ 2 | ('Monadic Function ') 3 | ('Dyadic Function ') 4 | ] 5 | -------------------------------------------------------------------------------- /what/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | APLcart - Quiz 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /⎕IO.apln: -------------------------------------------------------------------------------- 1 | 1 2 | --------------------------------------------------------------------------------