【发布时间】:2017-12-03 17:54:18
【问题描述】:
我对 Prolog 很陌生,所以假设我对术语知之甚少。 我在 SWI-prolog 中使用 swipl。
我想检查一个字符串是否以左波浪括号('{')开头并以右波浪括号('}'}结束)
我在网上阅读的一些answers 引导我将以下内容编程到我的知识库中,以检查字符串是否以左波浪括号开头。
start_left_squiggle([Letter|_]):-
Letter = '{'.
但是当我运行这个函数时,当我期望它返回 true 时,我得到了 false。
?- start_left_squiggle('{hello').
false.
同样,answers 检查最后一个字符是否为波浪形括号似乎是正确的,这让我编写了以下代码。
last_char(str, X):-
name(S, N),
reverse(N, [F|_]),
name(X, [F]).
end_right_squiggle(Werd):-
last_char(Werd, Last),
Last = '}'.
当我希望它返回 true 时,我在运行该函数时再次得到 false。
?- end_right_squiggle('hello}').
false.
【问题讨论】:
-
'hello}'在这里,您在开头和结尾没有两个大括号,因此您应该得到 false。 -
@LuaiGhunim 我正在分别对这两个函数进行测试。如果字符串以“{”开头,则第一个函数应返回 true,如果字符串以“}”结尾,则第二个函数应返回 true。字符串以什么结尾与第一个函数无关,字符串以什么开头与第二个函数无关。
-
简单的方法是将字符串转换为列表,然后尝试做进一步的操作。