【简介】

列表是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】的更多相关文章

  1. 【ProLog - 3.0 进阶:递归】

    [ProLog中的递归] 如果递归中的一个或多个规则引用谓词本身,则对该谓词使用"递归"定义 在使用时,这往往像一条食物链或者族谱的构成(A的爸爸的爸爸,即A的爷爷,是A的长辈) ...

  2. 【G-BLASTN 1.0正式发布】

    [G-BLASTN 1.0正式发布]G-BLASTN使用GPU来加速NCBI-BLAST里的BLASTN模块,单块GTX780比四核CPU平均快6倍. http://www.comp.hkbu.edu ...

  3. 【Prolog - 2.0 基础应用】

    [术语统一 terms unify] 两者统一,只需满足下面两条件之一 1.原本就是相同的 2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语 mia和mia是统一的,42和42是统一的, ...

  4. 【Prolog - 1.0 基础语法与概念】

    [概述] Prolog的语法与其它常用语言(如C,JAVA等)不同,它更接近于自然语言. [实例] 当我想表示"Mia是以女人"这个事实(之后会提到事实这个概念)的时候,我可以这么 ...

  5. 【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句

    形式1 REGISTER("SAMPLE.DLL", "MyFunction", "AIC") 形式1等效 VBA语句 Declare Fu ...

  6. 【Excel 4.0 函数】REGISTER

    REGISTER.ID 返回指定的 DLL 或 代码资源注册过的函数 ID.如果 DLL 或 代码资源没有注册,这个函数将会注册它们,并返回 注册ID. REGISTER.ID 可以用于工作表(不同于 ...

  7. 001-快速搭建Spring web应用【springboot 2.0.4】-gradle、springboot的启动过程分析、gradle多模块构建

    一.概述 学习<精通Spring MVC4>书籍笔记 二.笔记 1.快速构建Spring starter web项目几种方式 1>使用Spring Tool Suite生成Start ...

  8. 【可持久化0/1Trie】【P4735】最大异或和

    Description 给定一个长度为 \(n\) 的序列 \(A\),有 \(m\) 次操作,每次要么在序列尾部再添加一个数,将序列长度 \(n\) 加一,要么给进行一次查询,给定查询参数 \(l, ...

  9. 【.net core 0基础】创建你的第一个.net core应用

    1.下载.NET core相应的SDK,https://dotnet.microsoft.com/download 2.安装完成后,打开命令提示符,输入命令 dotnet,检查是否正确安装,如果命令能 ...

随机推荐

  1. js bese64转化为blob使用FormData上传

    原文 工作示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. react 遍历 object

    @observable obj = { name: "ajanuw", age: 22, }; @computed get list() { return _.toPairs(th ...

  3. 精密进近OAS面的绘制与评估

    一.定义:精密进近OAS面(Obstacle Assessment Surface 障碍物评价面)是在精密进近程序中,用来对障碍物进行评估,找出影响运行标准的控制障碍物的一种计算方法. 二.构成 OA ...

  4. mysql数据库表引入redis解决方案

    缓存方案 缓存方案在我的另外一篇博客里有详细说明,地址:https://www.cnblogs.com/wingfirefly/p/14419728.html 数据结构: 方案1: 1.存储结构采用h ...

  5. 数据归一化 scikit-learn中的Scaler

    1 import numpy as np 2 from sklearn import datasets 3 4 # 获取数据 5 iris = datasets.load_iris() 6 X = i ...

  6. SpringBoot(六):SpringBoot中如何使用Servlet?

    第一种方法: 1.使用Servlet3的注解方式编写一个Servlet 2.在main方法的主类上添加注解: @ServletComponentScan(basePackages = "co ...

  7. cat常用参数

    cat 命令格式 cat [选项] [文件] -A, --show-all:等价于 -vET. -b  --number-nonblank:和 -n 相似,只不过对于空白行不编号. -e:等价于&qu ...

  8. 关于IO

    前言 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.IO指 ...

  9. 一款免费的在线 Markdown 笔记,类似 typora 编辑体验

    为什么要开发一款新的编辑器 自从我开始使用 Markdown,就爱上了这种标记语法,轻量.纯文本兼容是最大的优点,哪里都可以编辑,一开始是在 IDE 上直接编辑,后来笔记越来越多,需要上传图片,有云同 ...

  10. Python开发环境从零搭建-03-安装Python解释器并配置

    想要从零开始搭建一个Python的开发环境说容易也容易 说难也能难倒一片开发人员,在接下来的一系列视频中,会详细的讲解如何一步步搭建python的开发环境 本文章是搭建环境的第3篇 讲解的内容是:安装 ...