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

Ven
Ven
08:38
@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
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
Ven
Oh, ok, thanks.
 
3 hours later…
11:55
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
@EriktheOutgolfer Roger Hui informed me that Scan was introduced in APLSV around 1973 or so.
12:52
@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
Ven
13:35
Oh, that post on reddit reminded me of the discussion last week.
 
2 hours later…
15:29
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
ngn
22:20
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
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
ngn
@Adám wow, how?
⎕←↑↑,/'/'(('_',⊢)\≠⊆⊢)¨ '/etc/hosts' '/etc/passwd' '/usr/include/linux/elf.h'
Oh, the bot died.
@ngn So, ↑↑,/'/'(('_',⊢)\≠⊆⊢)¨⎕
ngn
ngn
22:35
@Adám you have "etc" twice tio.run/##SyzI0U2pTMzJT/8PBI/…
@ngn Oops. Sorry.
ngn
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
ngn
@Adám just a moment...
↑,/↑⌽¨{'_'}\∘⌽¨∪⊃,/,\¨⊂¨¨'/'(1↓¨=⊂⊢)¨⎕
@ngn 1↓¨=⊂≠⊆ ?
ngn
ngn
22:42
@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
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
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?
22:55
@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
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
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
ngn
@Adám so IBM's / is like Dyalog's \
23:07
@ngn Yes. And IBM's \ only allows Boolean s.
@ngn Seems Dyalog provides both, while IBM only provides one (and a half).
ngn
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
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
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
23:19
@ngn I'm sorry, I don't understand English, can you say it in APL?
ngn
ngn
@Adám a[i;j] ← a[i-1;j] f a[i;j-1]
@ngn {⍵[2;1] f ⍵[1;2]}⌺3 3 ?
ngn
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
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
23:24
@ngn And the top and left edges would stay unmodified?
ngn
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
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
ngn
@Adám rank 2 not hard enough? :)
23:28
@ngn No, not now that you've explained it.
ngn
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
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
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
23:34
@ngn Yes, but at least usage of and/or will give you all the possibilities.
ngn
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
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
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?
23:40
@ngn Or whenever. Sleep well and care.
ngn
ngn
@Adám thanks, same

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