Мне нужна функция, которая принимает произвольное количество аргументов (все одного типа), делает с ними что-то, а потом возвращает результат. Список аргументов неосуществим в моем конкретном случае.
Когда я просмотрел библиотеки haskell, я увидел, что функция printf
(из модуля Text.Printf
) использует подобный трюк. К сожалению, я не мог понять эту магию, посмотрев на источник.
Может кто-нибудь объяснить, как достичь этого, или, по крайней мере, на какой-либо веб-странице/документе/где бы я мог найти хорошее описание для этого?
Мотивация:
Причина, в которой я нуждаюсь, очень проста. Для школы (класс компьютерных наук) нам необходимо написать модуль, который способен "записывать" математическое выражение, выражать его как строку (Via, записывая экземпляр Num/Real/etc для собственного типа данных) и выполнять различные операции над ним.
Этот тип данных содержит специальный конструктор для переменной, который может быть заменен значением или любым другим значением определенной функции. Одна из целей - написать функцию, которая принимает такое выражение с некоторым количеством переменных (пары типа (Char,Rational)
) и вычисляет результат выражения. Мы должны посмотреть, как лучше выразить цель этой функции. (Моя идея: функция возвращает другую функцию, которая принимает ровно столько аргументов, сколько vars, которые определены в функции - кажется невозможным).