如何为prolog程序创建用户界面

时间:2014-01-14 12:56:13

标签: prolog

我正在创建一个基于prolog逻辑基础的游戏,我想为它创建一个用户界面。编程语言与prolog集成的任何想法?

6 个答案:

答案 0 :(得分:7)

起初看起来有点反直觉,但我实际上建议制作基于网络的GUI。一旦你仔细考虑(并查看eclipse clp的http功能,http://eclipseclp.org/doc/bips/lib/http/index.html),你就会发现Prolog实际上非常适合作为编写应用程序服务器的语言。我已经做到了这一点,取得了巨大的成功它避免了说服某人查看非标准UI框架的艰难战斗。此外,它可以立即实现移动,并且可以很好地区分问题。

这是一个极简主义的例子。当你运行它(eclipse -s http.pl,然后调用runserver)时,你可以在localhost:8000打开你的浏览器来调用下面的processURL中定义的路由谓词:

http.pl:

:- lib(http),
    use_module(http_method).

runserver :-
    http_server(8000).

http_method.pl:

:- module(http_method).

http_method("GET", Url, Params, Contents, 200, [contentLength(CL), contentType(mt(text, html))]):-
    printf("%w\n", [http_method(Url, Params)]), flush(output),
    http_process(Url, Contents),
    string_length(Contents, CL).

http_process(Url, Contents) :-
    split_string(Url, "/", "/", L),
    printf("URL split: %w\n", [L]), flush(output),
    processURL(L, Contents).

processURL([""], "Hello World!").
processURL(["route1"], "You are at /route1").

答案 1 :(得分:6)

如果你使用SWI-Prolog,并且知道Qt,你可以使用QtCreator设计师。一个例子是在线here

答案 2 :(得分:3)

我认为您可以将SWi-Prolog与XPCE一起使用 此外,还有一个带SWI-Prolog的C#接口。

答案 3 :(得分:3)

如果您使用SWI-Prolog,您可以使用QtCreator,XPCE或使用Web界面。 您也可以使用Swing(Java)编写并使用JPL接口或C ++并使用CPL接口 或者C#接口并使用swicli。 Web界面教程http://www.pathwayslms.com/swipltuts/html/index.html

答案 4 :(得分:2)

我看到了几种可能的方式:

  1. 使用基于Prolog的服务器的Web界面
  2. GUI通过特定的Prolog实现功能
  3. 通过特定Prolog实施功能的外部语言界面
  4. 通过Prolog和其他语言之间的套接字进行进程间通信(如果Prolog系统支持)
  5. Prolog与其他语言之间的命令行(stdin / stdout)通信
  6. 使用基于Prolog的服务器的Web界面可能很好,但通常Web服务器不是Prolog系统开发人员的主要关注点,因此它可能没有经过良好测试,可能不支持所有HTTP功能或HTTPS或压缩......还有可能的安全问题。使Prolog服务器只能本地访问,并让另一个Web服务器与外部世界通信可能是个好主意(使用Prolog服务器的方式通常是数据库服务器用于Web)。

    对于Prolog中的GUI,XPCE或Qt可以与SWI-Prolog一起使用,正如其他答案所提到的那样。其他实现也可以有GUI设施。

    但我认为应该使用每个工具来完成它所擅长的任务,而Prolog可能不是用户界面或网络服务器的最佳工具,所以我选择了3,4或5的选项。我的清单。

    对于Prolog系统,我使用:

    • ECLiPSe CLP

      1. 有一个HTTP服务器实现,但它看起来过时(提及Netscape等)和“MIME和HTTP语法不完整,可能无法解析现有浏览器生成的一些句子”。
      2. 无法使用Prolog创建GUI。
      3. 使用Tcl / Tk,C,C ++,Java的接口。
      4. 套接字支持。
    • <强> B-Prolog的

      1. 没有HTTP服务器实现。
      2. MS Windows-only CGLIB:“基于约束的B-Prolog图形库”。
      3. 使用C和Java的接口。
      4. 套接字支持。

    当然,Prolog和其他语言之间的命令行(stdin / stdout)通信应该适用于每个Prolog系统,但它可能很慢。

答案 5 :(得分:0)

使用xpce Prolog,一个用于接口的swi prolog的嵌入式库。