현재 OCaml을 배우려고합니다. 그리고 나는이 파이썬 코드에 해당하는 검색 오전 : OCaml에서 함수의 인수로리스트 사용하기
f(*l[:n])
은 내가이 동작을 에뮬레이트하는 함수를 작성하려고 거라고 생각하지만, 그것은 작동하지 않습니다. 여기
let rec arg_supply f xs n =
if n = 0 then
f
else
match xs with
| x :: remainder -> arg_supply (f x) remainder (n - 1);;
그리고 내가 오류 메시지입니다 : 여기에 코드가 어떤 도움에 감사드립니다
Error: This expression has type 'a but an expression was expected of type
'b -> 'a
The type variable 'a occurs inside 'b -> 'a
, 그것은 내 기능의 작동을 얻을 수있는 방법, 또는 첫 번째를 제공하는 또 다른 방법이 될 리스트의 n 요소를 인수로 함수에 전달합니다.
편집 : n
은 함수를 호출하는 데 필요한 인수의 양과 그것 때문에 상수입니다.
편집 :이 역시 작동하지 않습니다.
type ('a, 'r) as_value = ASFunction of ('a -> ('a, 'r) as_value) | ASReturnValue of 'r;;
let rec _arg_supply f_or_rval xs n =
if n = 0 then
f_or_rval
else
match f_or_rval with
| ASFunction func -> (
match xs with
| x :: r -> _arg_supply (func x) r (n - 1)
| _ -> failwith "too few arguments for f"
)
| ASReturnValue out -> out;;
그럴 수 없습니다. 'arg_supply'의 타입은'n'의 런타임 값에 의존해야합니다. – melpomene
이것은 일반적인 [XY 문제] (http://xyproblem.info/)입니다. 대신 당신이 정말로하고 싶은 것을 설명해 주시겠습니까? – Drup
@Drup'name_of_the_function (List.nth li 0) (List.nth li 1) (List.nth li 2) ...'을 쓰지 않고도 인자가리스트에있는 함수를 호출하고 싶습니다. 그리고 리턴 타입이 ASFunction 일 필요가 있기 때문에 시도한 솔루션이 도움이되지 않는다고 생각합니다. 그러나 나는이 유형에 맞게 함수를 "확장"할 수있었습니다. – CodenameLambda