佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1343|回复: 9

PROLOG代碼求助

[复制链接]
发表于 22-12-2009 05:06 PM | 显示全部楼层 |阅读模式
  1. transpose1([[]|_], []):-!.
  2. transpose1(Square, [Heads|RestTranspose]):-
  3.         remove_heads(Square, Heads, Rest),
  4.         transpose1(Rest, RestTranspose).

  5. remove_heads([],[],[]).
  6. remove_heads([[X|RestRow]|Rest], [X|RestHeads], [RestRow|RestRest]):-
  7.         remove_heads(Rest, RestHeads, RestRest).
复制代码


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

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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

首先謝謝你的回答^^

不過我還是不大明白..
比如我打
  1. 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

  1. remove_heads([[X|RestRow]|Rest], [X|RestHeads], [RestRow|RestRest]):-
复制代码


我還是上面這個不明白..
回复

使用道具 举报

Follow Us
发表于 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..嘗試了解先
謝謝你的幫忙^^
回复

使用道具 举报


ADVERTISEMENT

发表于 24-12-2009 04:13 PM | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 24-12-2009 05:14 PM | 显示全部楼层
慢慢看
晨天 发表于 24-12-2009 04:13 PM


好的, 謝謝
1開始我也是看這些教學不過不是很明白, 無法活用
昨天看了比較多example了明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 30-11-2025 04:47 PM , Processed in 0.122093 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表