string - Prolog:检查字符串的第一个和最后一个字符是否是左右花括号 ('{' & '}' )

标签 string prolog equality

我对序言非常陌生,所以假设我对术语知之甚少。 我在 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.

最佳答案

使用 sub_atom(Atom, Before, Length, After, Subatom) 像这样:

?- sub_atom('{abc}',0,1,_,C).
   C = '{'.
?- sub_atom('{abc}',_,1,0,C).
   C = '}'.

或者只是测试:

?- sub_atom('{abc}',0,1,_,'{').
   true.
?- sub_atom('{abc}',_,1,0,'}').
   true.

关于string - Prolog:检查字符串的第一个和最后一个字符是否是左右花括号 ('{' & '}' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621388/

相关文章:

javascript - 获取字符串中的重复字符数

C 程序 - 在每个其他字符之间放置一个星号而不替换字符串中的那些字符

prolog - 运算符是列表

java - 将 String.endsWith(..) 与正则表达式等效项进行比较

prolog - 这个序言优化解决方案有什么问题?

prolog - 后继算术和的最佳绿色削减是什么?

javascript - 如何统计字符串中所有大写字符的个数?

java - GSON 可以用来检查对象相等性而不是覆盖 POJO 类的 equals 吗?

C# 字符串相等运算符返回 false,但我很确定它应该是 true...什么?

c++ - atof() 返回 float 而不是 double