my_reverse(L1,L2) :- my_rev2(L1,L2,[]).
my_rev2([],L2,L2).
my_rev2([X|Xs],L2,Acc) :- my_rev2(Xs,L2,[X|Acc]).
您好,
第二行ä¸æœ‰ä¸¤ä¸ªç›¸åŒçš„å˜é‡å称是什么æ„æ€ï¼Ÿ
ç”案 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.