простая задача: все, что я хочу, - это функция, применяющая список параметров к функции curried.Применить список параметров к функции в кармане
Предположим, что наша функция является известный add
один:
fun add a b = a + b;
Теперь все, что я хочу, это функция, чтобы применить список (скажем [1, 5]
) в add
. Это выглядело бы так:
apply add [1, 5];
Это кажется сложнее, чем я думал. Моя попытка:
fun apply f ps = foldl (fn (p, f') => f' p) f ps;
Но это получает это веселое читаемое сообщение об ошибке:
Error: operator and operand don't agree [circularity]
operator domain: 'Z * ('Z -> 'Y) -> 'Z -> 'Y
operand: 'Z * ('Z -> 'Y) -> 'Y
in expression:
foldl (fn (p,f') => f' p)
Теперь, что это неправильно о моей реализации? Возможно ли это в SML/NJ?
Приветствия и благодарности за подсказки и ответы.
Да, я как-то подозревал это. Но все же, я действительно думаю, что должен быть способ достижения этой задачи ... – scheffield
@scheffield. Ваш конкретный случай может быть жестко закодирован, но это не очень полезно. Я считаю, что вы могли бы решить общую проблему с системой типа Idris '- вам нужно было бы сопоставить арность функции с длиной списка, что, по моему мнению, * более или менее требовало бы типа Turing-complete система. Конечно, я также могу говорить из-за моего дна (каламбур). – molbdnilo