【问题标题】:Prolog: get symbol predicateProlog:获取符号谓词
【发布时间】:2016-04-07 06:29:23
【问题描述】:

我有一个结构符号表:

key → [value | R]

我想写一个谓词 get_symbol/2,它接收一个键(它的第一个参数)并将一个值(它的第二个参数)组合到符号表中与键关联的第一个值。

谁能帮我解决这个问题?非常感谢。

【问题讨论】:

  • 合并如何?你是不是错过了一个谓词参数(返回组合)?
  • 亲爱的@PauloMoura,我认为第二个参数将是组合参数。谢谢!
  • 如果第二个参数包含值,那么它不能也包含组合。您将需要第三个参数。另外,R 是什么?
  • 是的,我知道R列表的其余部分,但不知道它在您的符号表中的意义。所以你是说每个键都有一个或多个与之相关的值?你能举一个get_symbol/2查询的例子吗?你的符号表是如何构成的?
  • 亲爱的@lurker,是的,英语要求相当含糊,我想知道这个工具是否会是这种情况:get_symbol(K, [(K,A)|_]) :- A \== []。 get_symbol(K, [(Y,_)|R]) :- K \== Y, get_symbol(K,R)

标签: prolog


【解决方案1】:

符号表的实际表示尚未描述。让我们假设一个逻辑表示是一组事实,sym_table(Key, Value). 那么符号表就是事实:

sym_table(key1, [val1_1, val1_2, ...]).
sym_table(key2, [val2_1, val2_2, ...]).
...

那么你的get_symbol/2 谓词,它获取给定键的第一个值,看起来像:

get_symbol(Key, Value) :-
    sym_table(Key, [Value | _]).

请注意,如果 (1) Key 不存在于符号表中,或者 (2) Key 没有值(它表示如数据库中的sym_table(Key, []).)。

【讨论】:

  • @LeKimTrang 很高兴我能提供帮助。如果我回答了您的问题,也许您可​​以将我的答案标记为已接受(单击复选标记)和/或将答案投票为“有用”。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多