8

Prolog软件包管理器

 3 years ago
source link: http://blog.fens.me/prolog-packages/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Prolog语言知识推理系列文章 ,不同编程语言有着不同编程视角,JAVA是面向对象,Nodejs是异步回调,R语言是统计算法,Prolog就是知识推理。每种语言都是独特的,如果想把一门语言学好用好,关键是利用语言的特点,做对的事情。

本系列文章主要介绍Prolog语言,从入门安装到知识推理。Prolog是完全不一样的,他没有复杂的程序结构,也不是为了解决算法问题,而是专注于逻辑推理,擅长解决抽象的问题。

关于作者:

  • 张丹,分析师/程序员/Quant: R,Java,Nodejs
  • blog: http://fens.me
  • email: [email protected]

转载请注明出处:

http://blog.fens.me/prolog-packages/

bymiEbn.png!mobile

前言

继续尝试使用prolog语言,本文将主要介绍prolog的包管理器。我们在使用prolog来编程的时候,避免不了会用到第三方的软件包,比如文件操作包,数据库包,http请求包,数据解析包,算法包等。所以,掌握包的安装,查看,加载,卸载都是必须的基本操作能力。

目录

  1. prolog包管理器
  2. 包管理的函数使用

1. prolog包管理器

每种编程语言,在启动时内核不可能加载所有的东西,就需要通过模块化的组织方式,把不同的组件进行分步加载。有些模块是官方提供的,有些模块需要有各种第三方包的支持。那么就需要对各种第三方进行统一的管理,允许开发人员方便地使用这些第三方包。

这样子就涉及到,软件包管理的各种使用和操作,包括本地已安装包的管理,远程软件包仓库的查询,软件包的安装,软件包的下载,软件的依赖管理等等操作。

prolog提供了软件包管理的功能,通过prolog_pack.pl的文件接口进行实现。在prolog_pack.pl中提供了多种函数,来帮助用户实现软件的安装使用的过程,可以参考官方介绍 https://www.swi-prolog.org/pldoc/doc/_SWI_/library/prolog_pack.pl

该库(prolog_pack)提供了使您可以检查已安装的软件包,安装软件包,删除软件包等。它由内置的attach_packs补充,该附件使已安装的软件包可用作库。也可以通过运行doc_browser. 函数在查询。

% 启动prolog运行环境
~ swipl

% 查看软件包管理器
?- doc_browser.
% Started server at http://localhost:64976/pldoc/
true

会自动打开下面网页。

Z7nIBvE.png!mobile

当然,我们更多地是使用交互函数,来对软件包进行管理。

2. 包管理的函数使用

对于包管理器的使用方法,我们有常用的5个操作,查看软件包列表pack_list函数,查看本地已安装软件包pack_list_installed函数,查看本地已安装软件包详细信息pack_info函数,安装软件包pack_install函数,卸载软件包pack_remove函数。

2.1 查看软件包列表pack_list函数

pack_list(+Query)函数,查询所有的软件包服务器,Query不区分大小写地匹配已知和已安装软件包的名称和标题,同pack_search(+Query)函数。

对于每个匹配的软件包,将显示一行。每一行的第一个字母表示,软件包安装状态:

  • p:本地未安装软件包
  • i:本地已安装的软件包,与公开发布的最新版本一致
  • U:本地已安装的软件包,不是最新版本可以升级
  • A:本地已安装的软件包,比公开发布的更新
  • l:本地已安装的软件包,不在公开的服务器上

函数执行,下面会列出所有官方公开的软件包。截止到2021年1月11日,共有326个包。

3 ?- pack_list("").
% Contacting server at https://www.swi-prolog.org/pack/query ... ok
p [email protected]            - Collection of tools to make writing scripts in Prolog easier.
p aleph@5                   - Aleph Inductive Logic Programming system
p [email protected]          - Interface to Amazon APIs
p [email protected]          - ANSI terminal operations
p [email protected]                 - Parser for Attempto Controlled English (ACE)
p [email protected]                   - Prolog Application Server
p [email protected]             - Alternative HTTP path router
p [email protected]          - Ciao Assertions Reader for SWI-Prolog
p [email protected]           - Parse Atom and RSS feeds
p [email protected]                   - Library for computing Areas Under the Receiving Operating Charactersitics and Precision Recall curves
p [email protected]                - Interface predicates to commonly used R functions.
p [email protected]               - A library for manipulating Binary Decision Diagrams
p [email protected]             - Bencoding from BitTorrent protocol
p [email protected]              - Parser and predicates for BibTeX files

.. 省略

pack_list函数,也执行模糊匹配查询,查询包含db的包。

4 ?- pack_list("db").
% Contacting server at https://www.swi-prolog.org/pack/query ... ok
p [email protected]                - Access, use and manage big, biological datasets.
p [email protected]       - Data package for bio_db.
i [email protected]              - PGN and chess game databases.
p [email protected]              - Common db-tables-as-facts and SQL layer for ODBC and proSQLite.
p [email protected]                 - Easy assess to term args when loading from ODBC or CSV.
p [email protected]             - API interface to OMDB (Open Movie Database)
p [email protected]             - SWI-Prolog interface to RocksDB
true.

2.2 查看本地已安装软件包pack_list_installed函数

只查看本地已安装包pack_list_installed(),与pack_list/1不同,仅显示本地安装的软件包,并且不建立与Internet的连接。

8 ?- pack_list_installed.
Installed packages (2):

i [email protected]              - PGN and chess game databases.
i [email protected]                  - Integrative statistics with R
true.

我当前本地只安装了2个包,分为是chess_db和real,都是公开发布的最新版本。

2.3 查看本地已安装软件包详细信息pack_info函数

pack_info(+ Pack),查看本地已安装软件包的详细信息。

?- pack_info(chess_db).
Package:                chess_db
Title:                  PGN and chess game databases.
Installed version:      0.3
Installed in directory: c:/programdata/swi-prolog/pack/chess_db
Author:                 Nicos Angelopoulos <http://stoics.org.uk/~nicos>
Maintainer:             Nicos Angelopoulos <http://stoics.org.uk/~nicos>
Packager:               Nicos Angelopoulos <http://stoics.org.uk/~nicos>
Home page:              http://stoics.org.uk/~nicos/sware/chess_db
Download URL:           http://stoics.org.uk/~nicos/sware/packs/chess_db/chess_db-*.tgz
Provided libraries:     chess_db
true.

如果本地没有安装,查看时则失败。

18 ?- pack_info(xsd).
Warning: No pack xsd installed.  Use ?- pack_list(Pattern) to search
false.

提示本地没有安装,先用pack_list()查看一下,是否有这个包。

2.4 安装软件包pack_install函数

pack_install(+Name),安装软件包,先来安装一下xsd包。

?- pack_install(xsd).
% Contacting server at https://www.swi-prolog.org/pack/query ... ok
% Pack `xsd' is already installed @0.2.1
true.

再安装yaml包

?- pack_install(yaml).
% Contacting server at https://www.swi-prolog.org/pack/query ... ok
Select download location for [email protected]
   (1) * GIT repository at http://git.cf.ericsson.net/5g-mgmt/yaml.git
   (2)   GIT repository at http://git.cf.ericsson.net/components/yaml.git
   (3)   GIT repository at http://git.cf.ericsson.net/ehonlia/yaml.git
   (4)   GIT repository at https://github.com/honnix/yaml.git
   (5)   Cancel

Your choice? 
% Cloning into 'c:/programdata/swi-prolog/pack/yaml'...
% Contacting server at https://www.swi-prolog.org/pack/query ... ok
% "yaml.git" was downloaded 171 times
Package:                yaml
Title:                  YAML parser
Installed version:      0.1
Author:                 Honnix Liang <[email protected]>
Maintainer:             Hongxin Liang <[email protected]>
Packager:               Honnix Liang <[email protected]>
Home page:              https://github.com/honnix/yaml
Download URL:           https://github.com/honnix/yaml/archive/v0.1.zip
Run post installation scripts for pack "yaml" Y/n? 
% make: Nothing to be done for 'all'.
% make: Nothing to be done for 'check'.
% make: Nothing to be done for 'install'.
true.

安装后的包,都放在了本地的swi-prolog安装目录 C:\ProgramData\swi-prolog\pack 目录下面了。

C:\ProgramData\swi-prolog\pack>dir
 驱动器 C 中的卷是 Windows
 卷的序列号是 28E7-F0A9

 C:\ProgramData\swi-prolog\pack 的目录

2021-01-11  11:34    <DIR>          .
2021-01-11  11:34    <DIR>          ..
2021-01-11  09:49    <DIR>          chess_db
2021-01-11  11:24    <DIR>          Downloads
2020-12-31  16:11    <DIR>          real
2021-01-11  11:26    <DIR>          xsd
2021-01-11  11:38    <DIR>          yaml
               0 个文件              0 字节
               7 个目录 84,370,649,088 可用字节

用tree命令查看,可以看到整个目录的结构

C:\ProgramData\swi-prolog\pack>tree
卷 Windows 的文件夹 PATH 列表
卷序列号为 28E7-F0A9
C:.
├─chess_db
│  ├─data
│  │  └─pgn
│  ├─doc
│  │  └─html
│  ├─examples
│  │  └─short
│  ├─prolog
│  └─src
│      └─lib
├─Downloads
├─real
│  ├─.git
│  │  ├─hooks
│  │  ├─info
│  │  ├─logs
│  │  │  └─refs
│  │  │      ├─heads
│  │  │      └─remotes
│  │  │          └─origin
│  │  ├─objects
│  │  │  └─pack
│  │  └─refs
│  │      ├─heads
│  │      └─remotes
│  │          └─origin
│  ├─c
│  ├─configs
│  ├─doc
│  ├─examples
│  │  └─ws_hist
│  ├─lib
│  │  ├─i386-win32
│  │  ├─x64-win64
│  │  └─x86_64-linux
│  └─prolog
└─yaml
    ├─examples
    └─prolog
        └─yaml

2.5 卸载软件包pack_remove函数

pack_remove(+Name),用于卸载软件包。

?- pack_remove(xsd).
% Removing 'c:/programdata/swi-prolog/pack/xsd' and contents
true.

% 查看已安装软件包
?- pack_list_installed.
Installed packages (3):

i [email protected]              - PGN and chess game databases.
i [email protected]                  - Integrative statistics with R
i [email protected]                  - YAML parser
true.

本文的完整代码,可以在github上找到: https://github.com/bsspirit/prolog-learning/tree/main/03 package

同样,本文还是对于prolog的初探,进行逻辑推理,从浅入入深的过程,希望本文能让所有的prolog新手快速上手。

转载请注明出处:

http://blog.fens.me/prolog-packages/

mA3Aru.png!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK