8

많은 함수 프로그래밍 언어가 curried parameters을 지원합니다. currying 함수를 지원하기 위해 함수에 대한 매개 변수는 본질적으로 마지막 매개 변수를 생략 할 수있는 튜플이며 더 작은 튜플을 필요로하는 새 함수를 만듭니다.명명 된 매개 변수를 생략 할 때 currying을 수행하는 프로그래밍 언어가 있습니까?

저는 함수 매개 변수에 항상 레코드 (예 : named parameters)를 사용하는 언어를 설계하려고합니다. 내 메이크업에

따라서 간단한 수학 함수 언어가 될 생각 :

add { left : num, right : num } = ... 
minus { left : num, right : num } = .. 
당신은 너무 오래 그들이이 두 명명 된 매개 변수를 가지고 이러한 기능에 대한 기록에 전달할 수

는 (그들은 더 그냥 "왼쪽"할 수 있습니다 및 "오른쪽").

가 명명 된 매개 변수의 하나가있는 경우는 새로운 기능을 작성

minus5 :: { left : num } -> num 
minus5 = minus { right : 5 } 

내가 위의에 대한 하스켈의 표기법의 일부를 빌려합니다.

이 작업을 수행하는 언어를 본 사람이 있습니까?

+0

@Ken 블룸은 내가 볼 수있는 "부분이라는 용어를 사용하는 방법 기능 완료 "가 모호합니다. 나는 "부분적인 적용"을 의미하고인지 부조화의 일종을 가지고 있고 전술 한 용어를 사용했습니다. 그것을 고쳐 주셔서 감사합니다. –

답변

4

OCaml의 매개 변수를 명명하고 태닝은 (때로는 선택적 매개 변수를 처리 할 때 필요한 주석을 입력하지만) 자동으로하지만, 그들은 tupled되지 않습니다

Objective Caml version 3.11.2 

# let f ~x ~y = x + y;; 
val f : x:int -> y:int -> int = <fun> 
# f ~y:5;; 
- : x:int -> int = <fun> 
# let g = f ~y:5;; 
val g : x:int -> int = <fun> 
# g ~x:3;; 
- : int = 8 
+0

나는 오랫동안 OCaml을 오랫동안 사용 해왔고 어떤 이유로 넌 그렇게 할 수 없다고 생각했지만 틀렸어. F #이 동일한 작업을 수행 할 수 있는지 궁금합니다. -Thanks –

+0

F #은 명명 된 매개 변수를 지원하지 않습니다. – ygrek

+0

명명 된 매개 변수를 사용할 수있는 Object 생성자에만 해당합니다. C# 4.0은 명명 된 매개 변수를 지원합니다 :) –

1

확실히, Mathematica 그런 일을 할 수 있습니다.

관련 문제