« first day (454 days earlier)      last day (2190 days later) » 

Ven
8:38 AM
@Adám which reminds me – did you find any tuits for the new tryapl version?
 
@Ven It doesn't really hang on me, but I've pushed it all the way up to management.
 
Ven
Is that why it's offline atm? :-)
 
16 hours ago, by Feeds
Just a reminder that Dyalog servers will be down for maintenance tomorrow starting at 9am UTC. We expect this to last approximately 4 hours during which time our website and other external services will be unavailable.
 
Ven
Oh, ok, thanks.
 
 
3 hours later…
11:55 AM
Our websites are back up after the server upgrade - it all went well but we do have a few little things to sort out. Thank you for your patience whilst we were offline.
 
12:39 PM
@EriktheOutgolfer Roger Hui informed me that Scan was introduced in APLSV around 1973 or so.
 
12:52 PM
@Adám and, uh, you can't really implement your own scan operator in APL\360 because...oh right, you can't implement operators yet
 
Right. You had to be clever instead. I suppose APL\360 lets you appreciate the expressiveness of today's Dyalog APL, no?
 
@Adám more like be sorry for the poor people of 1966 who had to cope with great challenges
 
Well, imagine APL\360 compared to the FORTRAN, LISP, and COBOL that they had then (not today's versions)…
 
the reason why not being able to implement operators is bad is basically because, well, then you have to implement stuff like "scan with +", "scan with -", "scan with ×", etc.
 
Ven
1:35 PM
Oh, that post on reddit reminded me of the discussion last week.
 
 
2 hours later…
3:29 PM
We are excited to announce #FnConf18 - Asia’s premier Functional Programming Conf Bangalore, Dec 12-16th Day 1: Pre-Conf Workshops Day 2: FP Bootcamp (#Haskell, #Erlang, #JVM) Day 3: Applying FP Day 4: Mastering FP Day 5: Post-Conf Workshops More details: https://functionalconf.com/
Got an interesting story about using #FunctionalProgramming in Production? Share your insights at #FnConf18. Call for Proposals is now open at https://confengine.com/functional-conf-2018/proposals #Haskell #Erlang #Elixir #OCaml #Scala #Clojure #Java9 #rustlang #Elm #javascript #PureScript #FSharp #CSharp
 
 
7 hours later…
ngn
10:20 PM
cmc: given a list of abs paths like `'/etc/hosts' '/etc/passwd' '/usr/include/linux/elf.h'`, render them as an indented tree like (`_` represents a space):

etc
_hosts
_passwd
usr
_include
__linux
___elf.h
 
@ngn no multi-line markdown.
 
ngn
@Adám yeah, why am I even trying to format it...
my current best: 36 bytes in k, 41 in apl
 
@ngn 22 in APL.
 
ngn
@Adám wow, how?
 
⎕←↑↑,/'/'(('_',⊢)\≠⊆⊢)¨ '/etc/hosts' '/etc/passwd' '/usr/include/linux/elf.h'
Oh, the bot died.
@ngn So, ↑↑,/'/'(('_',⊢)\≠⊆⊢)¨⎕
 
ngn
10:35 PM
@Adám you have "etc" twice tio.run/##SyzI0U2pTMzJT/8PBI/…
 
@ngn Oops. Sorry.
 
ngn
@Adám I cut mine down to 38 bytes (apl)
 
@ngn Will you show me or do I have to go even later to bed?
 
ngn
@Adám just a moment...
↑,/↑⌽¨{'_'}\∘⌽¨∪⊃,/,\¨⊂¨¨'/'(1↓¨=⊂⊢)¨⎕
 
@ngn 1↓¨=⊂≠⊆ ?
 
ngn
10:42 PM
@Adám hm, I suspected something wasn't right with my []ml, I can never remember which does what
@Adám nice, so 35
 
@ngn That only works if the arguments are passed in the right order. (I don't know if that was your intention)
 
@ngn Just stick with ⎕ML←1 unless you need Type.
 
ngn
@H.PWiz it was, though indeed I should have mentioned it
 
Btw, I recently learned that bracket-axis for Mix in ⎕ML←3 treats [k] as [k-2÷⍨k=⌈k].
 
ngn
@Adám so, if k is a whole number, it reduces it by 0.5 ?
@Adám I've no idea what that means. Laminate?
 
10:55 PM
@ngn Yes. k is supposed to indicate between which axes a new axis is inserted (like ,[k]), so a whole number doesn't really make sense, but IBM chose to let a whole mean "before this", I guess.
@ngn Somrething like that, yeah. I've never used it myself, but I guess it is useful to laminate more than two arrays.
 
ngn
@Adám "laminate" is a fancy word for ,[k+0.5]
 
In fact, the ⎕ML←3 bracket-axis Mix can do even more; it can select positions of all the axes upon lamination, kind of like a b c⍉ and ,[k l m] had a baby.
I also learned today that replicate is not exactly the same in APL2 and in Dyalog APL.
 
ngn
@Adám what's the difference? (not that I know much about APL2)
 
@ngn In Dyalog APL, 1 ¯3 2/4 5 6 gives 4 0 0 0 6 6, but in APL2, 1 ¯3 2/4 6 gives 4 0 0 0 6 6. Each treats the other's expression as a length error.
@ngn In other words, Dyalog lets negative numbers "consume" data, while IBM doesn't.
 
ngn
@Adám so IBM's / is like Dyalog's \
 
11:07 PM
@ngn Yes. And IBM's \ only allows Boolean s.
@ngn Seems Dyalog provides both, while IBM only provides one (and a half).
 
ngn
@Adám Dyalog's APL impl also has the advantage of being still alive :)
@Adám Have you thought about reduce on two axes? f/[k l]
 
@ngn True. So maybe we should relax our primitives to ease migration? / can easily and unambiguously determine whether the user wants Dyalog or IBM behaviour.
@ngn In which order would that work? First on k and then on l?
 
ngn
@Adám oh no, there are two many knobs and switches to change the primitives' behaviour
@Adám on both at the same time :)
 
@ngn It wouldn't require any setting at all. Remember, both definitions will cause a length error for the other's argument. I.e. if length error → other definition.
 
ngn
@Adám let me explain: relatively often I encounter dynamic programming problems in which, let's say, a cell in a matrix depends on the cell above and the cell to the left
a simple example is Levenshtein distance
so reduction or scan on two axes would apply a dyadic function on two neighbours to produce the value for the current cell
 
11:19 PM
@ngn I'm sorry, I don't understand English, can you say it in APL?
 
ngn
@Adám a[i;j] ← a[i-1;j] f a[i;j-1]
 
@ngn {⍵[2;1] f ⍵[1;2]}⌺3 3 ?
 
ngn
@Adám that's not the same
@Adám with ⌺ the result depends only on the neighbours
 
@ngn Ah, you mean to calculate as a wave from the top left?
 
ngn
@Adám with f/[k l] it would depend transitively on all cells to the left and top
@Adám yeah, like a wave
 
11:24 PM
@ngn And the top and left edges would stay unmodified?
 
ngn
@Adám yes, just like with scan and reduce the first item remains unmodified
 
@ngn Sounds more like a candidate for \[k l].
 
ngn
@Adám \ [k l] if you want the whole matrix, /[k l] if you want only the bottom-right cell
 
@ngn Ah, yes, that makes sense, but how do extend this to rank≥2?
f/neighbours ?
 
ngn
@Adám rank 2 not hard enough? :)
 
11:28 PM
@ngn No, not now that you've explained it.
 
ngn
I think even for rank 2 it makes sense to have f as a triadic function, so it could have a[i;j] as input too
I mean the original a[i;j] from the input matrix
if f is not triadic, only the top row and left col will matter in the input
 
@ngn Generalising this sounds more like an operator similar to f⌺, but applying f as a wave rather than at once everywhere.
 
ngn
@Adám yeah, it does
 
@ngn But really there are a bunch of options. Why wave from top-left? Why not from bottom-right, or from left, or from edges-in?
 
ngn
the way I do that now is with some combination of ⌺ and ⍣≡
@Adám well, you could ask the same questions about / and \ on a single axis
 
11:34 PM
@ngn Yes, but at least usage of and/or will give you all the possibilities.
 
ngn
@Adám isn't that also true for 2 axes?
 
@ngn Not if you want to select from-corner(s) or from-edge(s).
 
ngn
@Adám ok, never mind, let's say I only care about left-to-right, top-to-bottom
 
Just today I made the first draft of my operator suggestions for 18.0. f⍤g f⍥g f⍢g f⍥m n¨ n⍤m n⍥m. Can you guess them all?
 
ngn
@Adám I can't even guess one :)
@Adám but I must have gone to bed a couple of hours ago... can we continue this tomorrow or later?
 
11:40 PM
@ngn Or whenever. Sleep well and care.
 
ngn
@Adám thanks, same
 

« first day (454 days earlier)      last day (2190 days later) »