현재 일부 연습은 exercism.io에서하고 있습니다. 한 가지 예제 중 하나는 다른 순서의 하나 이상의 숫자의 배수 인 모든 순서의 숫자를 합산하는 것입니다. 작은 기능에 문제를 분할 좋은 생각처럼 보였다 그리고 난이 함께했다 :매개 변수 순서 변경을 피하는 방법
let multipleOf m n =
n % m = 0
let anyMultipleOf (m: int list) n =
m
|> Seq.exists (multipleOf n)
let sumOfMultiples m n =
[1..n-1]
|> Seq.filter (anyMultipleOf m)
|> Seq.sum
아이디어의 존재를, 난 내 (any)multipleOf
기능에 m
매개 변수를 "에서 구워"하는 부분 응용 프로그램을 사용할 수 있습니다. 그러나이 코드는 내가 원하는 방식으로 작동하지 않습니다. Seq.exists (multipleOf n)
은 실제로 을 내 m
매개 변수로 적용하기 때문입니다.
multipleOf
함수의 매개 변수 순서를 바꾸지 않고도이 코드를 리팩토링 할 수 있습니까?
참고 : 내 anyMultipleOf
함수 내에서 내 multipleOf
함수를 사용하는 솔루션을 원한다. 이 솔루션은 작동하지만 내 첫 번째 함수 재사용하지 않습니다
let anyMultipleOf (m: int list) n =
m
|> Seq.exists (fun x -> n % x = 0)
둘 다'multipleOf'와'anyMultipleOf'는 실제로 역순으로 매개 변수를 가져야합니다. 매개 변수는보다 일반적으로보다 구체적으로 정의됩니다. '(any) MultipleOf x'를 현재보다 더 재사용 할 수있는 점이 있습니다 – Sehnsucht
내 사고 과정은 정확히 다른 방향입니다. 'let anyMultipleOfMyNumbers = anyMultipleOf [3; 5; 7]' –
이것 역시 잘 작동합니다 :'let filterMultiplesOf5 numlist = numlist |> Seq.filter (multipleOf 5)' –