关于装错信封有关问题的prolog程序,有没有知道错哪了
发布时间:2011-06-30 07:29:21 文章来源:www.iduyao.cn 采编人员:星星草
关于装错信封问题的prolog程序,有没有大虾知道哪里错了?
问题描述:
糊涂先生给他的五个朋友写信,他写了五封信,但是当他的朋友收到信后,都告诉他:“你的信寄错了”。那么请你计算一下:出现这种情况的概率有多少?(假设糊涂先生是随机地往信封里装信),你能不能把所有的情况都列出来呢?
domains
a=integer
al=a*
predicates
delete(a,al,al)
permutation(al,al)
some_element_right(al,al)
letter(al,al)
clauses
% delete(A,B,C), B为列表,A为B中的某个元素,C为把B中的元素A除去后的列表。
delete(A,[A|X],X).
delete(A,[B|X],[B|Y]):-
delete(A,X,Y).
% permutation(A,B), 列表A为列表B的全排列之一时,成功。
permutation([],[]).
permutation([A|X],Y):-
delete(A,Y,Y1),
permutation(X,Y1).
% some_element_right(A,B) 如果列表A与B中存在位置相同的元素则成功。
some_element_right([A|X],[A|Y]).
some_element_right([A|X],[B|Y]):-
some_element_right(X,Y).
letter(X,Y):-
permutation(X,Y),
not(some_element_right(X,Y)).
goal
letter(X,[1,2,3,4,5]),write(X),nl,fail.
------解决方案--------------------
我用GNU-Prolog运行了你的程序,程序因overflow退出。
暂时没有时间帮你找错,程序大致是对的,很可能是某些语句顺序不对导致prolog在某处死循环。
概论是44/5!=44/120=11/30.
你可以用我写的如下程序:
p1(X,N) :- length(X,N),
fd_domain(X,1,N),
fd_all_different(X),
fd_labeling(X, [variable_method(ff),value_method(random)]),
wrong(X,1),
write(X),nl,fail.
%the first element does not equal to N, means the corresponding letter is wrong.
wrong([],_). %base condition
wrong([H|T],N) :- H =\= N, N1 is N+1, wrong(T,N1). %recursive body
运行结果如下:
| ?- p1(X,5).
[4,5,1,2,3]
[4,5,1,3,2]
[4,5,2,3,1]
[4,5,2,1,3]
[4,3,5,2,1]
[4,3,5,1,2]
[4,3,1,5,2]
[4,3,2,5,1]
[4,1,2,5,3]
[4,1,5,3,2]
[4,1,5,2,3]
[5,3,2,1,4]
[5,3,1,2,4]
[5,3,4,2,1]
[5,3,4,1,2]
[5,4,1,3,2]
[5,4,1,2,3]
[5,4,2,3,1]
[5,4,2,1,3]
[5,1,2,3,4]
[5,1,4,2,3]
[5,1,4,3,2]
[3,4,5,2,1]
[3,4,5,1,2]
[3,4,1,5,2]
[3,4,2,5,1]
[3,1,2,5,4]
[3,1,5,2,4]
[3,1,4,5,2]
[3,5,4,1,2]
[3,5,4,2,1]
[3,5,2,1,4]
[3,5,1,2,4]
[2,1,5,3,4]
[2,1,4,5,3]
[2,5,4,3,1]
[2,5,4,1,3]
[2,5,1,3,4]
[2,4,1,5,3]
[2,4,5,3,1]
[2,4,5,1,3]
[2,3,4,5,1]
[2,3,1,5,4]
[2,3,5,1,4]
44 results
------解决方案--------------------
我也在学prolog 有机会给我邮件:jamie.xue@gmail.com 共同进步
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
erlang:创建表
mnesia:create_table(student, [{attributes,{name,number,sex}}]).
怎么老是提示:
{aborted,{bad_type,student,{...
-
100分求助,matlab一维矩阵变成二维矩阵,怎么感觉我写的代码这么绕呢
希望把Input矩阵(一维)变成3行4列的二维矩阵Output;我写了下面...
-
为什么没有易语言版块呢?
为什么没有易语言版块呢?
------解决方案--------------------
易语言,还不常用,交流也不比,所以无....
-
批处理的一个问题
想用批处理更改文件属性
@echo off
arrtib -R /S E:\home\*.*
exit
这样写是错误的吗?
为什么没起作用啊
--...
-
几个关于大型机的问题(新手求救啊~)
1、z/OS 和UNIX系统的相同点和相异点有哪些啊?主目录和用户目录的区别是什么啊?
2、用JCL创建一...
-
急求!如何用正则截取一对标签中的字符当中的日期
<p class="source">
<!--[if !IE]>收藏功能<!...
-
批处理代码放在U盘里,如何复制整个硬盘的时间段文件? qivsran老师的答案,谢谢!
@echo off
md 新文件
setlocal enabledelayedexpa...
-
复制文件不带目录文件夹如何修改代码?同名文件仅复制最新的
@echo off
md %computername%资料 2>nul
Cd /d %computername%资料
F...
-
求C里面 全角半角转换函数
求C里面 全角半角转换函数
------解决方案--------------------
我在别处看了,希望对你有帮助。
...
-
求助:关于qtp10 无法识别 maven自动构建flex3.6 的问题
近日遇到maven自动构建flex3.6的问题。希望大家提出宝贵意见。
问...