YSTest: NPL::A1::Forms 命名空间参考

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 命名空间列表
- 命名空间成员

类 | 函数
NPL::A1::Forms 命名空间参考

NPLA1 语法形式对应的功能实现。 更多...

## 类

struct | BinaryAsExpansion
struct | BinaryExpansion
struct | UnaryAsExpansion
struct | UnaryExpansion
| 保存函数展开调用的函数对象。 更多...

## 函数

YF_API bool | IsSymbol (const string &) ynothrow
| 判断字符串值是否可构成符号。 更多...
template<typename _type , typename _func , typename... _tParams>
void | CallBinaryFold (_func f, _type val, TermNode &term, _tParams &&...args)
| 访问节点并以指定的初始值为基础逐项调用二元函数。 更多...
YF_API void | Undefine (TermNode &, ContextNode &, bool)

移除名称绑定。

异常

  BadIdentifier | 非强制时移除不存在的名称。

更多...

YF_API ReductionStatus | If (TermNode &, ContextNode &)
| 条件判断：根据求值的条件取表达式。 更多...
YF_API void | CallSystem (TermNode &)
| 调用 UTF-8 字符串的系统命令，并保存 int 类型的结果到项的值中。 更多...
YF_API ReductionStatus | Cons (TermNode &)
| 接受两个参数，返回以第一个参数作为首项插入第二个参数创建的新的列表。 更多...
YF_API void | MakeEnvironment (TermNode &)

创建以参数指定的环境列表作为父环境的新环境。

异常

  NPLException | 异常中立：由 Environment 的构造函数抛出。

更多...

YF_API void | GetCurrentEnvironment (TermNode &, ContextNode &)
| 取包含当前环境的上下文引用。 更多...
YF_API ReductionStatus | ValueOf (TermNode &, const ContextNode &)
| 求值标识符得到指称的实体。 更多...
YF_API TokenValue | StringToSymbol (const string &)
| 创建等于指定字符串值的记号值。 更多...
YF_API const string & | SymbolToString (const TokenValue &) ynothrow
| 取符号对应的名称字符串。 更多...
| PDefH (ReductionStatus, Retain, const TermNode &term) ynothrowv ImplRet(AssertBranch(term)
| 保留项：保留求值。 更多...
ReductionStatus::Retained YF_API size_t | RetainN (const TermNode &, size_t=1)
| 保留经检查确保具有指定个数参数的项：保留求值。 更多...
template<typename _func >
auto | CheckSymbol (string_view n, _func f) -> decltype(f())
| 检查记号值是符合匹配条件的符号。 更多...
template<typename _func >
auto | CheckParameterLeafToken (string_view n, _func f) -> decltype(f())
| 检查记号值是符合匹配条件的参数符号。 更多...
YF_API void | BindParameter (ContextNode &, const TermNode &, TermNode &)
| 使用操作数结构化匹配并绑定参数。 更多...
YF_API void | MatchParameter (const TermNode &, TermNode &, std::function< void(TNIter, TNIter, const TokenValue &)>, std::function< void(const TokenValue &, TermNode &&)>)

匹配参数。

异常

  std::bad_function | 异常中立：参数指定的处理器为空。

更多...

template<typename _func , typename... _tParams>
void | CallUnary (_func &&f, TermNode &term, _tParams &&...args)
| 访问节点并调用一元函数。 更多...
template<typename _type , typename _func , typename... _tParams>
void | CallUnaryAs (_func &&f, TermNode &term, _tParams &&...args)
template<typename _func , typename... _tParams>
void | CallBinary (_func &&f, TermNode &term, _tParams &&...args)
| 访问节点并调用二元函数。 更多...
template<typename _type , typename _func , typename... _tParams>
void | CallBinaryAs (_func &&f, TermNode &term, _tParams &&...args)
template<typename _func >
void | RegisterStrictUnary (ContextNode &ctx, const string &name, _func f)
| 注册一元严格求值上下文处理器。 更多...
template<typename _type , typename _func >
void | RegisterStrictUnary (ContextNode &ctx, const string &name, _func f)
template<typename _func >
void | RegisterStrictBinary (ContextNode &ctx, const string &name, _func f)
| 注册二元严格求值上下文处理器。 更多...
template<typename _type , typename _func >
void | RegisterStrictBinary (ContextNode &ctx, const string &name, _func f)
YF_API void | DefineLazy (TermNode &, ContextNode &)

定义。

异常

  ParameterMismatch | 绑定匹配失败。

更多...

YF_API void | DefineWithNoRecursion (TermNode &, ContextNode &)
YF_API void | DefineWithRecursion (TermNode &, ContextNode &)
YF_API void | Lambda (TermNode &, ContextNode &)
| λ 抽象：求值为一个捕获当前上下文的严格求值的函数。 更多...
YF_API void | Vau (TermNode &, ContextNode &)
| vau 抽象：求值为一个捕获当前上下文的非严格求值的函数。 更多...
YF_API void | VauWithEnvironment (TermNode &, ContextNode &)
| 带环境的 vau 抽象：求值为一个捕获当前上下文的非严格求值的函数。 更多...
YF_API ReductionStatus | And (TermNode &, ContextNode &)
| 逻辑与。 更多...
YF_API ReductionStatus | Or (TermNode &, ContextNode &)
| 逻辑或。 更多...
YF_API void | EqualReference (TermNode &)
| 比较两个子项的值相等。 更多...
YF_API void | EqualValue (TermNode &)
| 比较两个子项的值相等。 更多...
YF_API ReductionStatus | Eval (TermNode &, ContextNode &)
| 对指定项按指定的环境求值。 更多...
YF_API void | EvaluateUnit (TermNode &, const REPLContext &)
| 创建参数指定的 REPL 的副本并在其中对翻译单元规约以求值。 更多...
YF_API ContextHandler | Wrap (const ContextHandler &)
| 包装合并子为应用子。 更多...
YF_API ContextHandler | WrapOnce (const ContextHandler &)

异常

  NPLException | 类型不符合要求。

更多...

YF_API ContextHandler | Unwrap (const ContextHandler &)
| 从应用子中取操作子。 更多...

## 详细描述

NPLA1 语法形式对应的功能实现。

自从
  build 732

## 函数说明

ReductionStatus NPL::A1::Forms::And | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

逻辑与。

参见
  ReduceChecked

自从
  build 754

非严格求值若干个子项，返回求值结果的逻辑与： 除第一个子项，没有其它子项时，返回 true ；否则从左到右逐个求值子项。 当子项全求值为 true 时返回最后一个子项的值，否则返回 false 。 参考调用文法： $and? <test>...

在文件 NPLA1.cpp 第 1312 行定义.

void NPL::A1::Forms::BindParameter | ( | ContextNode & | ctx,
|  | const TermNode & | t,
|  | TermNode & | o
| ) |  |

使用操作数结构化匹配并绑定参数。

注解
  不具有强异常安全保证。匹配失败时，其它的绑定状态未指定。

参见
  LiftToSelf

自从
  build 776

递归遍历参数和操作数树进行结构化匹配。 若匹配失败，则抛出异常。 进行其它操作前，对操作数调用 LiftToSelf 处理，但不处理形式参数。

异常

  ArityMismatch | 子项数匹配失败。

注解
  第一参数指定的上下文决定绑定的环境。

参见
  MatchParameter

形式参数和操作数为项指定的表达式树。 第二参数指定形式参数，第三参数指定操作数。 进行匹配的算法递归搜索形式参数及其子项，要求参见 MatchParameter 。 若匹配成功，在第一参数指定的环境内绑定未被忽略的匹配的项。 对结尾序列总是匹配前缀为 . 的符号为目标按以下规则忽略或绑定： 子项为 . 时，对应操作数的结尾序列被忽略； 否则，绑定项的目标为移除前缀 . 后的符号。 非列表项的绑定使用以下规则： 若匹配成功，在第一参数指定的环境内绑定未被忽略的匹配的非列表项。 匹配要求如下： 若项是 #ignore ，则忽略操作数对应的项； 若项的值是符号，则操作数的对应的项应为非列表项。

在文件 NPLA1.cpp 第 1069 行定义.

参考 ystdex::begins_with(), CheckParameterLeafToken(), platform::Deref(), NPL::LiftToSelf, YSLib::MakeIndex, MatchParameter() , 以及 YSLib::YAssert().

参考自 DefineLazy(), DefineWithNoRecursion() , 以及 DefineWithRecursion().

函数调用图:

这是这个函数的调用关系图:
template<typename _func , typename... _tParams>

void NPL::A1::Forms::CallBinary | ( | _func && | f,
|  | TermNode & | term,
|  | _tParams &&... | args
| ) |  |

访问节点并调用二元函数。

自从
  build 760

在文件 NPLA1.h 第 1087 行定义.

参考 CHRLib::args, platform::Deref(), CHRLib::f(), YSLib::i, ystdex::invoke_nonvoid(), RetainN(), NPL::x , 以及 yforward.

函数调用图:
template<typename _type , typename _func , typename... _tParams>

void NPL::A1::Forms::CallBinaryAs | ( | _func && | f,
|  | TermNode & | term,
|  | _tParams &&... | args
| ) |  |

在文件 NPLA1.h 第 1101 行定义.

参考 CHRLib::args, platform::Deref(), CHRLib::f(), YSLib::i, ystdex::invoke_nonvoid(), RetainN(), NPL::x , 以及 yforward.

函数调用图:
template<typename _type , typename _func , typename... _tParams>

void NPL::A1::Forms::CallBinaryFold | ( | _func | f,
|  | _type | val,
|  | TermNode & | term,
|  | _tParams &&... | args
| ) |  |

访问节点并以指定的初始值为基础逐项调用二元函数。

注解
  为支持 std::bind 推断类型，和以上函数的情形不同，不支持省略参数。

自从
  build 758

在文件 NPLA1.h 第 1121 行定义.

参考 CHRLib::args, ystdex::bind1(), platform::Deref(), NPL::A1::FetchArgumentN, YSLib::i , 以及 yforward.

函数调用图:

void NPL::A1::Forms::CallSystem | ( | TermNode & | term | ) |

调用 UTF-8 字符串的系统命令，并保存 int 类型的结果到项的值中。

参见
  usystem

自从
  build 741

参考调用文法： system <string>

在文件 NPLA1.cpp 第 1325 行定义.

参考 NPL::c_str(), ystdex::compose() , 以及 platform::usystem().

函数调用图:
template<typename _func , typename... _tParams>

void NPL::A1::Forms::CallUnary | ( | _func && | f,
|  | TermNode & | term,
|  | _tParams &&... | args
| ) |  |

访问节点并调用一元函数。

参见
  YSLib::EmplaceCallResult

自从
  build 756

确定项具有一个实际参数后展开调用参数指定的函数。 若被调用的函数返回类型非 void ，返回值作为项的值被构造。 调用 YSLib::EmplaceCallResult 对 ValueObject 及引用值处理不同。 若需以和其它类型的值类似的方式被包装，在第一个参数中构造 ValueObject 对象。

在文件 NPLA1.h 第 1059 行定义.

参考 CHRLib::args, platform::Deref(), CHRLib::f(), ystdex::invoke_nonvoid(), RetainN() , 以及 yforward.

参考自 CallUnaryAs().

函数调用图:

这是这个函数的调用关系图:
template<typename _type , typename _func , typename... _tParams>

void NPL::A1::Forms::CallUnaryAs | ( | _func && | f,
|  | TermNode & | term,
|  | _tParams &&... | args
| ) |  |

在文件 NPLA1.h 第 1069 行定义.

参考 CHRLib::args, CallUnary(), CHRLib::f() , 以及 yforward.

函数调用图:
template<typename _func >

auto NPL::A1::Forms::CheckParameterLeafToken | ( | string_view | n,
|  | _func | f
| ) |  | -> decltype(f())

检查记号值是符合匹配条件的参数符号。

在文件 NPLA1.h 第 982 行定义.

参考 CheckSymbol() , 以及 CHRLib::f().

参考自 BindParameter().

函数调用图:

这是这个函数的调用关系图:
template<typename _func >

auto NPL::A1::Forms::CheckSymbol | ( | string_view | n,
|  | _func | f
| ) |  | -> decltype(f())

检查记号值是符合匹配条件的符号。

异常

  ParameterMismatch | 匹配失败。

前置条件
  断言：字符串参数的数据指针非空。

自从
  build 794

在文件 NPLA1.h 第 970 行定义.

参考 CHRLib::f().

参考自 CheckParameterLeafToken().

函数调用图:

这是这个函数的调用关系图:

ReductionStatus NPL::A1::Forms::Cons | ( | TermNode & | term | ) |

接受两个参数，返回以第一个参数作为首项插入第二个参数创建的新的列表。

返回
  ReductionStatus::Retained 。

异常

  InvalidSyntax | 第二个参数不是列表。

注解
  NPLA 无 cons 对，所以要求创建的总是列表。

自从
  build 779

参考调用文法： cons <object>

在文件 NPLA1.cpp 第 1332 行定义.

参考 platform::Deref(), YSLib::GetLastIndexOf(), YSLib::i, NPL::IsList, YSLib::MakeIndex, CHRLib::p(), YSLib::RemoveHead(), RetainN() , 以及 platform::tail.

函数调用图:

void NPL::A1::Forms::DefineLazy | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

定义。

异常

  ParameterMismatch | 绑定匹配失败。

前置条件
  间接断言：第一参数指定的项是枝节点。

异常

  InvalidSyntax | 绑定的源为空。

参见
  BindParameter
  Vau

自从
  build 780

实现修改环境的特殊形式。 使用 <definiend> 指定绑定目标，和 Vau 的 <formals> 格式相同。 剩余表达式 <expressions> 指定绑定的源。 返回未指定值。 限定第三参数后可使用 RegisterForm 注册上下文处理器。

注解
  不对剩余表达式进一步求值。

剩余表达式视为求值结果，直接绑定到 <definiend> 。 参考调用文法： $deflazy! <definiend> <expressions>

在文件 NPLA1.cpp 第 1187 行定义.

参考 BindParameter().

函数调用图:

void NPL::A1::Forms::DefineWithNoRecursion | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

注解
  不支持递归绑定。

剩余表达式视为一个表达式进行求值后绑定到 <definiend> 。 参考调用文法： $def! <definiend> <expressions>

在文件 NPLA1.cpp 第 1195 行定义.

参考 BindParameter() , 以及 NPL::A1::ReduceChecked().

函数调用图:

void NPL::A1::Forms::DefineWithRecursion | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

注解
  支持直接递归和互相递归绑定。

解析可能递归绑定的名称，剩余表达式视为一个表达式进行求值后绑定到 <definiend> 。 $defrec! <definiend> <expressions>

在文件 NPLA1.cpp 第 1204 行定义.

参考 BindParameter(), NPL::ContextNode::GetRecordRef() , 以及 NPL::A1::ReduceChecked().

函数调用图:

void NPL::A1::Forms::EqualReference | ( | TermNode & | term | ) |

比较两个子项的值相等。

自从
  build 748

参见
  YSLib::HoldSame

参考调用文法： eq? <object1> <object2>

在文件 NPLA1.cpp 第 1372 行定义.

void NPL::A1::Forms::EqualValue | ( | TermNode & | term | ) |

比较两个子项的值相等。

参见
  YSLib::ValueObject

参考调用文法： eqv? <object1> <object2>

在文件 NPLA1.cpp 第 1378 行定义.

ReductionStatus NPL::A1::Forms::Eval | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

对指定项按指定的环境求值。

自从
  build 787

参见
  ResolveEnvironment

以表达式 <expression> 和环境 <environment> 为指定的参数进行求值。 环境以 ContextNode 的引用表示。 参考调用文法： eval <expression> <environment>

在文件 NPLA1.cpp 第 1384 行定义.

参考 CHRLib::c, platform::Deref(), YSLib::i, NPL::LiftToOther(), NPL::A1::Reduce(), NPL::A1::ResolveEnvironment() , 以及 RetainN().

函数调用图:

void NPL::A1::Forms::EvaluateUnit | ( | TermNode & | term,
|  | const REPLContext & | ctx
| ) |  |

创建参数指定的 REPL 的副本并在其中对翻译单元规约以求值。

自从
  build 772

在文件 NPLA1.cpp 第 1397 行定义.

参考 NPL::A1::REPLContext::Perform().

函数调用图:

void NPL::A1::Forms::GetCurrentEnvironment | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

取包含当前环境的上下文引用。

警告
  返回的值无所有权，应注意在生存期内使用以保证内存安全。

自从
  build 785

取指向当前环境的指针。取得的宿主值类型为 weak_ptr<Environment> 。 参考调用文法： () get-current-environment

在文件 NPLA1.cpp 第 1427 行定义.

参考 RetainN() , 以及 NPL::ContextNode::WeakenRecord.

函数调用图:

ReductionStatus NPL::A1::Forms::If | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

条件判断：根据求值的条件取表达式。

参见
  ReduceChecked

自从
  build 750

求值第一子项作为测试条件，成立时取第二子项，否则当第三子项时取第三子项。 参考调用文法： $if <test> <consequent> <alternate> $if <test> <consequent>

在文件 NPLA1.cpp 第 1236 行定义.

参考 platform::Deref(), YSLib::i, NPL::LiftTerm(), NPL::A1::ReduceChecked(), ystdex::size() , 以及 ystdex::value_or().

函数调用图:

bool NPL::A1::Forms::IsSymbol | ( | const string & | id | ) |

判断字符串值是否可构成符号。

自从
  build 779 参考文法：

symbol? <object>

在文件 NPLA1.cpp 第 1039 行定义.

void NPL::A1::Forms::Lambda | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

λ 抽象：求值为一个捕获当前上下文的严格求值的函数。

异常

  ParameterMismatch | 异常中立：由 BindParameter 抛出。

参见
  EvaluateIdentifier
  ExtractParameters
  MatchParameter

警告
  返回闭包调用引用变量超出绑定目标的生存期引起未定义行为。

待办事项:
  优化捕获开销。

使用 ExtractParameters 检查参数列表并捕获和绑定变量， 然后设置节点的值为表示 λ 抽象的上下文处理器。 可使用 RegisterForm 注册上下文处理器。 和 Scheme 等不同参数以项而不是位置的形式被转移，在函数应用时可能进一步求值。 按引用捕获上下文中的绑定。被捕获的上下文中的绑定依赖宿主语言的生存期规则。

自从
  build 735

捕获的静态环境由当前动态环境隐式确定。 不保留环境的所有权。 参考调用文法： $lambda <formals> <body>

在文件 NPLA1.cpp 第 1261 行定义.

参考 platform::Deref(), YSLib::i, ystdex::share_move() , 以及 NPL::A1::ToContextHandler().

函数调用图:

void NPL::A1::Forms::MakeEnvironment | ( | TermNode & | term | ) |

创建以参数指定的环境列表作为父环境的新环境。

异常

  NPLException | 异常中立：由 Environment 的构造函数抛出。

参见
  Environment::CheckParent
  EnvironmentList

自从
  build 798

待办事项:
  使用专用的异常类型。

取以指定的参数初始化新创建的父环境。 参考调用文法： make-environment <environment>...

在文件 NPLA1.cpp 第 1405 行定义.

参考 YSLib::ValueObject::emplace() , 以及 YSLib::i.

函数调用图:

void NPL::A1::Forms::MatchParameter | ( | const TermNode & | t,
|  | TermNode & | o,
|  | std::function< void(TNIter, TNIter, const TokenValue &)> | bind_trailing_seq,
|  | std::function< void(const TokenValue &, TermNode &&)> | bind_value
| ) |  |

匹配参数。

异常

  std::bad_function | 异常中立：参数指定的处理器为空。

自从
  build 786

进行匹配的算法递归搜索形式参数及其子项。 若匹配成功，调用参数指定的匹配处理器。 处理器为参数列表结尾的结尾序列处理器和值处理器，分别匹配 . 起始的项和非列表项。 结尾序列处理器传入的字符串参数表示需绑定的表示结尾序列的列表标识符。 匹配要求如下： 若项是非空列表，则操作数的对应的项应为满足确定子项数的列表： 若最后的子项为 . 起始的符号，则匹配操作数中结尾的任意个数的项作为结尾序列： 其它子项一一匹配操作数的子项； 若项是空列表，则操作数的对应的项应为空列表； 否则，匹配非列表项。

在文件 NPLA1.cpp 第 1114 行定义.

参考 platform::Deref(), YSLib::i, NPL::IsLeaf, NPL::LiftToSelf, CHRLib::p(), ystdex::sfmt(), YSLib::YAssert() , 以及 yunseq.

参考自 BindParameter().

函数调用图:

这是这个函数的调用关系图:

ReductionStatus NPL::A1::Forms::Or | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

逻辑或。

非严格求值若干个子项，返回求值结果的逻辑或： 除第一个子项，没有其它子项时，返回 false ；否则从左到右逐个求值子项。 当子项全求值为 false 时返回 false，否则返回第一个不是 false 的子项的值。 参考调用文法： $or? <test>...

在文件 NPLA1.cpp 第 1318 行定义.

NPL::A1::Forms::PDefH | ( | ReductionStatus | ,
|  | Retain | ,
|  | const TermNode & | term
| ) |  |

inline

保留项：保留求值。

前置条件
  断言：项或容器对应枝节点。

参见
  AssertBranch

自从
  build 733

注解
  保留求值留作保留用途，一般不需要被作为用户代码直接使用。

自从
  build 765

可使用 RegisterForm 注册上下文处理器，参考文法： $retain|$retainN <expression>

template<typename _func >

void NPL::A1::Forms::RegisterStrictBinary | ( | ContextNode & | ctx,
|  | const string & | name,
|  | _func | f
| ) |  |

注册二元严格求值上下文处理器。

自从
  build 760

在文件 NPLA1.h 第 1298 行定义.

参考 NPL::A1::RegisterStrict().

函数调用图:
template<typename _type , typename _func >

void NPL::A1::Forms::RegisterStrictBinary | ( | ContextNode & | ctx,
|  | const string & | name,
|  | _func | f
| ) |  |

在文件 NPLA1.h 第 1304 行定义.

参考 NPL::A1::RegisterStrict().

函数调用图:
template<typename _func >

void NPL::A1::Forms::RegisterStrictUnary | ( | ContextNode & | ctx,
|  | const string & | name,
|  | _func | f
| ) |  |

注册一元严格求值上下文处理器。

自从
  build 754

在文件 NPLA1.h 第 1279 行定义.

参考 NPL::A1::RegisterStrict().

函数调用图:
template<typename _type , typename _func >

void NPL::A1::Forms::RegisterStrictUnary | ( | ContextNode & | ctx,
|  | const string & | name,
|  | _func | f
| ) |  |

在文件 NPLA1.h 第 1285 行定义.

参考 NPL::A1::RegisterStrict().

函数调用图:

size_t NPL::A1::Forms::RetainN | ( | const TermNode & | term,
|  | size_t | m = `1`
| ) |  |

保留经检查确保具有指定个数参数的项：保留求值。

返回
  项的参数个数。

异常

  ArityMismatch | 项的参数个数不等于第二参数。

参见
  FetchArgumentN

在文件 NPLA1.cpp 第 1058 行定义.

参考 NPL::A1::FetchArgumentN.

参考自 CallBinary(), CallBinaryAs(), CallUnary(), Cons(), Eval(), GetCurrentEnvironment() , 以及 ValueOf().

这是这个函数的调用关系图:

TokenValue NPL::A1::Forms::StringToSymbol | ( | const string & | s | ) |

创建等于指定字符串值的记号值。

自从
  build 786

注解
  不检查值是否符合符号要求。

在文件 NPLA1.cpp 第 1045 行定义.

参考 CHRLib::s.

const string & NPL::A1::Forms::SymbolToString | ( | const TokenValue & | s | ) |

取符号对应的名称字符串。

在文件 NPLA1.cpp 第 1051 行定义.

参考 CHRLib::s.

void NPL::A1::Forms::Undefine | ( | TermNode & | term,
|  | ContextNode & | ctx,
|  | bool | forced
| ) |  |

移除名称绑定。

异常

  BadIdentifier | 非强制时移除不存在的名称。

异常

  InvalidSyntax | 标识符不是符号。

参见
  IsNPLASymbol
  RemoveIdentifier

自从
  build 786

移除名称和关联的值，返回是否被移除。 第三个参数表示是否强制。若非强制，移除不存在的名称抛出异常。 参考调用文法： $undef! <symbol> $undef-checked! <symbol>

在文件 NPLA1.cpp 第 1216 行定义.

参考 platform::Deref(), NPL::ContextNode::GetRecordRef(), YSLib::ValueNode::Remove , 以及 ystdex::sfmt().

函数调用图:

ContextHandler NPL::A1::Forms::Unwrap | ( | const ContextHandler & | h | ) |

从应用子中取操作子。

参考调用文法： unwrap <applicative>

在文件 NPLA1.cpp 第 1462 行定义.

参考 CHRLib::p() , 以及 ystdex::sfmt().

函数调用图:

ReductionStatus NPL::A1::Forms::ValueOf | ( | TermNode & | term,
|  | const ContextNode & | ctx
| ) |  |

求值标识符得到指称的实体。

参见
  EvaluateIdentifier

自从
  build 757

在对象语言中实现函数接受一个 string 类型的参数项，返回值为指定的实体。 当名称查找失败时，返回的值为 ValueToken::Null 。 参考调用文法： value-of <object>

在文件 NPLA1.cpp 第 1434 行定义.

参考 CatchIgnore, platform::Deref(), NPL::A1::EvaluateIdentifier(), NPL::LiftToOther(), CHRLib::CharSet::Null, RetainN() , 以及 TryRet.

函数调用图:

void NPL::A1::Forms::Vau | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

vau 抽象：求值为一个捕获当前上下文的非严格求值的函数。

注解
  动态环境的上下文参数被捕获为一个 ystdex::ref<ContextNode> 对象。
  初始化的 <eformal> 表示动态环境的上下文参数，应为一个符号或 #ignore 。

异常

  InvalidSyntax | <eformal> 不符合要求。

自从
  build 790

上下文中环境以外的数据成员总是被复制而不被转移， 以避免求值过程中继续访问这些成员引起未定义行为。

捕获的静态环境由当前动态环境隐式确定。 不保留环境的所有权。 参考调用文法： $vau <formals> <eformal> <body>

在文件 NPLA1.cpp 第 1277 行定义.

参考 platform::Deref(), YSLib::i , 以及 ystdex::share_move().

函数调用图:

void NPL::A1::Forms::VauWithEnvironment | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

带环境的 vau 抽象：求值为一个捕获当前上下文的非严格求值的函数。

参见
  ResolveEnvironment

捕获的静态环境由环境参数 <env> 求值后指定。 根据环境参数的类型为 `shared_ptr<Environment>` 或 `weak_ptr<Environment>` 决定是否保留所有权。 参考调用文法： $vaue <env> <formals> <eformal> <body>

在文件 NPLA1.cpp 第 1292 行定义.

参考 platform::Deref(), YSLib::i, NPL::A1::ReduceChecked(), NPL::A1::ResolveEnvironment() , 以及 ystdex::share_move().

函数调用图:

ContextHandler NPL::A1::Forms::Wrap | ( | const ContextHandler & | h | ) |

包装合并子为应用子。

自从
  build 785

参考调用文法： wrap <combiner>

在文件 NPLA1.cpp 第 1447 行定义.

参考 NPL::A1::ToContextHandler().

函数调用图:

ContextHandler NPL::A1::Forms::WrapOnce | ( | const ContextHandler & | h | ) |

异常

  NPLException | 类型不符合要求。

包装操作子为应用子。

参考调用文法： wrap1 <operative>

在文件 NPLA1.cpp 第 1453 行定义.

参考 CHRLib::p(), ystdex::sfmt() , 以及 NPL::A1::ToContextHandler().

函数调用图: