Here's a neat test of programming language expressiveness: Can you write a function PrintXY taking an integer n>=0 that prints all strings of length n containing only the characters 'X' and 'Y'? Can you do it without recursion, and without assuming n<=64? Is it readable?
-
Show this thread
-
Replying to @TimSweeneyEpic
eh, jesus christ that one's messy. in scopes i would have to work with vectors of bits, and write a custom adder for this. particularly that `n` can be infinitely big makes this challenge quite awful.
1 reply 0 retweets 0 likes -
Replying to @paniq @TimSweeneyEpic
L. 😷. Ritter Retweeted Tim Sweeney
and your particular syntax hides the fact that there's an embedded inc by 1 that operates on a buffer of arbitrary size. and what magic is 'X' .. 'Y' supposed to do? what are we returning here? what is the type of those expressions?https://twitter.com/TimSweeneyEpic/status/1265457474510913537 …
L. 😷. Ritter added,
2 replies 0 retweets 0 likes -
Replying to @paniq
“for(a) do b” produces an array by iterating over each choice of a (possibly binding variables there) and adding the element b (possibly referencing variables in a, and possibly introducing new choice backtracking points upon each iteration).
2 replies 0 retweets 1 like -
Replying to @TimSweeneyEpic @paniq
The power of this comes from backtracking being delimited to the domain of the ‘for’. The expression a backtracks and produces new choices in that domain, while the range b contributes its choices to the surrounding context.
1 reply 0 retweets 1 like -
Replying to @TimSweeneyEpic @paniq
This particular programming challenge is just a funny example. You could also write if(as[i:int]==3) then... else ..., which binds i to the first element of the array as that equals 3, or takes the else-branch if none. Functional logic gives you finite search everywhere.
1 reply 0 retweets 2 likes -
Replying to @TimSweeneyEpic
sounds more like sugar to me. tbh as a systems programmer, none of these make things particularly clearer to me. i was hoping this multidimensional range building business could be a solution to parallelization semantics that i'm not seeing yet, but it's just hiding a lot.
1 reply 0 retweets 0 likes -
Replying to @paniq @TimSweeneyEpic
like, i don't know how to look at the code above and reason from that what the LLVM IR will look like.
1 reply 0 retweets 0 likes -
Replying to @paniq @TimSweeneyEpic
and i don't even think it's going to execute what you think it will execute... for example where is the "\n" between the "YYNNNYNYN" lines? this one looks like it's either going to print a single "Y" per line, or just one long sequence of Y's and N's
1 reply 0 retweets 0 likes -
Replying to @paniq
This is BASIC style print with a built-in newline. The “result” variable is produced by “for”, so it’s an array with an element for each choice in the domain, with choices being backtracked in sequence: the earliest is the outermost backtrack. An array of characters is a string.
2 replies 0 retweets 2 likes
The power here comes from the compositionality of choice, failure, and backtracking to drive looping, searching, and collection formation instead of mutable variable updates or Haskell style higher order functions (sugared by comprehensions).
-
-
Replying to @TimSweeneyEpic @paniq
Is it syntactic sugar? No: Even though very simple cases are optimizable down to ordinary loops, the ability to introduce backtrack points, to unify, and fail is can be completely dynamic.
0 replies 0 retweets 1 likeThanks. Twitter will use this to make your timeline better. UndoUndo
-
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.