Пример #1
0
term lambda_1 (term v, term x)
{
term f, a;
type tf;
	if (v->k != TERM_VAR)
	{
		sput ("lambda: 1st arg not variable\n", err);
		return UNDEF_TERM;
	}
	if (x->k == TERM_VAR && !strcmp (x->var.name, v->var.name) &&
		equal_type (x->var.typ, v->var.typ))
		return I (v->var.typ);
	if (!occur (v, x))
		return ap (K (type_term (x), v->var.typ), x);
	f = x->ap.fnc;
	a = x->ap.arg;
	if (a->k == TERM_VAR && !strcmp (a->var.name, v->var.name) &&
		equal_type (a->var.typ, v->var.typ) &&
		!occur (v, f))
		return f;
	tf = type_term (f);
	return ap (ap (S (v->var.typ, type_term (a), tf->fnc.res),
			lambda (v, f)),
				lambda (v, a));
}
Пример #2
0
int occur (term v, term x)
{
	if (x->k == TERM_VAR && !strcmp (x->var.name, v->var.name) &&
		equal_type (x->var.typ, v->var.typ))
		return 1;
	if (x->k != TERM_AP)
		return 0;
	if (occur (v, x->ap.fnc))
		return 1;
	if (occur (v, x->ap.arg))
		return 1;
	return 0;
}
Пример #3
0
int open (const char *pathname, int flags, ...)
{
    if (____ifs_open_locked ||
        ift::scoped_global_lock::locked())
    {
        va_list argptr;
        va_start(argptr, flags);
        mode_t mode = (mode_t)va_arg(argptr, mode_t);
        int result = ____ifs_open_orig(pathname, flags, mode);
        va_end(argptr);
        return result;
    }
    ift::scoped_global_lock ____ifs_glock;
    void* ____ifs_addr = __builtin_return_address(0);
    std::pair< void*, int >
        occur(____ifs_addr, ____ifs_open_errno);
    static std::set< std::pair< void*, int > > ____ifs_history;
    if (____ifs_history.find(occur) != ____ifs_history.end())
    {
        va_list argptr;
        va_start(argptr, flags);
        mode_t mode = (mode_t)va_arg(argptr, mode_t);
        int result = ____ifs_open_orig(pathname, flags, mode);
        va_end(argptr);
        return result;
    }
    ____ifs_history.insert(occur);
    errno = ____ifs_open_errno;
    return -1;
}
Пример #4
0
 // 检查连续的 9 个格子是否有效
 bool isValid(const vector<char>& vec) {
     vector<bool> occur(9, false);
     for (int i = 0; i < 9; ++i) {
         if (isdigit(vec[i])) {
             if (occur[vec[i]-'1']) return false;
             else occur[vec[i]-'1'] = true;
         }
     }
     return true;
 }