Prolog 列表练习 1.

本文介绍了使用Prolog进行列表操作的一些练习,包括获取列表的最后一个元素、倒数第二个元素、指定位置的元素、长度、反转、判断是否为回文、平坦化、消除连续重复成员和归类连续重复元素。每个练习都提供了实现代码和运行示例。
摘要由CSDN通过智能技术生成

转载自:https://mp.weixin.qq.com/s/tkoV2byIhCCP1b-kOMmkeg

1、获取列表中的最后一个元素

my_last(X,[X]).        %是最后一个元素则合一

my_last(X,[_|L]) :-    %X是列表L的最后一个元素

my_last(X,L).    %如果不是最后一个元素继续递归

 

运行效果如下:

?- my_last(A, [a,b,c,d,e,f,g]).

A = g ;

;

false.

 

2、获取列表的倒数第二个元素

last_but_one(X,[X,_]).            %列表中有2个元素取第一个,完成合一

last_but_one(X,[_,Y|Ys]) :-     %如果列表的元素个数比2个多,则继续递归

last_but_one(X,[Y|Ys]). 

 

运行效果如下:

?- last_but_one(A, [1,2,3,4,5,6,7]).

A = 6 .

true.

 

3、获取指定位置的元素,获取指定元素的位置

%注意有个内置谓词:nth1(?Index, ?List, ?Elem)

 

element_at(X,[X|_],1).      %列表中的第一个元素是数字1。

element_at(X,[_|L],K) :-    %X是列表L中的第K个元素

K > 1, 

K1 is K - 1, 

element_at(X,L,K1).

 

?- element_at(X,[a,b,c,d,e,f,g],4).

X = d ;

;

false.

 

运行效果如下:

?- element_at(c,[a,b,c,d,e,f,g],X).

ERROR: [Thread pdt_console_client_0_Default Process] Arguments are not sufficiently instantiated

ERROR: [Thread pdt_console_client_0_Default Process] In:

ERROR: [Thread pdt_console_client_0_Default Process]   [15] _318456>1

ERROR: [Thread pdt_console_client_0_Default Process]   [14] element_at(c,[a,b|...],_318486) at /Users/limanxi/Documents/prolog_99problem/99Prolog-Examples/Prolog Lists/src/p1_03.pl:15

ERROR: [Thread pdt_console_client_0_Default Process]   [13] <user>

 

 

 

修改后的

:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值