SWI Prolog中如何在hypothesize等term内编写无下划线的多单词内容
SWI Prolog多单词term编写解决方案
- 在SWI Prolog中,包含空格、特殊字符的原子(即你提到的多单词term),直接用单引号包裹整个内容即可,这是Prolog的标准语法规范,适配所有谓词使用场景。
你需要的small cat写法适配示例如下:
hypothesize('small cat') :- small, cat, !.
- 如果你希望保留下划线形式的term编写习惯,又需要输出时不显示下划线,可以自定义简单的输出转换谓词处理,示例如下:
% 下划线原子转换为空格分隔的可读字符串 term_to_readable(UnderlineTerm, ReadableStr) :- atomic_list_concat(WordList, '_', UnderlineTerm), atomic_list_concat(WordList, ' ', ReadableStr). % 调用示例:输入small_cat会输出small cat print_hypothesis(Term) :- hypothesize(Term), term_to_readable(Term, Str), write(Str).
补充说明:单引号包裹的多单词原子和普通小写标识符原子的使用逻辑完全相同,匹配、查询、动态断言等操作都不需要额外调整语法,直接正常使用即可。
内容的提问来源于stack exchange,提问作者MJ HH
相关产品推荐
相关产品推荐

