|
|
|
@ -10,6 +10,8 @@
|
|
|
|
|
|
|
|
|
|
namespace blaze { |
|
|
|
|
|
|
|
|
|
void Environment::loadPredicate() |
|
|
|
|
{ |
|
|
|
|
#define IS_CONSTANT(name, constant) \ |
|
|
|
|
{ \
|
|
|
|
|
CHECK_ARG_COUNT_IS(name, SIZE(), 1); \
|
|
|
|
@ -19,12 +21,12 @@ namespace blaze {
|
|
|
|
|
&& std::static_pointer_cast<Constant>(*begin)->state() == constant); \
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// (nil? nil)
|
|
|
|
|
ADD_FUNCTION("nil?", IS_CONSTANT("nil?", Constant::Nil)); |
|
|
|
|
ADD_FUNCTION("true?", IS_CONSTANT("true?", Constant::True)); |
|
|
|
|
ADD_FUNCTION("false?", IS_CONSTANT("false?", Constant::False)); |
|
|
|
|
// (nil? nil)
|
|
|
|
|
ADD_FUNCTION("nil?", IS_CONSTANT("nil?", Constant::Nil)); |
|
|
|
|
ADD_FUNCTION("true?", IS_CONSTANT("true?", Constant::True)); |
|
|
|
|
ADD_FUNCTION("false?", IS_CONSTANT("false?", Constant::False)); |
|
|
|
|
|
|
|
|
|
// -----------------------------------------
|
|
|
|
|
// -----------------------------------------
|
|
|
|
|
|
|
|
|
|
#define IS_TYPE(type) \ |
|
|
|
|
{ \
|
|
|
|
@ -44,18 +46,18 @@ ADD_FUNCTION("false?", IS_CONSTANT("false?", Constant::False));
|
|
|
|
|
return makePtr<Constant>(result); \
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// (symbol? 'foo)
|
|
|
|
|
ADD_FUNCTION("atom?", IS_TYPE(Atom)); |
|
|
|
|
ADD_FUNCTION("keyword?", IS_TYPE(Keyword)); |
|
|
|
|
ADD_FUNCTION("list?", IS_TYPE(List)); |
|
|
|
|
ADD_FUNCTION("map?", IS_TYPE(HashMap)); |
|
|
|
|
ADD_FUNCTION("number?", IS_TYPE(Number)); |
|
|
|
|
ADD_FUNCTION("sequential?", IS_TYPE(Collection)); |
|
|
|
|
ADD_FUNCTION("string?", IS_TYPE(String)); |
|
|
|
|
ADD_FUNCTION("symbol?", IS_TYPE(Symbol)); |
|
|
|
|
ADD_FUNCTION("vector?", IS_TYPE(Vector)); |
|
|
|
|
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
// (symbol? 'foo)
|
|
|
|
|
ADD_FUNCTION("atom?", IS_TYPE(Atom)); |
|
|
|
|
ADD_FUNCTION("keyword?", IS_TYPE(Keyword)); |
|
|
|
|
ADD_FUNCTION("list?", IS_TYPE(List)); |
|
|
|
|
ADD_FUNCTION("map?", IS_TYPE(HashMap)); |
|
|
|
|
ADD_FUNCTION("number?", IS_TYPE(Number)); |
|
|
|
|
ADD_FUNCTION("sequential?", IS_TYPE(Collection)); |
|
|
|
|
ADD_FUNCTION("string?", IS_TYPE(String)); |
|
|
|
|
ADD_FUNCTION("symbol?", IS_TYPE(Symbol)); |
|
|
|
|
ADD_FUNCTION("vector?", IS_TYPE(Vector)); |
|
|
|
|
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
"fn?", |
|
|
|
|
{ |
|
|
|
|
bool result = true; |
|
|
|
@ -74,7 +76,7 @@ ADD_FUNCTION(
|
|
|
|
|
return makePtr<Constant>(result); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
"macro?", |
|
|
|
|
{ |
|
|
|
|
bool result = true; |
|
|
|
@ -93,11 +95,11 @@ ADD_FUNCTION(
|
|
|
|
|
return makePtr<Constant>(result); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// -----------------------------------------
|
|
|
|
|
// -----------------------------------------
|
|
|
|
|
|
|
|
|
|
// (contains? {:foo 5} :foo) -> true
|
|
|
|
|
// (contains? {"bar" 5} "foo") -> false
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
// (contains? {:foo 5} :foo) -> true
|
|
|
|
|
// (contains? {"bar" 5} "foo") -> false
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
"contains?", |
|
|
|
|
{ |
|
|
|
|
CHECK_ARG_COUNT_IS("contains?", SIZE(), 2); |
|
|
|
@ -111,9 +113,9 @@ ADD_FUNCTION(
|
|
|
|
|
return makePtr<Constant>(hash_map->exists(*(begin + 1))); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// (empty? '() '()) -> true
|
|
|
|
|
// (empty? [] [1 2 3] []) -> false
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
// (empty? '() '()) -> true
|
|
|
|
|
// (empty? [] [1 2 3] []) -> false
|
|
|
|
|
ADD_FUNCTION( |
|
|
|
|
"empty?", |
|
|
|
|
{ |
|
|
|
|
bool result = true; |
|
|
|
@ -128,5 +130,6 @@ ADD_FUNCTION(
|
|
|
|
|
|
|
|
|
|
return makePtr<Constant>((result) ? Constant::True : Constant::False); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace blaze
|
|
|
|
|