Prolog软件包管理器
Prolog语言知识推理系列文章 ,不同编程语言有着不同编程视角,JAVA是面向对象,Nodejs是异步回调,R语言是统计算法,Prolog就是知识推理。每种语言都是独特的,如果想把一门语言学好用好,关键是利用语言的特点,做对的事情。
本系列文章主要介绍Prolog语言,从入门安装到知识推理。Prolog是完全不一样的,他没有复杂的程序结构,也不是为了解决算法问题,而是专注于逻辑推理,擅长解决抽象的问题。
关于作者:
- 张丹,分析师/程序员/Quant: R,Java,Nodejs
- blog: http://fens.me
- email: bsspirit@gmail.com
转载请注明出处:
前言
继续尝试使用prolog语言,本文将主要介绍prolog的包管理器。我们在使用prolog来编程的时候,避免不了会用到第三方的软件包,比如文件操作包,数据库包,http请求包,数据解析包,算法包等。所以,掌握包的安装,查看,加载,卸载都是必须的基本操作能力。
目录
- prolog包管理器
- 包管理的函数使用
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 Maintainer: Nicos Angelopoulos Packager: Nicos Angelopoulos 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 Maintainer: Hongxin Liang Packager: Honnix Liang 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 . 2021-01-11 11:34 .. 2021-01-11 09:49 chess_db 2021-01-11 11:24 Downloads 2020-12-31 16:11 real 2021-01-11 11:26 xsd 2021-01-11 11:38 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新手快速上手。
转载请注明出处: