Vita
function.h
Go to the documentation of this file.
1
13#if !defined(VITA_FUNCTION_H)
14#define VITA_FUNCTION_H
15
16#include <string>
17
18#include "kernel/gp/symbol.h"
19
20namespace vita
21{
34class function : public symbol
35{
36public:
37 function(const std::string &, category_t, cvect);
38 function(const std::string &, std::size_t);
39
40 [[nodiscard]] category_t arg_category(std::size_t) const;
41
42 [[nodiscard]] virtual bool associative() const;
43
44 [[nodiscard]] virtual std::string display(format = c_format) const;
45
46 [[nodiscard]] unsigned arity() const final;
47
48 [[nodiscard]] bool is_valid() const override;
49
50 [[nodiscard]] static const function *cast(const symbol *);
51
52private:
53 cvect argt_;
54};
55
59inline unsigned function::arity() const
60{
61 Expects(argt_.size());
62 return static_cast<unsigned>(argt_.size());
63}
64
80inline bool function::associative() const
81{
82 return false;
83}
84
89inline category_t function::arg_category(std::size_t i) const
90{
91 Expects(i < arity());
92 return argt_[i];
93}
94
101inline const function *function::cast(const symbol *s)
102{
103 Expects(s->arity());
104 return static_cast<const function *>(s);
105}
106
107} // namespace vita
108
109#endif // include guard
A symbol with arity() > 0.
Definition: function.h:35
static const function * cast(const symbol *)
This is a short cut function.
Definition: function.h:101
category_t arg_category(std::size_t) const
Definition: function.h:89
function(const std::string &, category_t, cvect)
Definition: function.cc:25
virtual std::string display(format=c_format) const
Definition: function.cc:52
unsigned arity() const final
Definition: function.h:59
virtual bool associative() const
Is the symbol subject to the associative law of arithmetic?
Definition: function.h:80
bool is_valid() const override
Definition: function.cc:64
Together functions and terminals are referred to as symbols.
Definition: symbol.h:36
format
Symbol rendering format.
Definition: symbol.h:39
The main namespace for the project.
std::size_t category_t
A category provide operations which supplement or supersede those of the domain but which are restric...
Definition: common.h:44