Можно ли использовать maplist / 3 с «анонимным» предикатом?

То, что я хочу достичь с помощью maplist / 3, может, например, быть следующим псевдокодом:

maplist(
   lambda X: Z/Y=X, to_lower(Z,LC), char_code(L,LC), return L/Y,
   ['A'/42, 'B'/500],
   Res).
Res = ['a'/42, 'b'/500]

Я знаю, что можно написать например

maplist(plus(1), [1,2,3,4], Res).
Res = [2,3,4,5].

Так что я мог бы просто определить псевдокод lambda X: Z/Y=X, to_lower(Z,LC), char_code(L,LC), return L/Y как обычный предикат и использовать этот предикат в списке карт ...

Однако мне любопытно, можно ли это сделать, не создавая совершенно новый предикат?

Причина, по которой я хочу сделать это таким образом, заключается в том, что я считаю, что это более естественно для чтения, а не для прыжков в коде в поисках предиката


person Michelrandahl    schedule 25.03.2015    source источник


Ответы (1)


См. library(lambda).

?- maplist(\ (Z/Y)^(L/Y)^ ( char_code(Z,ZC),
                            to_lower(ZC,LC),
                            char_code(L,LC) ), ['A'/42, 'B'/500], Res).
Res = [a/42, b/500].
person false    schedule 25.03.2015