1

我是序言的新手。这是一个假设性问题 - 我意识到它没有实际用途。但是我试图弄清楚如果收到“否”返回,如何让 Prolog 以一种方式运行,如果收到“是”则另一种方式运行。

我正在尝试编写一个gothrough带有列表的函数,检查列表的头部是否等于',',如果是,则将其传递给另一个函数checkitcheckit检查传递的变量是否等于';'。如果是,则返回是。如果不是,则返回 no。我想gothrough了解这个返回值并采取相应的行动。我知道序言实际上并没有返回值,但我真的不知道如何描述我想要做的......所以到目前为止我有这个:

 checkit(H):- H==';'.
 gothrough([H|T]):- H==',', checkit(H), /*what do put here?  if/else statement depending on return value of checkit*/

谢谢!

4

1 回答 1

3

首先,请注意,你调用的方式checkit/1总是会失败,因为H它已经绑定了,','所以它显然不能同时统一';'

现在,关于您的 if-then-else 问题,请使用->/2控制谓词:

gothrough([H|T]):- 
   H==',', 
   (checkit(H) -> 
         writeln(true_part) ; 
         writeln(false_part)
   ).
于 2013-02-14T19:31:55.657 回答