【ProLog - 4.0 List】
【简介】
列表是Prolog编程中常用的一种重要的递归数据结构
列表是一个有限的元素序列
实例:

所有Prolog术语都可以是列表的元素,一个非空的List应该含有两个元素:头元素(Head)和尾元素(tail)
头是指List中的第一个元素,除去头都是尾
“列表的尾部也总是一个列表 / The tail of a list is always a list”


空List无头无尾
【操作:分割】
Prolog有一个特殊的内置操作符|,它可以用来将列表分解为它的头部和尾部,|操作符是编写Prolog的列表的操作的关键谓词

注意Y后面跟的|操作符
【操作:匿名变量】

当我们只对列表中的某几个元素感兴趣,可以使用匿名变量_来代替其它元素,表示我们不感兴趣
匿名变量的每次出现都是独立的,也就是说可以绑定到不同的东西上
【操作:搜索与递归 member/2】
我们想知道的最基本的事情之一是,某个东西是否是列表的元素,所以我们写一个谓词,当给定一个术语X和一个列表L时,告诉我们X是否属于L
我们通常把这个操作(谓词)叫做member/2,值得注意的是,这种操作需要一个“边界”(见后)让递归停止



在这项递归操作中,我们需要做的是检测头部——分割尾部并得到新的list——检测头部,如此循环以达到递归搜索的作用
可以参考我在Java中记录的关于数组与递归的例子:https://www.cnblogs.com/RetenQ/p/14623634.html 他们的使用递归的核心思想是一样的
下面我们再看看这个a2b的例子,它会用于检测两个List的长度是否相等
同Java,我们先寻找到基本情况——当然就是两个List都是空
a2b([],[]).
随后,对其它情况作递归操作
a2b([a|L1],[b|L2]):- a2b(L1,L2).
【ProLog - 4.0 List】的更多相关文章
- 【ProLog - 3.0 进阶:递归】
[ProLog中的递归] 如果递归中的一个或多个规则引用谓词本身,则对该谓词使用"递归"定义 在使用时,这往往像一条食物链或者族谱的构成(A的爸爸的爸爸,即A的爷爷,是A的长辈) ...
- 【G-BLASTN 1.0正式发布】
[G-BLASTN 1.0正式发布]G-BLASTN使用GPU来加速NCBI-BLAST里的BLASTN模块,单块GTX780比四核CPU平均快6倍. http://www.comp.hkbu.edu ...
- 【Prolog - 2.0 基础应用】
[术语统一 terms unify] 两者统一,只需满足下面两条件之一 1.原本就是相同的 2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语 mia和mia是统一的,42和42是统一的, ...
- 【Prolog - 1.0 基础语法与概念】
[概述] Prolog的语法与其它常用语言(如C,JAVA等)不同,它更接近于自然语言. [实例] 当我想表示"Mia是以女人"这个事实(之后会提到事实这个概念)的时候,我可以这么 ...
- 【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
形式1 REGISTER("SAMPLE.DLL", "MyFunction", "AIC") 形式1等效 VBA语句 Declare Fu ...
- 【Excel 4.0 函数】REGISTER
REGISTER.ID 返回指定的 DLL 或 代码资源注册过的函数 ID.如果 DLL 或 代码资源没有注册,这个函数将会注册它们,并返回 注册ID. REGISTER.ID 可以用于工作表(不同于 ...
- 001-快速搭建Spring web应用【springboot 2.0.4】-gradle、springboot的启动过程分析、gradle多模块构建
一.概述 学习<精通Spring MVC4>书籍笔记 二.笔记 1.快速构建Spring starter web项目几种方式 1>使用Spring Tool Suite生成Start ...
- 【可持久化0/1Trie】【P4735】最大异或和
Description 给定一个长度为 \(n\) 的序列 \(A\),有 \(m\) 次操作,每次要么在序列尾部再添加一个数,将序列长度 \(n\) 加一,要么给进行一次查询,给定查询参数 \(l, ...
- 【.net core 0基础】创建你的第一个.net core应用
1.下载.NET core相应的SDK,https://dotnet.microsoft.com/download 2.安装完成后,打开命令提示符,输入命令 dotnet,检查是否正确安装,如果命令能 ...
随机推荐
- js bese64转化为blob使用FormData上传
原文 工作示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- react 遍历 object
@observable obj = { name: "ajanuw", age: 22, }; @computed get list() { return _.toPairs(th ...
- 精密进近OAS面的绘制与评估
一.定义:精密进近OAS面(Obstacle Assessment Surface 障碍物评价面)是在精密进近程序中,用来对障碍物进行评估,找出影响运行标准的控制障碍物的一种计算方法. 二.构成 OA ...
- mysql数据库表引入redis解决方案
缓存方案 缓存方案在我的另外一篇博客里有详细说明,地址:https://www.cnblogs.com/wingfirefly/p/14419728.html 数据结构: 方案1: 1.存储结构采用h ...
- 数据归一化 scikit-learn中的Scaler
1 import numpy as np 2 from sklearn import datasets 3 4 # 获取数据 5 iris = datasets.load_iris() 6 X = i ...
- SpringBoot(六):SpringBoot中如何使用Servlet?
第一种方法: 1.使用Servlet3的注解方式编写一个Servlet 2.在main方法的主类上添加注解: @ServletComponentScan(basePackages = "co ...
- cat常用参数
cat 命令格式 cat [选项] [文件] -A, --show-all:等价于 -vET. -b --number-nonblank:和 -n 相似,只不过对于空白行不编号. -e:等价于&qu ...
- 关于IO
前言 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.IO指 ...
- 一款免费的在线 Markdown 笔记,类似 typora 编辑体验
为什么要开发一款新的编辑器 自从我开始使用 Markdown,就爱上了这种标记语法,轻量.纯文本兼容是最大的优点,哪里都可以编辑,一开始是在 IDE 上直接编辑,后来笔记越来越多,需要上传图片,有云同 ...
- Python开发环境从零搭建-03-安装Python解释器并配置
想要从零开始搭建一个Python的开发环境说容易也容易 说难也能难倒一片开发人员,在接下来的一系列视频中,会详细的讲解如何一步步搭建python的开发环境 本文章是搭建环境的第3篇 讲解的内容是:安装 ...