Higher order functions and templates

24 views
Skip to first unread message

Mike Jones

unread,
Jan 3, 2016, 8:19:03 PM1/3/16
to ats-lang-users
The introduction has this statement:

In ATS2, linear closure-functions become much less important as programming with higher-order functions in a setting without GC can be more conveniently achieved through the use of templates.

I'm struggling to know why this conclusion. A higher order function takes a function as an argument, which is just a closure, or closure with no values in an environment. I can see that templates add flexibility in the signature of the closure as the template can take compatible parameters and be more generic, such as a generic map function.

But I don't understand how this makes closures less important.

Message has been deleted
Message has been deleted

gmhwxi

unread,
Jan 3, 2016, 8:41:57 PM1/3/16
to ats-lang-users

Maybe the last example on the homepage of ats-lang could shed some light:

http://www.ats-lang.org/

Mike Jones

unread,
Jan 3, 2016, 9:11:17 PM1/3/16
to ats-lang-users
Does the implement in a where clause only work for templates?

Mike Jones

unread,
Jan 3, 2016, 9:12:56 PM1/3/16
to ats-lang-users
And I assume the implement can't capture values like a closure because it has to compile everything up front. Correct?

Hongwei Xi

unread,
Jan 3, 2016, 9:33:41 PM1/3/16
to ats-lan...@googlegroups.com
You are right. It cannot.


On Sun, Jan 3, 2016 at 9:12 PM, Mike Jones <proc...@gmail.com> wrote:
And I assume the implement can't capture values like a closure because it has to compile everything up front. Correct?

--
You received this message because you are subscribed to the Google Groups "ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ats-lang-user...@googlegroups.com.
To post to this group, send email to ats-lan...@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/6b75bdc8-619b-4295-af73-91f1b3c98a11%40googlegroups.com.

Mike Jones

unread,
Jan 3, 2016, 9:58:23 PM1/3/16
to ats-lang-users
And the implements functions must be templates? I'll guess yes, because template is a natural thing to expand.
Can the function around the implementations be a non template? I'll guess no, because the inner expansion probably relies on an outer expansion.

Where expand means instance.

gmhwxi

unread,
Jan 3, 2016, 10:23:41 PM1/3/16
to ats-lang-users

>>Can the function around the implementations be a non template?

Yes, it can be a non-template function.

It is very often that you want to implement a template inside a
non-template function. In this way, the template function gets to
access to the arguments of the non-template function.

Please take a look at wordcnt2.dats at the word-counting example:

http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/

Using templates properly can greatly reduce complexity in programming.

Say someone is asked to implement the following example involving some drawing:

http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/Sierpinski-3angle/Sierpinski-3angle.html

Most likely, the person would immediately think about the canvas. In my opinion, the person should
focus on drawing and forget about the canvas for a while. This is very easy to achieve with templates.

Having too much stuff on one's mind clutters the mind.
Reply all
Reply to author
Forward
0 new messages