• Posts tagged "packages"

Blog Archives

Prolog软件包管理器

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

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

关于作者:

  • 张丹,分析师/程序员/Quant: R,Java,Nodejs
  • blog: http://fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/prolog-packages/

前言

继续尝试使用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 

会自动打开下面网页。

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

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 achelois@0.5.0            - Collection of tools to make writing scripts in Prolog easier.
p aleph@5                   - Aleph Inductive Logic Programming system
p amazon_api@0.0.3          - Interface to Amazon APIs
p ansi_termx@0.0.1          - ANSI terminal operations
p ape@6.7.0                 - Parser for Attempto Controlled English (ACE)
p app@0.1                   - Prolog Application Server
p arouter@1.1.1             - Alternative HTTP path router
p assertions@0.0.1          - Ciao Assertions Reader for SWI-Prolog
p atom_feed@0.2.0           - Parse Atom and RSS feeds
p auc@1.0                   - Library for computing Areas Under the Receiving Operating Charactersitics and Precision Recall curves
p b_real@0.5                - Interface predicates to commonly used R functions.
p bddem@4.3.1               - A library for manipulating Binary Decision Diagrams
p bencode@0.0.1             - Bencoding from BitTorrent protocol
p bibtex@0.1.8              - 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 bio_db@3.2                - Access, use and manage big, biological datasets.
p bio_db_repo@20.9.14       - Data package for bio_db.
i chess_db@0.3              - PGN and chess game databases.
p db_facts@0.5              - Common db-tables-as-facts and SQL layer for ODBC and proSQLite.
p fld@0.1.0                 - Easy assess to term args when loading from ODBC or CSV.
p pl_omdb@0.5.0             - API interface to OMDB (Open Movie Database)
p rocksdb@0.8.0             - 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 chess_db@0.3              - PGN and chess game databases.
i real@2.1                  - 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 yaml@0.1
   (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 <hxliang1982@gmail.com>
Maintainer:             Hongxin Liang <hxliang1982@gmail.com>
Packager:               Honnix Liang <hxliang1982@gmail.com>
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 chess_db@0.3              - PGN and chess game databases.
i real@2.1                  - Integrative statistics with R
i yaml@0.1                  - YAML parser
true.

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

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

转载请注明出处:
http://blog.fens.me/prolog-packages/

打赏作者