« first day (1128 days earlier)      last day (1529 days later) » 

1:21 AM
And this 200 worth makes 4000 in total.
 
 
8 hours later…
9:05 AM
I'm (re-)learning numpy and tensorflow these days at work, and I found their array model is surprisingly similar to APL's. It was so hard to get the hang of it when I didn't know APL; it's so easy now.
 
 
2 hours later…
10:45 AM
This snippet counts runs of equal elements in a vector: {e←(2≠/⍵),1⋄¯2-/¯1,e/⍳⍴⍵}, so called on 1 1 1 1 2 2 gives 4 2. It seems to me that it ought to be doable with somehow after reading one of @Adám's previous lessons. Or is that barking up the wrong tree?
⎕←{e←(2≠/⍵),1⋄¯2-/¯1,e/⍳⍴⍵}1 1 1 1 2 2 ⊣ ⎕IO←0
 
@xpqz
4 2
 
@xpqz doesn't care about the relative positions, so 1 1 1 1 2 2 1 1 1 would count 7 1s and 2 2s, while you want 4 2 3, no?
 
11:01 AM
Yes, that's right. So it's basic run-length encoding, sort of.
 
11:23 AM
Is there a better way/more idiomatic to accomplish this?
 
11:34 AM
@xpqz It's called partitioning:
⎕←{⍵⊂⍨1,2≠/⍵}1 1 1 1 2 2 1 1 1
 
@Adám
┌───────┬───┬─────┐
│1 1 1 1│2 2│1 1 1│
└───────┴───┴─────┘
 
So now you can just count the length of each:
⍞←{≢¨⍵⊂⍨1,2≠/⍵}1 1 1 1 2 2 1 1 1
 
@Adám 4 2 3
 
That's nice.
 
@xpqz However, your approach is more performant. Here's another edition of it:
⍞←{¯2-/0,⍸1,⍨2≠/⍵}1 1 1 1 2 2 1 1 1
 
11:38 AM
@Adám 4 2 3
 
Aha, a new glyph for me to figure out:
 
@xpqz Yes, whenever you see /⍳⍴ or /⍳≢, think . You can conveniently call it where as it gives the indices where true.
 
 
1 hour later…
12:53 PM
Huh. After trying to figure out how to get the real and imaginary components of a complex number, and coming up with a couple of dfns that would do it, I discover from APLCart that all I need is 9○⍵ and 11○⍵.
 
@JeffZeitlin Yup: "How-to question?" → APLcart
 
I'd gotten to real←{2÷⍨⍵++⍵} and imag←{0j1÷⍨⍵-{2÷⍨⍵++⍵}⍵}. But 9○⍵ and 11○⍵ are a lot simpler... :)
I'm actually a little pleased that I came up with those, because I did it without benefit of a 'terp in front of me - I was literally walking from home to the train this morning as I worked them out.
Which reminds me - the Dyalog website says that support for Android is planned, but no date as yet. Can you discuss the progress of that, and estimate when I might be able to look forward to it?
 
1:11 PM
@JeffZeitlin Real←2÷⍨⊢++ ⋄ Imag←0j¯2÷⍨-++
 
@Adám - OK, I think I see how your Real matches mine; I'm not following Imag
 
> No news on Android to report. It's still "planned", but no date or anything.
@JeffZeitlin - negates both Re and Im, while + only negates Im. The sum of them eliminates Re while doubling Im and changing its sign. If y=-2ix then x=y÷(-2i).
 
So the equivalent dfn would be {0J¯2÷⍨(-⍵)++⍵} ?
 
optima-systems.co.uk/… an interesting read on finding out if something is a palindrome in APL. Thought it might be of interest for the orchard.
 
@TomCockram Timely:
2
Q: Pairs of palindromic anagramic dates separated by a palindromic number of days

Regis PortalezDefinitions: A palindrome is a string which reads the same backward or forward (not counting spaces or special characters), such as "madam" or "Sorel Eros". A date is said to be a palindrome when its dd-mm-yyyy format is a palindrome (or any other local representation). Two strings are said t...

 
1:27 PM
@TomCockram - I like that explanation; he could have just looked it up on APLCart.
 
@TomCockram <code> shouldn't use beautified quotes (⌽’rats’ returns ‘star’ etc.) as it will fail if pasted into APL.
 
@Adám could be something wrong with Optima's blogging procedure, I'll notify Mike. Thanks for spotting this.
@Adám should be resolved now. Was an issue in translation getting the source online. Thanks again for pointing this out.
 
1:44 PM
@JeffZeitlin thanks, it wasn't written by me but I'll pass on your kind words :)
 
@TomCockram Note to Sam: You might want to mention that the dfn edition requires a dummy argument to run.
 
2:03 PM
@all Any ideas for the upcoming APL Cultivation?
 
Overview of the dfns workspace? Overview of your Extended APL?
My third idea was Namespaces, but that was 6 Feb 2018's topic.
 
2:30 PM
Welcome to APL Cultivation!
 
Thanks! \o/
My first!
 
Now, first task for today is to decide on a subject.
Candidates are: a closer look at some of the more advanced operators ⌺⌸⍠, looking at the dfns workspace, anything else you might want.
 
I vote ⌺⌸⍠
 
⌺⌸⍠
 
OK, well I guess we can begin with ⍠ since we've never explicitly covered it before.
is a dyadic operator, but it is quite unlike all other operators in APL.
Syntactically, it is normal though. It always takes a function (monadic or dyadic) on its left, and always takes an array on its right.
 
2:36 PM
this is variant not domino, right?
 
@TomCockram Correct. Domino, , is a normal arithmetic function.
And as Tom said, it is usually called Variant, although you can also call it Option. In fact, it has a system operator synonym, ⎕OPT.
 
Ok. What does it do?
 
Variant is special in that it sets options in an invisible set of options. You can't access this set directly, only observe modified behaviour in the operand function, because the operand function will check this set to know what to do.
This also means that, uniquely, the operand function will "know" that it is being called as an operand of . Usually, functions can't really detect (easily) who called them.
The left operand (the function) must be one of a fixed set of system functions (or functions derived from system operators).
The right operand must be one of:
∘  a scalar (this one is known as the principal option)
∘  a 2-element key-value pair
∘  a vector of 2-element key-value pairs.
The scalar operand is only allowed if a default key exists, in which case it is equivalent to 'DefaultKey' value.
Enough talk. Let's take an example. You might know about the system function to convert to and from JSON:
⎕←⎕JSON⍳3
 
@Adám
[1,2,3]
 
We can use with the key 'Compact' to change the white-space behaviour of ⎕JSON. In essence, set's the Compact setting to the corresponding value (0 or 1 in this case):
⎕←⎕JSON⍠'Compact' 0 ⍳3
 
2:46 PM
@Adám
[
  1,
  2,
  3
]
 
neat
 
Ah, I came across this with regexes a few days ago
 
@xpqz Right. I'll get to those.
There are other options too. E.g. normally ⎕JSON will convert a JavaScript null to an APL enclosed string ⊂'null':
⍞←(⊂'null') ≡ ⎕JSON'null'
 
@Adám 1
 
However, if you instead want it to convert it to an object-type null, ⎕NULL you can tell it so:
⍞←⎕NULL ≡ ⎕JSON⍠'Null' ⎕NULL ⊢ 'null'
 
2:49 PM
@Adám 1
 
Notice the . Does anyone not know why I put it there?
Whenever a dyadic operator has an array right operand, it will strand together with any literal right argument. There must be a function (or parentheses, or naming) to split them apart.
Another option for ⎕JSON is to convert JSON into an APL matrix that describes the JSON, rather than attempting to actually convert to an equivalent APL structure:
⎕←⎕JSON⍠'Format' 'M' ⊢ '[1,null,"hello"]'
 
@Adám
┌─┬┬──────┬─┐
│0││      │2│
├─┼┼──────┼─┤
│1││1     │3│
├─┼┼──────┼─┤
│1││┌────┐│5│
│ │││null││ │
│ ││└────┘│ │
├─┼┼──────┼─┤
│1││hello │4│
└─┴┴──────┴─┘
 
The exact details of this Matrix Format isn't important here, though. We can deal with those another time, or you can check out the docs.
Now that we know about a couple of options, we can look at how to specify multiple options. We can create a "dictionary" of key-value pairs:
⎕←⎕JSON⍠('Format' 'M')('Null' ⎕NULL) ⊢ '[1,null,"hello"]'
 
@Adám
┌─┬┬──────┬─┐
│0││      │2│
├─┼┼──────┼─┤
│1││1     │3│
├─┼┼──────┼─┤
│1││[Null]│5│
├─┼┼──────┼─┤
│1││hello │4│
└─┴┴──────┴─┘
 
Notice how we both got a matrix, and the null became [Null] (the text representation of ⎕NULL) rather than an enclosed 'null'.
We can also use twice:
⎕←⎕JSON⍠'Format' 'M'⍠'Null' ⎕NULL ⊢ '[1,null,"hello"]'
 
2:59 PM
@Adám
┌─┬┬──────┬─┐
│0││      │2│
├─┼┼──────┼─┤
│1││1     │3│
├─┼┼──────┼─┤
│1││[Null]│5│
├─┼┼──────┼─┤
│1││hello │4│
└─┴┴──────┴─┘
 
And if we check the docs for ⎕JSON we'll see that 'Format' is the principal option, which means we can specify it as a scalar:
⎕←⎕JSON⍠'M'⍠'Null' ⎕NULL ⊢ '[1,null,"hello"]'
 
@Adám
┌─┬┬──────┬─┐
│0││      │2│
├─┼┼──────┼─┤
│1││1     │3│
├─┼┼──────┼─┤
│1││[Null]│5│
├─┼┼──────┼─┤
│1││hello │4│
└─┴┴──────┴─┘
 
What happens if we set the same option twice?
@all Anyone venture a guess?
 
Same as passing it once I'd hope.
 
Oh, I meant setting it to two different values.
 
3:02 PM
According to the docs, the rightmost one takes precedence.
 
Indeed. There are two ways you can think of it, both leading to that same conclusion.
1)  (like any operator) modifies its operand function. For simplicity, lets say we have two monadic operators applied acting on a function, f op1 op2, op2 gets to modify the derived function f op1. That is, the rightmost has the final say.
2) When we evaluate, we first have to process the inner derived function's operator (as in the previous point), which sets the hidden option. Then we proceed to the outer operator, which in turn overwrites the state. Only then is the function allowed to run, picking up the setting set by the rightmost (outer) operator.
@all Is this all clear?
 
yes
 
/me nods
 
Let's use the regex example.
If you're not familiar with ⎕R: Briefly, it is a dyadic operator, Replacing occurrences of its left operand with its right operand, in the right argument:
 
So this is APL's version of passing optional config parameters to a function, basically?
 
3:10 PM
Pretty much, but it only applies to system functions. You can't use it in general for your own APL functions.
There are other (better, I'd say) methods for that.
⍞←'s'⎕R'S' ⊢ mississippi'
 
@Adám SYNTAX ERROR
 
'quote
 
Oops, missing quote.
⍞←'s'⎕R'S' ⊢ 'mississippi'
 
@Adám miSSiSSippi
 
This replaces all lowercase s with uppercase S.
Let's say we only want to replace the first 2. We can set the Match Limit to 2.
@all Hey, let's make this an exercise! Try it: The option key is 'ML'.
No?
 
3:17 PM
I'm trying lol
 
I have unsuccessful attempts
 
What have you got? No need to be embarrassed.
 
's'⎕R⍠('ML' 2)'S'⊢'mississippi'
syntax error
 
⍞←'s'⎕R'S'⍠'ML' 2 ⊢ 'mississippi'
 
@JPeroutek miSSissippi
 
3:18 PM
Right, so the trick here is to realise what syntactic classes were dealing with.
 
Aha. That's where ⍵ goes
 
I was literally just sticking ⍠ 'ML' 2 onto the end:
⍞←'s'⎕R'S' ⊢ 'mississippi' ⍠'ML' 2
 
@xpqz ⍵⍵, if you want :-)
 
@TomCockram  s ⎕R S ⊢  mississippi ⍠  ML  2
 
OK, this is important to understand.
Remember, is a "normal" operator.
This means that it needs to modify a function, before the function is applied.
 
3:20 PM
Did I get it right?
 
@JPeroutek You did.
 
@JPeroutek - looks like :)
 
so bracketing (⍠ 'ML' 2)?
 
This is really no different than ¨ in +/¨(1 2 3)(4 5 6)
@TomCockram You can, but never have to.
⎕R is also an operator. It takes two operands, in our case 's' and 'S', and derives a new function.
It is this derived function that needs to act upon by taking it as its left operand.
So the order is FunctionToBeModified ⍠ options ⊢ argument
 
Ah, hah! Which explains why the 'S' had to come before the ⍠
 
3:23 PM
Exactly.
Alternatively, we can parenthesise: (FunctionToBeModified ⍠ options) argument
 
⍞←'s'⎕R'S'⊢'mississippi'(⍠'ML'⊢2)
 
@TomCockram SYNTAX ERROR
 
@TomCockram That won't work. You have MonadicOperator function array on the right.
Remember that a dyadic operator can bind with its right operand to form a monadic operator.
 
We would have to parenthesize if FunctionToBeModified was dyadic, correct?
 
@JeffZeitlin Only if the function to be modified itself is derived from an operator with an array left argument, as is the case here.
 
3:27 PM
Oh I see, looking at the correct solution above. I'd need to set the ML and then have my argument 'mississippi'?
 
@TomCockram Yes, the modification of the function derives a new function, which is then applied.
 
You could also do something like this right
⍞←('s'⎕R'S'⍠ 'ML' 2) 'mississippi'
 
@JPeroutek miSSissippi
 
To eliminate the right tack
 
Yes.
Naming a derived monadic operator:
⋄ ReplaceWithS←⎕R'S' ⋄ 's'ReplaceWithS 'mississippi'
 
3:28 PM
@Adám
miSSiSSippi
 
This also means we can name the combination of with one or more options.
⋄ OnlyTwo←⍠'ML'2 ⋄ 's'⎕R'S'OnlyTwo 'mississippi'
 
Only2←⍠'ML'2 ?
 
@Adám
miSSissippi
 
GMTA :)
 
@JeffZeitlin Ninja'd.
We can even do both:
⋄ ReplaceWithS←⎕R'S' ⋄ OnlyTwo←⍠'ML'2 ⋄'s'ReplaceWithS OnlyTwo 'mississippi'
 
3:30 PM
@Adám
miSSissippi
 
A really common thing with regexes is wanting case insensitivity. That is 'IC'1 (Ignore Case), but it is also the principal option:
⍞←'ss'⎕R'__'⍠1⊢'MISSissippi'
 
@Adám MI__i__ippi
 
So if the setting is the principal option, it does not have to be specified? Only the value?
 
"Principal option" meaning that if you specify only a value, it will be applied to that option?
 
Yes and yes.
But it only works if that is the only setting you're changing. Though, you can always use twice:
⍞←'s'⎕R'_'⍠'ML'3⍠1⊢'MISSissippi'
 
3:34 PM
@Adám MI__i_sippi
 
Is it generally considered 'better' to repeatedly use ⍠, or to provide a vector of parenthesized options to a single ⍠?
 
Ok, so quick question. What if I'm trying to set the principal option to a value that is equivalent to the name of another option? Like in the case of ⎕R, what if I tried to set 'IC' to the value of 'ML'
Obviously a non-sensical value
 
@JeffZeitlin Personal style. I like using one for each options, because I dislike parentheses.
@JPeroutek You'll get an error and a message to that effect. The bot doesn't give detailed messages though. Try it online!
 
I assume that the documentation for the various system functions includes descriptions of applicable options for ⍠?
 
I see.
 
3:39 PM
@JeffZeitlin They do.
Here is another example where we use on ⎕R to do something entirely unrelated to regular expressions…
Sometimes, your input can be of various forms and you need to normalise it. Say you get some text, but it could be a character scalar, a character vector, a vector of character vectors, an enclosed character vector, or even a character vector with literal newlines.
So we want to normalise all of these to become a vector of character vectors.
⋄ VecOfVecs←''⎕R''⍠'ResultText' 'Nested'
⋄ VecOfVecs 'a'
⋄ VecOfVecs 'abc'
⋄ VecOfVecs 'abc' 'def'
⋄ VecOfVecs ⊂'abc'
⋄ VecOfVecs 'abc',(⎕UCS 10),'def'
 
@Adám
┌─┐
│a│
└─┘
┌───┐
│abc│
└───┘
┌───┬───┐
│abc│def│
└───┴───┘
┌───┐
│abc│
└───┘
┌───┬───┐
│abc│def│
└───┴───┘
 
See? :-)
Also note that we often add additional options to existing system functions based on customer demand.
E.g. in version 18.0 (due this summer) we're adding options to ⎕JSON to automatically split high-rank arrays so they can be represented as JSON, and an option to process and generate JSON5. And for ⎕R/⎕S we're adding an option to turn regexes off so you can do literal replacements without worrying about having to escape characters that have special meaning in PCRE.
If you have other requests for options to existing system functions/operators, feel free to email support@dyalog.com
@all Any questions?
 
About this topic or something else? Because I have a question about TODO comments
 
@TomCockram About this. Can that wait 10 minutes until the lesson is over?
 
@Adám of course, no problem
 
3:50 PM
I also have questions regarding other topics. I believe I understand Variant, at least in the contexts presented so far.
 
OK, so before we finish, I'll just briefly mention one more usage of that isn't really related to this, and we can't try it online either.
When using external .NET methods, APL will coerce its arrays into an appropriate type for the called method.
However, .NET methods can be overloaded (different code depending on the type of the argument), and then APL can't know which one you want.
You can use with the method and the option 'OverloadTypes' to choose. The value has to be a .NET data type, e.g. Double or Int32.
This option is the principal option too, so the calling can be done simply with MyDotNetMethod⍠Double ⊢ argument
If the method takes multiple arguments, you can specify a vector of types: MyDotNetMethod⍠(⊂Double Int32) ⊢ argument
Notice two things:
1) The types are not quoted names, they are scalar references to the .NET types. 2)
2) When specifying a vector of types, it must be enclosed, as the principal option must be a scalar.
 
If the .NET method is overloaded, does OverloadTypes have to be specified, or will it detect the argument types?
e.g., if there is an overload that takes an Int32, and one that takes a string, will DotNet 'foo' correctly invoke the string overload, and DotNet 42 invoke the int32?
 
@JeffZeitlin You don't have to. By default, APL will use the type matching the current type of the argument. E.g. if the method can do both Double and Int32, calling it with 42 will choose the integer option unless you specify otherwise.
In such cases, it can be dangerous to rely on the default, as APL will pack values into the smallest type it can, so 0.3+0.7 gives an integer!
⍞←⎕DR 0.3+0.7
 
@Adám 83
 
The digit 8 means 8 bits, and the digit 3 means integer.
OK, this concludes the lesson on
 
4:02 PM
⎕DR is Data Representation?
 
@JeffZeitlin It is.
@TomCockram @JPeroutek What were your questions?
 
Thank you, @Adám.
 
If I wanted to make a call to a web api, what is the most "APL-ish" way of doing so?
 
@JPeroutek Use the HttpCommand utility. You can load it with ]load HttpCommand
 
When I use the search function in the Dyalog APL Language Help window, it doesn't say anything regarding that utility
Is that online-only as far as a reference goes?
 
4:13 PM
@JPeroutek It comes bundled, and is mentioned in the Conga User Guide. If you edit the loaded class, you'll see that it begins with a bunch of comments describing its use.
@JPeroutek All online documentation is included in your install too.
 
@JPeroutek - C:\Program Files\Dyalog\Dyalog APL-64 17.1 Unicode\help
(Assuming you're on Windows)
 
/opt/mdyalog/17.1/64/unicode/help on all other platforms
)docs
 
This ^ is a nice documentation portal.
 
Thanks, I will look over those files. I had some issues finding the local help files. For some reason (likely my fault), my install is located in AppData rather than ProgramFiles
 
4:22 PM
@JPeroutek That's because you installed as non-administrator. If you have admin access, I recommend uninstalling and starting the installer as admin.
 
@JPeroutek - It's been a while since I installed Dyalog on my winboxen, but the most likely reasons (generically) for that are either you didn't install as an admin, or you told it to install for this user only.
 
@JPeroutek You can always ask APL where it is installed:
⎕←2⎕NQ#'GetEnvironment' 'DYALOG'
 
@Adám
/opt/mdyalog/17.1/64/unicode
 
I see.
 
@TomCockram Apparenty, it did become a problem. Feel free to ping me when it suits you. I'm usually around.
 
4:56 PM
@Adám sorry got busy doing something. Is there anyway to add a TODO comments into Dyalog? In java you can do //TODO add some more code here. Then you can find the list somewhere in the IDE.
 
5:21 PM
@TomCockram There's no special handling of this from the IDE's side, but if you add ⍝//TODO (that is a comment) or any other unique sequence, then you can type ]locate //TODO -show to find list the locations or use the Windows IDE's Tools>Search…
 
@Adám - Old Microsoft GW-BASICs allowed you to SAVE "FILE",A to give you a human-readable listing of the program that you could edit (or paste into e.g., a magazine). Is there some equivalent functionality for Dyalog? And (ideally) a way to load it back into a workspace if the text file has been edited?
 
@JeffZeitlin Oh yes. In fact, I strongly recommend not using workspaces for anything other than sending bug reports to us. SALT has been around for a while, but Link is the new cool kid in town.
 
OK, I have (obviously) the User Guide and Cheat Sheet (why do I always want to write that as "Cheat Sheat"?) for SALT, but what is Link and where do I find its documentation?
 
@JeffZeitlin Link is the new way to work with namespaces and their content as folders with files. It is still WIP and a bit rough around the edges, but it has benefits over SALT. Check out github.com/dyalog/link/wiki
 
6:02 PM
Is there an operator to apply a function to a two-tuple(probably the wrong terminology)? Something like -A (5 3), which would be equivalent to 5 - 3. Where A is the operator I am seeking.
 
@JPeroutek / for simple things, but you may need to disclose the result if it is non-simple. Anyway:
⍞← -/ 5 3
 
@Adám 2
 
Essentially, I have two binary arrays, and wanted to subtract one from the other, yielding an array of 1's, 0's, and -1's.
Next question
⎕←+/⊃-/'()'=¨⊂'()()()())))'
 
@JPeroutek
¯3
 
I have this bit of code. Is there a good way to shorten the +/⊃-/ part
 
6:09 PM
@JPeroutek Yeah, that works, but if you can help it, try to avoid nested arrays and using ¨. Instead, increase the rank:
⎕←'()'∘.='()()()())))'
 
@Adám
1 0 1 0 1 0 1 0 0 0 0
0 1 0 1 0 1 0 1 1 1 1
 
And now you can do -⌿ to subtract vertically:
⎕←-⌿'()'∘.='()()()())))'
 
@Adám
1 ¯1 1 ¯1 1 ¯1 1 ¯1 ¯1 ¯1 ¯1
 
Ok, using those suggestions, I've gotten it to the dfn {+/-⌿'()'∘.=⍵}
this feels a little off, but gives the right answer, so the logic is likely correct. The goal is from Advent of Code 2015. Essentially, take # of '(' and subtract # of ')'
 
@JPeroutek Why the "off" feeling? Looks good to me.
 
6:19 PM
Not sure, I think its the +/-⌿. Just feels like theres a better way that I'm missing.
Oh well. good enough i suppose.
 
@JPeroutek There's this one:
⍞←+/¯1*')('⍳'()()()())))'
 
@Adám ¯3
 
 
2 hours later…
7:54 PM
Hmmm... Dyadic ⍳ takes the right argument and indicates where in the left argument it is, which in this case will return either 1 or 2 (because ⎕IO is 1). That gets me a vector of 1s and 2s, which I then apply as the exponent to the power function, raising ¯1 to each of those values. ¯1*1 is ¯1; ¯1*2 is 1; so I now have a vector of 1s and ¯1s, which I apply +/ to.
 
@JeffZeitlin Right. If ⎕IO was 0 you'd simply reverse the ')(.
 
@Adám - ... right. Because ¯1*0 is 1.
The earlier version, using ∘.=, was an interesting approach.
Using that approach, you don't actually have to do +/-⌿; I got the same result by doing -/+/
 
8:10 PM
@JeffZeitlin That makes sense, no?
 
@Adám - It does, and I think it's because addition is commutative.
No. It's because neither addition nor subtraction necessarily distributes over the other.
So that in the rank-2 case, it doesn't matter which direction you reduce in first.
 
@JeffZeitlin The subtraction can be seen as weighted addition a+k×b, so we can say that it is because multiplication distributes over addition and addition is associative.
 
8:48 PM
Adám has made a change to the feeds posted into this room
 
9:02 PM
posted on January 01, 0001 by RichPark

RichPark: = wpfXamlDemo = '''wpfXamlDemo''' is a Dyalog APL namespace that demonstrates the use of WPF Xaml with some utility functions. Please read the Dyalog tutorials for a more detailed explanation. Part of the code was taken from <ref>[http://www.codeproject.com/Articles/22980/WPF-A-Beginner-s-Guide-Part-of-n CodeProject: A Beginner's Guide]</ref> === WHAT IS XAML

posted on January 01, 0001 by Adám Brudzewsky

Adám Brudzewsky: Created page with "APL has been standardised by ANSI, ISO, and IEC. Early APL, supporting only simple arrays, was described by [https://www.iso.org/standard/15692.html ISO 8485:1989 ], and e..." APL has been standardised by ANSI, ISO, and IEC. Early APL, supporting only [[simple array]]s, was described by [https://www.iso.org/standard/15692.html ISO 8485:1989 ], an

posted on January 01, 0001 by Jzeitlin

Jzeitlin: Clarification on score deduction in Solution move. APL-eusis is a game that allows participants to hone their skills in the APL programming language. It is inspired by existing games of inductive logic such as Eleusis or Zendo. == Basic Play == The game may be played by any convenient number of participants. In each round, one participant is named Master, the others are Students.

posted on January 01, 0001 by Adám Brudzewsky

Adám Brudzewsky: {| class=wikitable |{{quote | "We learn elementary mathematics before understanding the source of its symbols and procedures, which therefore appear, incorrectly, to have been decreed ready-made. Language and reason are intimately related, and the embodiment of an idea in a symbol may be essential to its comprehension. APL unifies algebra into a single consistent nota

posted on January 01, 0001 by RichPark

Adám Brudzewsky: /* External links */ '''APL et J''' (French: APL and J) is the French association for the promotion of the APL and [[J]] languages. == External links == * website: http://www.afapl.asso.fr/ {{APL community}}

 
@Οurous Welcome back. It has been a while.
… and dyalog.com's search still goes to unsecure http
 
9:57 PM
Yes, yes it does.
 

« first day (1128 days earlier)      last day (1529 days later) »