【问题标题】:Translate Prolog Words翻译序言词
【发布时间】:2014-01-25 22:06:40
【问题描述】:

我正在做这个很棒的 Prolog 项目,但我陷入了这种情况,我需要将某些单词翻译成其他单词(例如,“i”翻译成“you”。“my 翻译成“your”)

这就是我所做的,我很确定这有点不确定。我输入句子,当它转换时,它只会改变一个词,然后对我来说很古怪。 (例如,“我感到高兴”变成“你”然后它就崩溃了。)

translate([]).
translate([H|T], [NewH|NewT]):-
             means(H,NewH);
             spit(T,NewT).
means(i,you).
means(my,your).
means(mine,yours).

【问题讨论】:

    标签: prolog


    【解决方案1】:

    解决方法如下:

    translate([], []).
    translate([H|T], [NewH|NewT]):-
                 means(H, NewH),
                 translate(T,NewT).
    means(i, you) :- !.
    means(my, your) :- !.
    means(mine, yours) :- !.
    means(X, X).
    

    变化如下:

    1. 我将丢失的参数修复为 translate 的第一个定义(如果参数数量不匹配,它被认为是一个完全独立的函数)。
    2. 翻译完第一项后,我在列表的其余部分上调用 translate
    3. 我断言,除非另有说明,否则每个词都意味着它本身。 :- ! 部分的意思是如果你匹配这个,不要尝试其余的(这是为了避免列表总是与自己匹配)。

    示例用法:

    ?- translate([this, is, i], X).
    X = [this, is, you].
    

    【讨论】:

    • 使用 SWI-Prolog 的maplist/N,你可以只写?- maplist(means, [this, is, i], X). X = [this, is, you].,即不需要定义translate/2
    • @Kaarel,这个问题被标记为“初学者”,所以我认为最好一步一步地展示它。
    猜你喜欢
    • 2011-03-13
    • 2013-08-21
    • 2018-04-08
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2016-10-27
    相关资源
    最近更新 更多