| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1015 人关注过本帖
标题:关于 prolog编程的一些初级问题 (求助).
只看楼主 加入收藏
zladd
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-2-2
收藏
 问题点数:0 回复次数:1 
关于 prolog编程的一些初级问题 (求助).

本人刚接触prolog, 作业中有道题是计算数组中一样的元素(或数字).
如:
?-compress([3,3,3,1,1,2,2,2,2,3,3,4],L).
ans:
L=[[1,1],[2,4],[3,5],[4,1]]
Yse.

我的思路是先将数组进行排序, 再统计一样的数码.但怎么也不能得出满意的结果.
以下是我的一些程序片短,大多是书上找来的.

排序部分, 我用bubble sort
bubble_sort(List,Sorted):-b_sort(List,[],Sorted).
b_sort([],Acc,Acc).
b_sort([H|T],Acc,Sorted):-bubble(H,T,NT,Max),b_sort(NT,[Max|Acc],Sorted).

bubble(X,[],[],X).
bubble(X,[Y|T],[Y|NT],Max):-X>Y,bubble(X,T,NT,Max).
bubble(X,[Y|T],[X|NT],Max):-X=<Y,bubble(Y,T,NT,Max).
?-bubble_sort([3,3,3,1,1,2,2,2,2,3,3,4],L),write("L="),write(L),nl.
Output:
L=[1,1,2,2,2,2,3,3,3,3,3,4]
Yes. 这部分应该没问题.


这是合并部分, 将相同数字放入同一数组中
Pack code:
pack([],[]).
pack([X|Xs],[Z|Zs]) :- transfer(X,Xs,Ys,Z), pack(Ys,Zs).
% transfer(X,Xs,Ys,Z) Ys is the list that remains from the list Xs
% when all leading copies of X are removed and transfered to Z
transfer(X,[],[],[X]).
transfer(X,[Y|Ys],[Y|Ys],[X]) :- X \= Y.
transfer(X,[X|Xs],Ys,[X|Zs]) :- transfer(X,Xs,Ys,Zs).
?-pack([3,3,3,1,1,2,2,2,2,3,3,4],L),write("L="),write(L),nl.
Output:
L=[[3,3,3],[1,1],[2,2,2,2],[3,3],[4]]
Yes. 看来这部分也应该没问题.

第三步,浓缩部分,只找到下面的code,要用到第二步的内容:

Example:
?- encode([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X).
X = [[4,a],[1,b],[2,c],[2,a],[1,d][4,e]]
% encode(L1,L2) :- the list L2 is obtained from the list L1 by run-length
% encoding. Consecutive duplicates of elements are encoded as terms [N,E],
% where N is the number of duplicates of the element E.
% (list,list) (+,?)
:- ensure_loaded(第二步的内容).
encode(L1,L2) :- pack(L1,L), transform(L,L2).
transform([],[]).
transform([[X|Xs]|Ys],[[N,X]|Zs]) :- length([X|Xs],N), transform(Ys,Zs).


因为星期一就要交作业了, 所以还请懂行高手帮帮忙, 如果需要prolog程序, 可以去 http://www.dobrev.com/ 去下载一个, 2M多一点,是个绿色自解压软件,不用安装.

先谢谢了

搜索更多相关主题的帖子: prolog 数码 sort bubble 初级 
2007-04-27 23:07
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
你好像在命令别人帮你做作业似的,
以后别发这些作业上来了..见一次删一次,
重则跟贴管理!

/images/2011/147787/2011051411021524.jpg" border="0" />
2007-04-28 10:04
快速回复:关于 prolog编程的一些初级问题 (求助).
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016126 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved