!
(defun ! (n) "factorial" (labels ((fac (n prod) (if (zerop n) prod (fac (- n 1) (* prod n))))) (fac n 1)))
редактирование : или с аккумулятором как дополнительный параметр:
(defun ! (n &optional prod) "factorial" (if (zerop n) prod (! (- n 1) (* prod n))))
или как уменьшение, за счет большего объема потребляемой памяти и более концентрирования:
(defun range (start end &optional acc) "range from start inclusive to end exclusive, start = start end) (nreverse acc) (range (+ start 1) end (cons start acc)))) (defun ! (n) "factorial" (reduce #'* (range 1 (+ n 1))))
Возвращение значения NULL по существу сообщает ASP.NET, что у вас нет никакой зависимости - следовательно, ASP.NET не будет перезагружать элемент.
Вам нужно вернуть действительную зависимость, например
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return new CacheDependency(getPhysicalFileName(virtualPath));
}
Более правильный подход - убедиться, что вы обрабатываете только свои собственные зависимости кеша (это схематический пример):
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if (isMyVirtualPath(virtualPath))
return new CacheDependency(getPhysicalFileName(virtualPath));
else
return new Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}