【发布时间】:2013-02-22 02:23:31
【问题描述】:
我是 prolog 的新手,我正在尝试弄清楚如何使用 if/else 语句和递归。为了说明,我编写了一个简单的 prolog 程序。该程序是无用的(因为它的功能是无用的),但它帮助我说明我的问题。程序获取一个列表,检查列表的头部,看看它是否是最后一个元素;如果不是,它将头部添加到临时列表变量中,并使用列表的尾部以递归方式运行程序。它应该在最后输出列表。程序:
gothrough([H|T], B, C):-
append(B,H,B),
( (T == [])
-> C=B
; gothrough(T, B, C)
).
来电:gothrough([sample, phrase, here], [], C).
预期输出:C = [sample, phrase, here]
当前输出:no
对我做错了什么有帮助吗?
谢谢!
【问题讨论】:
-
append的所有参数都应该是列表,只有当 H 是空列表时,append(B, H, B)才能成功。看这段代码,很难理解为什么你认为 C 最终会等于第一个参数,或者 B 将要做什么,所以我认为你有比递归更深层次的问题。 -
你说得对……我简化了程序,我忘了设置 C 等于 B。但是你能详细说明一下 H 是空列表吗?我以为
append将B和H的内容附加到B中。例如,如果B = [昨天]和H = [今天],那么append(B, H, B)= [昨天,今天]?
标签: if-statement recursion prolog