Добавить пары больше чем n фильтр - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в SML.Я пытаюсь написать функцию, используя карту и фильтр, чтобы добавить пары из списка, где x и y пары больше, чем n.Код компилируется без ошибок, однако, когда я выполняю функцию addPairsGreaterThan 3 [(1,2), (3,3), (1,1)], я получаю пустой список в качестве вывода.

Мой код SML указан ниже:

fun addPairsGreaterThan n intPairs =
  let
    val helperList = filter(fn (x,y) => x > n andalso y > n) (intPairs)
    fun addPairs (x,y) = x+y
  in
    map addPairs helperList
  end;

1 Ответ

0 голосов
/ 25 апреля 2018

[...] добавить пары из списка, где x и y пары больше, чем n.

[...] addPairsGreaterThan 3 [(1,2), (3,3), (1,1)], я получаю пустой список в качестве вывода.

Ни одна из этих пар не имеет обеих (или любых) частей больше 3. Так что [] кажется правильным.

Ваша функция работает, хотя:

  • Вы имеете в виду функцию filter. Вы имеете в виду List.filter?
  • Вы можете переименовать intPairs в pairs; Венгерская запись плоха .
  • Вспомогательная функция addPairs эквивалентна и может быть заменена на op+.
  • Временная привязка helperList не требуется.

Вот переписанная версия:

fun addPairsGreaterThan n pairs =
    map op+ (List.filter (fn (x,y) => x > n andalso y > n) pairs)

Поскольку это определение имеет вид f (x) = g (h (x)) , его можно определить как f = g o h , где

  • г составляет map op+ и
  • ч равно List.filter (fn (x,y) => x > n andalso y > n).

Скобки не нужны, поэтому это может выглядеть немного запутанно:

fun addPairsGreaterThan n =
    map op+  o  List.filter (fn (x,y) => x > n andalso y > n)
...