在序幕中的蹄俱乐部

时间:2019-03-17 14:19:40

标签: prolog logic

我很确定自己声明的事实,如下:

@Injectable()
export class customInterceptor implements HttpInterceptor {

  constructor() {
  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(request).pipe(
      tap((event: HttpEvent<any>) => {
        }, (err: any) => {
          if (err instanceof HttpErrorResponse) {
            if (err.status === 403 || err.status === 401) {
              // DO SOMETHING HERE.
            }
          }
        }
      )
    );
  }
}

当我尝试使用hoof(tony). hoof(tim). hoof(ellen). hoof(X) :- skier(X); climber(X). not(likes(X, rain)) :- climber(X). likes(X, snow) :- skier(X). likes(tony, X) :- \+likes(ellen, X). likes(ellen, X) :- \+likes(tony, X). likes(tony, rain). likes(tony, snow). 查询时,它返回并显示以下错误消息:

hoof(X), climber(X), \+skier(X).

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

您没有climber/1的任何子句,因此Prolog运行时不知道该谓词。因此,查询的谓词存在错误。一种可能的解决方案是将谓词(如skier/1climber/1声明为 dynamic

:- dynamic([climber/1, skier/1]).

此伪指令将谓词声明为运行时,通知其可以在运行时修改谓词。这将使您的查询失败,而不是引发异常。