多输入prolog中的菜单驱动程序?

多输入prolog中的菜单驱动程序?,prolog,Prolog,我正在设计一个菜单驱动的prolog代码来查找距离 我的代码如下所示 road(arad, zerind, 75). road(arad, sibiu, 140). road(arad, timisoara, 118). depth_first([[Goal|Path]|_],Goal,[Goal|Path],0). depth_first([Path|Queue],Goal,FinalPath,N) :- extend(Path,NewPaths), append(NewP

我正在设计一个菜单驱动的prolog代码来查找距离

我的代码如下所示

road(arad, zerind, 75).
road(arad, sibiu, 140).
road(arad, timisoara, 118).

depth_first([[Goal|Path]|_],Goal,[Goal|Path],0).
depth_first([Path|Queue],Goal,FinalPath,N) :-
    extend(Path,NewPaths), 
    append(NewPaths,Queue,NewQueue),
    depth_first(NewQueue,Goal,FinalPath,M),
    N is M+1.

extend([Node|Path],NewPaths) :-
    findall([NewNode,Node|Path],
            (road(Node,NewNode,_), 
            \+ member(NewNode,Path)), % for avoiding loops
            NewPaths).

run:-
    write('Enter the ORIGIN City: '),read(S),
    write('Enter the Destination City: '),read(D),
    write('Type of search: '),nl,
    write('1. depth_first search 2. exit'),nl,
    write('Enter your option:'),nl,
    read(X),choice(X).
    choice(X):-X=:=1, 
    depth_first([[S]],D,P,C), writeln([P]).
每次我运行代码时,控制台只打印true并退出。我知道我犯了一些错误,但我从最后一个小时就想不出来了

如果我在控制台中以

depth_first([[arad]],zerind,P,C)
它运行并打印

更新: “深度优先([[S]],D,P,C),writeln([P])”这只是在文本位置打印数字

run:-
    write('Enter the ORIGIN City: '),read(S),
    write('Enter the Destination City: '),read(D),
    write('Type of search: '),nl,
    write('1. depth_first search 2. exit'),nl,
    write('Enter your option:'),nl,
    read(X),choice(X).
此时,运行谓词定义停止(以句号结束)。 选择谓词开始:

   choice(X):-X=:=1, 
        depth_first([[S]],D,P,C), writeln([P]).

所以run/0成功了,什么也不做。这就是你的错误。这对你有帮助吗?

没有,它只是打印一个数字[[u 12372]],我想让它打印文本。他们还有其他打印方式吗?我只是指出了你的错误来帮助你。如果你不明白什么,发一个新问题。我还没有完成你的家庭作业。如果你的序言给了你关于单例变量的警告,请理解并修复它们。搜索StackOverflow以获得有关这一点为何重要的大量答案。如果您的Prolog没有给出关于单例变量的警告,请使用更好的Prolog。