|
查看: 1343|回复: 9
|
PROLOG代碼求助
[复制链接]
|
|
|
- transpose1([[]|_], []):-!.
- transpose1(Square, [Heads|RestTranspose]):-
- remove_heads(Square, Heads, Rest),
- transpose1(Rest, RestTranspose).
- remove_heads([],[],[]).
- remove_heads([[X|RestRow]|Rest], [X|RestHeads], [RestRow|RestRest]):-
- remove_heads(Rest, RestHeads, RestRest).
复制代码
這裡網上的代碼, 是transpose matrix的代碼
有高手可以解釋這代碼是如何操作嗎?
比如([[]|_], [])代表甚麼, (Square, [Heads|RestTranspose])代表甚麼, ([[X|RestRow]|Rest], [X|RestHeads], [RestRow|RestRest])又代表甚麼
試過用write把裡面的variable操作時都列出來, 不過資質低始終不明白. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 22-12-2009 05:23 PM
|
显示全部楼层
忘記附上input output
?- transpose([[1, 2, 3], [4, 5, 6], [7, 8, 9]], Output).
Output = [[1, 4, 7], [2, 5, 8], [3, 6, 9]] |
|
|
|
|
|
|
|
|
|
|
发表于 22-12-2009 05:39 PM
|
显示全部楼层
prolog跟其他语言不同是syntax不多。
用法跟其他的语言不同,不能用普通的语言来理解。因为操作方式很不同。
用recursion很多
[]代表list。一个matrix可以
[[1,2,3],
[4,5,6],
[7,8,9]]
然后[_]就是把list是matchall
第一个transpose1是要,但process 完毕,就停。
第一个remove_heads为什么会这样写? 如果你明白为什么第一个transpose为何这样写的话,这个问题就很简单。
第二个transpose1就是,process matrix的主要部分,用remove_head。然后,在call transpose1来走。
在prolog呢,大字母是variable。
然后|是把第一个element 和其他在list里分出来。
你应该看得出,remove_head里,第一个parameter是2d list
有什么问题可以在问。。。因为解释能力太差了。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 22-12-2009 05:59 PM
|
显示全部楼层
prolog跟其他语言不同是syntax不多。
用法跟其他的语言不同,不能用普通的语言来理解。因为操作方式很不 ...
sweemenghacker 发表于 22-12-2009 05:39 PM 
首先謝謝你的回答^^
不過我還是不大明白..
比如我打
- transpose1([[1, 2, 3], [4, 5, 6], [7, 8, 9]], Output).
复制代码
第1個tranpose1因為不match所以接下去
然後Square=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], 帶去remove_heads
到這裡我就不懂怎樣排了.. |
|
|
|
|
|
|
|
|
|
|
发表于 22-12-2009 06:07 PM
|
显示全部楼层
|
但你process完毕后,他们会process到没有东西可以process了。当然会match 到 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 22-12-2009 06:09 PM
|
显示全部楼层
但你process完毕后,他们会process到没有东西可以process了。当然会match 到
sweemenghacker 发表于 22-12-2009 06:07 PM 
- remove_heads([[X|RestRow]|Rest], [X|RestHeads], [RestRow|RestRest]):-
复制代码
我還是上面這個不明白.. |
|
|
|
|
|
|
|
|
|
|
发表于 22-12-2009 06:13 PM
|
显示全部楼层
list comprehension.
把list里第一个element和其他的分离 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 22-12-2009 06:16 PM
|
显示全部楼层
list comprehension.
把list里第一个element和其他的分离
sweemenghacker 发表于 22-12-2009 06:13 PM 
OK..嘗試了解先
謝謝你的幫忙^^ |
|
|
|
|
|
|
|
|
|
|
发表于 24-12-2009 04:13 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 24-12-2009 05:14 PM
|
显示全部楼层
慢慢看
晨天 发表于 24-12-2009 04:13 PM 
好的, 謝謝
1開始我也是看這些教學不過不是很明白, 無法活用
昨天看了比較多example了明白了 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|