Re[9]: lambda являются first class citizens?
От: _NN_ www.nemerleweb.com
Дата: 14.05.18 19:52
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, uzhas, Вы писали:


U>>да: https://wandbox.org/permlink/oEFfJUfH0z0CuoBh

U>>твой тернарный оператор не имеет никакого отношения к first-class. иди вики почитай уже или внятно объясни, где ты видишь несостыковки с понятием first-class
_>

_>Michael L. Scott, Programming Language Pragmatics, 3-rd ed., ELSEVIER 2011
_>ISBN 13: 978-0-12-374514-9

_>Page:154

_>3.6.2 First-Class Values and Unlimited Extent

_>In general, a value in a programming language is said to have
_>first-class status if it can be passed as a parameter, returned from a subroutine, or assigned into a variable.
_>Simple types such as integers and characters are first-class values in most programming languages.
_>By contrast, a
_>“second-class” value can be passed as a parameter, but not returned from a subroutine or assigned into a variable,
_>and a
_>“third-class” value cannot even be passed as a parameter.


Попробуем по порядку.

first-class status if it can be passed as a parameter,


#include <iostream>
#include <memory>
using namespace std;

void f(auto) {}

int main()
{
    f([]{});
}


returned from a subroutine, or assigned into a variable

#include <iostream>
#include <memory>
using namespace std;

auto f() { return []{return 1;}; } // returned from a subroutine

int main()
{
    auto l = f(); // assigned into a variable
    return l();
}


Приведённые требования выполняются.
Значит по мнению Michael L. Scott лямбды first-class values
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.