我初学了两周的prolog

Xiao_Peter 2011-05-27 12:31:01
我初学了两周的prolog 感觉特别难懂 我应该怎么去理解呢
特别是递归啊 回溯啊 程序怎么运行的都搞不清 尤其是处理表的那块。。
好气馁啊。。。
求助。。。
...全文
210 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
DSVCNET 2011-06-07
  • 打赏
  • 举报
回复
真搞笑,win-prolog求和只能是符号运算而且
1+2不=3不=2+1只能=1+2,这有意义么,所以只有子集[5]满足条件。

然后就是要用内部is

subset([H|T],X):-
subset(T,X).
subset([H|T],[H|X]):-
subset(T,X).
subset([H|T],[H | [] ]).

sum([H|T],S):-
T=[],
is(S,H),
!.
sum([H|T],S):-
sum(T,Y),
is(S,Y+H).

subsum(U,S,SUB):-
subset(U,SUB),
sum(SUB,S).
Xiao_Peter 2011-06-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dsvcnet 的回复:]
真搞笑,win-prolog求和只能是符号运算而且
1+2不=3不=2+1只能=1+2,这有意义么,所以只有子集[5]满足条件。

然后就是要用内部is

subset([H|T],X):-
subset(T,X).
subset([H|T],[H|X]):-
subset(T,X).
subset([H|T],[H | [] ]).

sum([H|T],S):-
T=[……
[/Quote]非常感谢你~~
Xiao_Peter 2011-06-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dsvcnet 的回复:]
真搞笑,win-prolog求和只能是符号运算而且
1+2不=3不=2+1只能=1+2,这有意义么,所以只有子集[5]满足条件。

然后就是要用内部is

subset([H|T],X):-
subset(T,X).
subset([H|T],[H|X]):-
subset(T,X).
subset([H|T],[H | [] ]).

sum([H|T],S):-
T=[……
[/Quote]非常感谢你~~
Xiao_Peter 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dsvcnet 的回复:]
那把win-prolog发我邮箱我看看,ybssap@qq.com
[/Quote]行
DSVCNET 2011-06-06
  • 打赏
  • 举报
回复
那把win-prolog发我邮箱我看看,ybssap@qq.com
Xiao_Peter 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dsvcnet 的回复:]
引用 9 楼 dsvcnet 的回复:

可能推理机和你那个还是有点区别的吧。不知道你用的是什么版本的解释器。

该问题应该是没有产生回溯机制。加个fail就可以了。

subsum(U,SUM,SUB):-
subset(U,SUB),
sum(SUB,SUM),
fail.


这个方法不一定可以啊,我也不清楚win-prolog的回溯机制是怎么样的,理论上结果为真的话……
[/Quote]还是不行啊朋友,我用的是win-prolog4.320.
这个符号?-自动就有的,没有问题
哎 这个解释器是从学校里拷过来的 应该没有问题 因为一些简单的问题都能解答。
还是很谢谢你啊 有qq吗 可以加你吗
DSVCNET 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dsvcnet 的回复:]

可能推理机和你那个还是有点区别的吧。不知道你用的是什么版本的解释器。

该问题应该是没有产生回溯机制。加个fail就可以了。

subsum(U,SUM,SUB):-
subset(U,SUB),
sum(SUB,SUM),
fail.
[/Quote]

这个方法不一定可以啊,我也不清楚win-prolog的回溯机制是怎么样的,理论上结果为真的话的话也会自动回溯。

你是不是没有加“?-”这个求解符号啊,不过VISUAL PROLOG里没这个符号我也没用过。
DSVCNET 2011-06-05
  • 打赏
  • 举报
回复
可能推理机和你那个还是有点区别的吧。不知道你用的是什么版本的解释器。

该问题应该是没有产生回溯机制。加个fail就可以了。

subsum(U,SUM,SUB):-
subset(U,SUB),
sum(SUB,SUM),
fail.
Xiao_Peter 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dsvcnet 的回复:]
刚看了一下表,现学现卖。用PIE推理机运行的,应该跟LZ要求的一样。

这个问题其实就是要遍历所有子集比较难,自然语言描述的话如下:
设:
H是以U的第一个元素为元素的集合,
T是U-H,即U和H的差集合。
子句:
X是U的非空子集,若
X是T的非空子集,或
X等于H,或
X等于H并上U的非空子集。

程序如下:
sum([H|T],Sum):-
T……
[/Quote]太感谢啦~~但是我用win—prolog运行的结果不对啊 为什么啊?
我运行的结果如下:
subsum([1,2,5,3,2],5,SUB).
SUB = [5] ;

no
为什么呢朋友?
DSVCNET 2011-06-02
  • 打赏
  • 举报
回复
刚看了一下表,现学现卖。用PIE推理机运行的,应该跟LZ要求的一样。

这个问题其实就是要遍历所有子集比较难,自然语言描述的话如下:
设:
H是以U的第一个元素为元素的集合,
T是U-H,即U和H的差集合。
子句:
X是U的非空子集,若
X是T的非空子集,或
X等于H,或
X等于H并上U的非空子集。

程序如下:
sum([H|T],Sum):-
T=[],
Sum=H.
sum([H|T],Sum):-
sum(T,Sum-H).

subset(U,X):-
U=[H|T],
subset(T,X).
subset([H|T],X):-
X=[H].
subset([H|T],X):-
subset(T,Y),
X=[H|Y].

subsum(U,SUM,SUB):-
subset(U,SUB),
sum(SUB,SUM).

推理机给出的结果:
subsum([1,2,5,3,2], 5, SUB).
SUB = [3,2].

SUB = [5].

SUB = [2,3].

SUB = [1,2,2].

4 Solutions

居然卡了我好一下,感觉我还是没有摆脱赋值语句的魔咒。。。
domonate 2011-06-01
  • 打赏
  • 举报
回复
看着这个语言确实很恼火!加油吧!帮你顶一下,我是用matlab的!
Xiao_Peter 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 domonate 的回复:]
看着这个语言确实很恼火!加油吧!帮你顶一下,我是用matlab的!
[/Quote]
谢谢啊,恼火恼火啊,虽然只是因为课程需要短暂的接触一下,但是弄的心里可不爽因为完全没有掌握他的思考方式啊,学习其他语言的时候也没有这么迷茫过啊,说是做好的人工智能语言,但是真的很不好明白他的编程思想在哪里,面向过程?不像。。面向对象?更不像啊。。
好吧,我放弃它了。。
Xiao_Peter 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dsvcnet 的回复:]
我当初学的时候也是学得一肚子火,网上很多所谓的教程根本不提怎么编译。而PROLOG好像分为解释型运行和编译型运行两种。反正我用VP就重来没成功运行过网上给的例子。

不知道LZ用的是什么编译器,反正我用的是visual prolog,参考的是这篇《Visual Prolog初学指南》http://download.csdn.net/source/1439073。

如果只是用控制台的话前面……
[/Quote]
谢谢啊 希望能得到你的帮助
Xiao_Peter 2011-06-01
  • 打赏
  • 举报
回复
是啊 我现在还在纠结一个问题 不知道能帮忙解答下吗
Give a PROLOG program subsum( Set, Sum, SubSet) such that with Set a list of
numbers, SubSet is a sublist of this list, and such that the sum of the numbers in SubSet(求出符合和的条件的所有子集)
equals Sum. For eample(例如):
?- subsum([1,2,5,3,2], 5, Sub).
Sub = [1,2,2];
Sub = [2,3];
Sub = [5];
Sub = [3,2];
no.

这个死活想不出思路 还是prolog这种语言没有领悟啊 感觉比c++和java入门难多了
DSVCNET 2011-05-30
  • 打赏
  • 举报
回复
我当初学的时候也是学得一肚子火,网上很多所谓的教程根本不提怎么编译。而PROLOG好像分为解释型运行和编译型运行两种。反正我用VP就重来没成功运行过网上给的例子。

不知道LZ用的是什么编译器,反正我用的是visual prolog,参考的是这篇《Visual Prolog初学指南》http://download.csdn.net/source/1439073。

如果只是用控制台的话前面几章可以先不看。比较重要的一个是第5章,不过里面的例子是在推理机上面运行的,不能编译成程序。然后就是第9章,尤其是谓词段和子句段这两节。第10章有些现成的例子,可以直接照抄试着运行感受一下。
DISINHUI 2011-05-28
  • 打赏
  • 举报
回复
http://wenku.baidu.com/search?word=prolog&lm=0&od=0
How to Run Prolog 2. Sample Programs -- Descriptions 2.1 Map colorings 2.2 Two factorial definitions 2.3 Towers of Hanoi puzzle 2.4 Loading programs, editing programs 2.5 Negation as failure 2.6 Tree data and relations 2.7 Prolog lists and sequences 2.8 Change for a dollar 2.9 Map coloring redux 2.10 Simple I/O 2.11 Chess queens challenge puzzle 2.12 Finding all answers 2.13 Truth table maker 2.14 DFA parser 2.15 Graph structures and paths 2.16 Search 2.17 Animal identification game 2.18 Clauses as data 2.19 Actions and plans 3. How Prolog Works 3.1 Prolog derivation trees, choices and unification 3.2 Cut 3.3 Meta-interpreters in Prolog 4. Built-in Goals 4.1 Utility goals 4.2 Universals (true and fail) 4.3 Loading Prolog programs 4.4 Arithmetic goals 4.5 Testing types 4.6 Equality of Prolog terms, unification 4.7 Control 4.8 Testing for variables 4.9 Assert and retract 4.10 Binding a variable to a numerical value 4.11 Procedural negation, negation as failure 4.12 Input/output 4.13 Prolog terms and clauses as data 4.14 Prolog operators 4.15 Finding all answers 5. Search in Prolog 5.1 The A* algorithm in Prolog 5.2 The 8-puzzle 5.3 αβ search in Prolog 6. Logic Topics 6.1 Chapter 6 notes 6.2 Positive logic 6.3 Convert first-order logic to normal form 6.4 A normal rulebase goal interpreter 6.5 Evidentiary soundness and completeness 6.6 Rule tree visualization using Java 7. Introduction to Natural Language Processing 7.1 Prolog grammar parser generator 7.2 Prolog grammar for simple English phrase structures 7.3 Idiomatic natural language command and question interfaces 8. Prototyping with Prolog 8.1 Action specification for a simple calculator 8.2 Animating the 8-puzzle (§5.2) using character graphics 8.3 Animating the blocks mover (§2.19) using character graphics 8.4 Java Tic-Tac-Toe GUI plays against Prolog opponent (§5.3) 8.5 Structure diagrams and Prolog

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧