Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Oct 20 2019 22:59
    @dockimbel banned @SmackMacDougal
  • Dec 03 2017 05:53
    @PeterWAWood banned @matrixbot
  • Sep 28 2016 12:19
    @PeterWAWood banned @TimeSeriesLord
  • Aug 13 2016 03:23
    @PeterWAWood banned @Vexercizer
Vladimir Vasilyev
@9214
@nedzadarek it's not like /local, it's the exact opposite.
function does a deep-traversal and localizes all set-words it sees, /extern is a way to say which set-words should not be localized.
nedzadarek
@nedzadarek
@9214 I mean.. syntactically (?) - you use it in the spec like /local vars.
Vladimir Vasilyev
@9214
@nedzadarek it's called a refinement though. Both /local and /extern are refinements.
Except that you can't use /extern after function creation.
nedzadarek
@nedzadarek
Yes, /local and /extern are values of type refinement!. However when you use function!s you expect usage like this <name of function>/refinement1/refinement2 var1 var2 ref1-var1 ref2-var1.
Vladimir Vasilyev
@9214
And..?
nedzadarek
@nedzadarek
It's just little misleading. Never mind. btw. do you know other function that use pattern like (function functtion-name [var /ref ...] body?
Vladimir Vasilyev
@9214
Red have built-in function, func, does and has function constructors, if that's what you mean.
This spec format is a dialect, specific for everything that inherits make function! ...
nedzadarek
@nedzadarek
@9214 No, I mean functions that use refinement!. Not like this: foo/ref1/ref2 .... But like this: foo [var /ref1 something something-else /ref2 another-thing] some-var.
Vladimir Vasilyev
@9214
@nedzadarek have you read what I said about function spec dialect?
You can build function constructor yourself, and make it use the same format or a newly designed one (@rebolek has a couple of examples for that).
nedzadarek
@nedzadarek
@9214 Yes, I read it. It's (mini) dialect. I wonder if (and how) other people use that too.
I have seen that rebolek's work.
Boleslav Březovský
@rebolek
function constructors FTW!
Vladimir Vasilyev
@9214
@nedzadarek other people (including you) use it regularly whenever they create a new function with func or function.
nedzadarek
@nedzadarek
@9214 I mean... beside func or function.
Vladimir Vasilyev
@9214
Jeez, have you read what I said?
does and has are just shortcuts, there're no other natives that use this dialect.
nedzadarek
@nedzadarek
Ok, so If understand it correctly no other built-in function uses refinement! (in mini-dialect)?
Vladimir Vasilyev
@9214
@nedzadarek there are no other built-in function constructors, aside from func and function (skipping does and has here), hence there's no other functions that use the spec dialect.
Except maybe for make itself.
nedzadarek
@nedzadarek
@9214 Great info! Thank you.
It seems refinement! is not used by many things after you create things (func/function/make etc.).
With foo: func [/a /b /c] [42], foo/a/b/c is just a path!; when it's executed, Red will just create 3 variables (a, b and c).
Vladimir Vasilyev
@9214

Red will just create 3 variables

it won't create anything (especially "variables")

The value of these words inside function's context will be changed from false to true if you supply them as refinements.
nedzadarek
@nedzadarek
Yes, that what I mean... in less technical way.
Vladimir Vasilyev
@9214
So as with refinement arguments, they'll change from default none to the value that you supplied.
It's not a technical way, it's how language works. You keep confusing yourself and others with false concepts and mental models.
nedzadarek
@nedzadarek
I'm not confused. It's just in that example it really didn't matter whenever or not a, b and c existed. If that confused someone - I'm sorry.
Boleslav Březovský
@rebolek
Every word declared in function header exists in function context.
Vladimir Vasilyev
@9214
@nedzadarek what you said in "Red will just create 3 variables ..." I interpreted as "Red will populate global context with 3 new words set to some value".
nedzadarek
@nedzadarek
@9214 Well... you are right. I just assumed "local variables" by saying "variables". My bad. Sorry for confusion!
Vladimir Vasilyev
@9214
@rebolek do I sound like a pedant to you?
Anyway, once more with pedantry - words, not variables!
Boleslav Březovský
@rebolek
@9214 yes, but is that wrong?
9214 @9214 shrugs
nedzadarek
@nedzadarek
Are the word... no... the term "variables" wrong? I mean word doesn't have to refer to some value (reduce first [w]; *** Script Error: w has no value).
Vladimir Vasilyev
@9214
@nedzadarek variables are direct 1-to-1 mapping between some identifier and some value, words are indirect, they always refer to some context, not to the value.
nedzadarek
@nedzadarek
But they refer to value in some context. For example bind bl: [print a] c: context [a: 42], word a in the block bl refers to the the identifier a in the context c.
Boleslav Březovský
@rebolek
Vladimir Vasilyev
@9214
@rebolek we're doomed.
nedzadarek
@nedzadarek
:sparkles:
Nenad Rakocevic
@dockimbel
Yes, Carl used the name "variable" to make it easier to understand for newcomers. Though, I think that is misleading, as most newcomers will think words are like the "variables" they know about in other languages. That's why I'm rather in favor of telling people from the start that word <> "variable", in order to draw their attention to the specific way values are referenced by symbols in Redbol.
Vladimir Vasilyev
@9214
@nedzadarek "But they refer to value in some context" - it's a re-phrasal of what I said. Word refers to a context, and word's binding always resolves to one symbol.
Whenever someone says "variable" they automatically imply lexical or dynamic scopes that comes with them from other languages, and confusion starts.
Scopes imply some "meaning hierarchy" for variables, and that's not the case in Redbol - there's no hierarchy, there're only namespaces (contexts), completely separated one from another.
nedzadarek
@nedzadarek
@9214 it's not re-phrasal. You can store variables however you want (array, map, tree) but you still get 1 to 1 mapping.
Vladimir Vasilyev
@9214
@nedzadarek I don't understand what you're saying.