2014-02-17 2 views
0

내가 프롤로그에 코딩하려는 프로그램에 대한 도움을 요청하고 싶습니다. 나는 나무의 루트에서 노드 X의 경로를 찾는 함수 path(X,tree,Path)을 만들고 싶다. 기본적으로 나는 3 개의 문장이있을 것이라고 생각했다. 더 트리 트리의 루트에서 노드 X의 경로 찾기

  • path(X,tree(X,void,void),[X])가 없기 때문에

    1. path(X, void, []), 트리 루트
    2. path(X,tree(Route,Left,Right),Path), 의 요소를 포함하는 목록을 반환 빈 목록을 반환 ?????????

    나는 3 개의 문장이 있다고 믿는다. 2 개는 알고 있지만, 3 번째 문장은 무엇인지 모른다. 누구든지 나를 도울 수 있습니까? 고맙습니다.

  • 답변

    1

    당신의 절 3) 반환 경로 앞에 현재 노드에 추가하고,

    path(X, tree(Route, Left, Right), [Route|Path]) :- 
        path(X, Left, Path) ; path(X, Right, Path). 
    

    주에게 지점에서 분리 (;)/2를 재귀해야한다. 이 규칙은 처음으로 Left를 시도하고 역 추적 할 때 Right 분기를 시도합니다.

    +0

    작동하지 않습니다. – VahidM

    -1

    규칙은이 경우에 작동합니다

    - 경로 (3, 나무 (1, 나무 (2, 무효, 무효), 트리 (3, 무효, 무효)), X)?. X = [1, 3]. - 트리에 세 개의 노드가 있습니다.

    하지만 트리에 노드를 추가하려고하면 작동하지 않습니다. 아래 예제를보십시오 : ? - 경로 (7, tree (1, tree (2,4,5), tree (3,6,7)), X). 거짓. 답은 X = [1,3,7]이어야합니다.

    +0

    이것은 답변이 아닙니다. 평판으로 인해 의견을 남기지 못하는 한 원래 질문에 대해 편집하거나 의견을 말하십시오. – jschimpf

    +0

    트리 (3,6,7)는 사용자의 사양에 따라 유효한 트리 노드가 아닙니다. – jschimpf

    +0

    왜 유효하지 않습니까? 유효한 나무는 무엇입니까? 3) 규칙이 정확하다는 것을 믿을 수있는 예를 들어 줄 수 있습니까? – user3320752

    관련 문제