Кажется, вы ожидаете, что это выражение будет строкой:
List.hd a; s; function1 List.tl a s
Однако значение оператора ;
заключается в том, чтобы вычислить выражение слева и затем проигнорировать его значение.(Также считается плохой формой, если тип не является единицей.) Затем оцените выражение справа, которое является значением выражения.
Итак, это выражение говорит, что нужно оценить List.hd a
, затем забудьтеЗначение.Затем оцените s
, затем забудьте значение.Затем оцените рекурсивный вызов.
Итак, первая проблема - собрать эти вещи в строку.
Оператор ^
объединяет две строки.Итак, что-то вроде этого ближе к тому, что вы хотите:
List.hd a ^ s ^ function1 (List.tl a) s
Обратите внимание, что вам нужно заключить в скобки вызов List.tl
.В противном случае это выглядит как два отдельных параметра для function1
.