gpt4 book ai didi

prolog - prolog 是否有 spread/splat/*args 运算符?

转载 作者:行者123 更新时间:2023-12-04 23:16:13 24 4
gpt4 key购买 nike

在许多过程语言(例如 python)中,我可以“解包”一个列表并将其用作函数的参数。例如...

def print_sum(a, b, c):
sum = a + b + c
print("The sum is %d" % sum)

print_sum(*[5, 2, 1])

此代码将打印:“ The sum is 8

这是 documentation for this language feature .

prolog 有类似的功能吗?

有没有办法在 Prolog 中复制这种参数解包行为?

例如,我想在将列表变量传递给 call 之前对其进行解包。 .

我可以写一个这样的谓词吗?
assert_true(Predicate, with_args([Input])) :-
call(Predicate, Input).

% Where `Input` is somehow unpacked before being passed into `call`.

...然后我可以查询
?- assert_true(reverse, with_args([ [1, 2, 3], [3, 2, 1] ])).
% Should be true, currently fails.

?- assert_true(succ, with_args([ 2, 3 ]).
% Should be true, currently fails.

?- assert_true(succ, with_args([ 2, 4 ]).
% Should be false, currently fails.

笔记
  • 你可能认为这是一个 XY Problem .有可能,但不要气馁。只收到我的问题标题的答案是理想的。
  • 你可能会告诉我,我对这个问题的处理很糟糕。我知道你的意图是好的,但这种建议无助于回答这个问题。请引用以上几点。
  • 也许我在过多的程序思维中接近 Prolog。如果是这样,那么什么样的心态可以帮助我解决问题?
  • 我正在使用 SWI-Prolog。
  • 最佳答案

    内置(=..)/2 (univ) 服务于这个目的。例如。

    ?- G =.. [g, 1, 2, 3].
    G = g(1,2,3).

    ?- g(1,2,3) =.. Xs.
    Xs = [g,1,2,3].

    但是,请注意 (=..)/2 的许多用途其中参数数量是固定的可以用 call/2 代替... call/8 .

    关于prolog - prolog 是否有 spread/splat/*args 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41438966/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com