åºè¨€ã€‚两个å˜é‡åŒå

时间:2016-05-18 20:54:24

标签: prolog

my_reverse(L1,L2) :- my_rev2(L1,L2,[]).

my_rev2([],L2,L2).
my_rev2([X|Xs],L2,Acc) :- my_rev2(Xs,L2,[X|Acc]).

您好,

第二行中有两个相åŒçš„å˜é‡å称是什么æ„æ€ï¼Ÿ

1 个答案:

答案 0 :(得分:5)

我想“第二行â€ä½ çš„æ„æ€æ˜¯â€œç¬¬ä¸‰è¡Œâ€ï¼Œæ‰€ä»¥æˆ‘们在谈论这个æ¡æ¬¾ï¼š

my_rev2([], L2, L2).

这是my_rev2/3的第一个æ¡æ¬¾ï¼Œå¯¹å§ï¼Ÿ

那么在å­å¥å¤´ä¸­ï¼ŒåŒæ ·çš„å˜é‡å‡ºçŽ°ä¸¤æ¬¡æ˜¯ä»€ä¹ˆæ„æ€ï¼Ÿé™„带问题:第一个å‚数在æ¡æ¬¾å¤´ä¸­æ˜¯[]是什么æ„æ€ï¼Ÿ

如果您首先引入新å˜é‡ç„¶åŽè¿›è¡Œæ‰€æœ‰ç»Ÿä¸€æ˜¾å¼ï¼Œè¿™ä¸€åˆ‡éƒ½ä¼šå˜å¾—清晰。我们å¯ä»¥å†™ä¸‹å¦‚下æ¡æ¬¾ï¼š

my_rev2(Ls, L1, L2) :- Ls = [], L1 = L2.

现在很明显:my_rev(Ls, L1, L2)拥有,如果 Ls = [] å’Œ L1 = L2。当然,没有必è¦é‚£ä¹ˆå†—长,所以我们å¯ä»¥ç®€å•åœ°å°†è¿™äº›ç»Ÿä¸€ç›´æŽ¥å¼•å…¥æ¡æ¬¾å¤´éƒ¨ï¼

è¿™å¯èƒ½å¬èµ·æ¥å¾ˆç®€å•ï¼Œä½†äº‹å®žä¸Šä½ çš„问题éžå¸¸å¥½ï¼šæˆ‘看到很多åˆå­¦è€…没有将这些统一纳入å­å¥å¤´ï¼Œä¸å¿…è¦åœ°ä½¿ä»–们的代ç å¤æ‚化,åŒæ—¶ä¹Ÿæ˜¯å¦‚此时间(这通常是相辅相æˆçš„)也使它效率é™ä½Žã€‚

<å°æ—¶/> 关于样å¼çš„å°æ³¨é‡Šï¼šæˆ‘建议让表示列表的å˜é‡å称以“sâ€ç»“尾,类似于常规英语å¤æ•°å½¢å¼ã€‚此外,将下划线(_)附加到辅助谓è¯çš„å称通常很有用。所以,我会写出类似于:

çš„åˆå§‹äº‹å®ž
reverse_([], Ls, Ls).

当然,这在语义上等åŒäºŽï¼š

reverse_([], As, Bs) :- As = Bs.