【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,检查是否正确安装,如果命令能 ...
随机推荐
- HTML5 & custom element & template
HTML5 & custom element & template template https://codepen.io/xgqfrms/pen/eYYExvp https://cs ...
- Flutter: AnimatedList 一个滚动容器,可在插入或移除项目时为其设置动画
Flutter Widget of the Week import 'dart:math'; import 'package:flutter/material.dart'; void main() = ...
- VAST重磅出击,NGK网络搜索量超越ETH!
Wechat指数中,NGK超越ETH,NGK搜索指数是157648点位,单日环比上涨11.95%,ETH搜索指数是115604点位,就连区块链标杆的BTC也仅仅只有171669点位,我们可清楚的看到N ...
- NGK算力生态建设者狂欢!SPC之后又有VAST!
想致富,先挖矿.这句话已经成为了币圈的一句名言.挖矿一词始终贯穿着区块链以及数字加密领域. 据小道消息透露,NGK官最近将会推出两款挖矿产品---SPC星空币以及其子币VAST维萨币. 下面笔者就来一 ...
- NGK八大板块:为何郊区市场近来火爆?-VALAITIS, PETER ANTHONY分析
PAUL ADAMS ARCHITECT LTD董事长VALAITIS, PETER ANTHONY称受大环境影响很多纽约人都选择离开纽约市中心,搬往附近郊区,因此附近地区楼市开始不断升温. 根据房地 ...
- npm与package.json快速入门
本文转载自npm与package.json快速入门 导语 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧! 读完本 ...
- javascript初体验(一)
数据类型 数字 (Number),整数或浮点数,例如42或3.14159 字符串 (String) 布尔值 (Boolean) null (js大小写敏感,因此null和NULL不一样) undefi ...
- R语言学习4:函数,流程控制,数据框重塑
本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...
- 心脏滴血(CVE-2014-0160)检测与防御
用Nmap检测 nmap -sV --script=ssl-heartbleed [your ip] -p 443 有心脏滴血漏洞的报告: ➜ ~ nmap -sV --script=ssl-hear ...
- three.js cannon.js物理引擎之约束(二)
今天郭先生继续讲cannon.js的物理约束,之前的一篇文章曾简单的提及过PointToPointConstraint约束,那么今天详细的说一说cannon.js的约束和使用方法.在线案例请点击博客原 ...