Programming 板


LINE

※ 引述《RZAddict (鴆羅)》之銘言: : 要練習prolog寫了一個簡單的題目 : 要把list裡面找到的第二個element拿出來 : takeoutSecond(A,B,C) : 把Blist裡面找到的第二個A拿掉 : 我寫了這樣 : takeout(A,[A|B],B). : takeout(A,[B|C],[B|D]) :- takeout(A,C,D). 你寫的takeout/3意思是從第二個參數中將第一個參數取走一次. : takeoutSecond(A,[B|C],[B|D]):- takeoutSecond(A,C,D). : takeoutSecond(A,[A|B],[A|C]):- takeout(A,B,C). : 可是出來的結果是把最後一個A拿掉 然後takeoutSecond/3這個是只把最後一個第一個參數拿走嗎? 好像不是. takeout/3是拿走任何一個可以拿走的第一個參數, (而且 takeout(1,[2,3,4],L) 為false... 這個,沒有意義吧!? ) 所以,第二句的意思是 如果你可以從B把A拿走而得到C, 就可以從 [A|B] 中拿走 B 中的 A 而得到 [A|C]. 根據第二句的意思,會出現拿走最後一個A的答案. 然後看第一句: 如果你從C list,使用takeoutSecond/3規則,拿走A而得到D, 那麼就可以從 [B|C] 的 C 中拿走A,而得到 [B|D]. 結論是因為 takeout/3 可以拿走所出現的任何一個第一個參數, 所以 takeoutSecond(2, [1,2,3,2,4,2,5], L) 的結果是: L = [1, 2, 3, 2, 4, 5] ; %%拿走最後一個 L = [1, 2, 3, 4, 2, 5] ; %%拿走倒數第二個 L = [1, 2, 3, 2, 4, 5] ; %%拿走最後一個 false. 重複出現同一結果,是因為某個規則重複執行. : 如果加一行takeoutSecond(A,[],[]). : 就變成完全不會拿掉 : 請問哪裡出錯了?? 加一行 takeoutSecond(_, [], []). 會增加一個沒有任何項目被拿掉的結果. takeoutSecond(2, [1,2,3,2,4,2,5], L) 會多得到一個 L = [1, 2, 3, 2, 4, 2, 5] ; 這一筆結果. 這是因為第一句規則中,可以對第二和第三個參數一直將head拿走, 最後就變成 takeoutSecond(A, [], []). 執行為 true. 所以什麼都沒有拿掉. ------------------------ 接下來是我的解題: 從一列中拿走第二個occurrence, 首先可以想到拿走第一個occurrence很簡單: remove_first(A, [A|B], B) :- !. %%從 [A|B] 中拿走第一個出現的A. 此外也不要忘了另一種情況: remove_first(A, [B|C], [B|D]) :- remove_first(A, C, D). 注意第一句要有一個cut. 然後你可以確定: ?- remove_first(2, [1,3,4,5,2,6,2], L). L = [1, 3, 4, 5, 6, 2]. 若已經有 remove_first/3 而且你相信它完全正確,那就可以寫 remove_second/3: remove_second(A, [A|B], [A|C]) :- remove_first(A, B, C). remove_second(A, [B|C], [B|D]) :- A \== B, remove_second(A, C, D). -- /yau --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.70.30







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP