【问题标题】:Prolog: slash separated string to listProlog:斜杠分隔的字符串列表
【发布时间】:2021-04-28 16:07:21
【问题描述】:

我有一个类似'/home/user/something/' 的字符串,我想将其转换为['/', 'home', '/', 'user', '/', 'something', '/']

我该怎么做?

【问题讨论】:

  • 你有什么不明白的?
  • 我对 prolog 很陌生,而且大多数东西都不懂:/。我什至无法想象如何在 prolog 中解决它
  • atomics_to_string/3atomic_list_concat/3 是您想要的。这些应该分别命名为intersperse_to_string/3intersperse_to_atom/3。然而,问题在于输出列表中的最后一个/。它来自哪里?
  • 哦,只是我忘记输入了。 :D。也谢谢

标签: string list prolog


【解决方案1】:

1- s 谓词接受输入并给出最终的拆分答案。

2- split_string 只用于返回单词,所以它返回L = ["home", "user", "something"]。请注意,我们没有 /

3- 现在我们需要添加"/"。我们使用addslash 谓词,在每个单词之前添加"/"。对于最后一个"/",它会检查基本谓词并将最后一个"/" 添加到列表中。

s(X,L1):-
    split_string(X, "/", "/", L),
    addslash(L,L1).

addslash([],["/"]).
addslash([H|T],[H1,H|L]):-
    H1="/",
    addslash(T,L).


?- s('/home/user/something/', L).
L = ["/", "home", "/", "user", "/", "something", "/"]

【讨论】:

  • 此代码添加强制添加前缀斜杠和后缀斜杠。但是如果我们不想要这些怎么办?如:s('relative/path/four',X).,然后我们得到X = ["/", "relative", "/", "path", "/", "four", "/"]. 这可能太多了。
  • 我已经根据提问者的要求回答了。他/她显然没有提及您所指的测试用例。
  • 对“稳定的业务需求”和“学校作业”以及“哦,又是一个案例”的经验让我对所陈述的内容产生了深深的不信任。
  • 我明白你的意思。
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多