Я пытаюсь решить упражнение "напряжение" на упражнения. Предполагается, что функция принимает функцию-предикат в качестве параметра.
let keep pred xs =
function body
Когда код:
[1;2;3;4] |> Seq.keep (fun x -> x % 2 = 0)
Как я могу использовать предикат в теле?
Чтобы ответить на конкретный вопрос — как использовать предикат в теле — скажем, что мы хотим сделать что-то намного проще. Мы хотим написать функцию, которая принимает предикат pred
и значение v
и просто возвращает «ОК», если предикат выполняется для данного значения, и «Нет», если это не так.
Для этого вы должны написать:
let okIfHolds pred v =
if pred v then "OK" else "Nope"
Чтобы вызвать сказуемое, нужно просто сказать pred v
. Это тот же синтаксис приложения функции F#, который вы видите при вызове встроенных функций, таких как sqrt 2.0
или List.sum [1;2;3]
, — просто укажите функцию и ее аргументы.
Привет, Томас, спасибо за ответ. Я думал, что последний параметр функции в F# на самом деле является выходом. Разве это не так? В вашем примере код pred
принимает функцию предиката, а v
является вводом значения, но нет параметра, который задает вывод строки. Это сбило меня вчера.
Поскольку это вопрос домашнего задания, я не буду давать прямой ответ. Я предлагаю вам взглянуть на использование выражений последовательности docs.microsoft.com/en-us/dotnet/fsharp/language-reference/…