【发布时间】:2020-09-28 04:23:45
【问题描述】:
我在 ReasonML/Ocaml 中做了“TwoSum”的问题,但我不知道如何在 Clojure 中使用类似的伪算法进行编码。请评论如何将此解决方案翻译成 Clojure
Clojure
(def nums [2 7 11 15])
(def target 9)
(defn two-sum [n xs]
(let [ixs (map vector xs (range (count xs)))]))
ReasonML
module TwoSum: {
let twoSum: (int, Belt.List.t(int)) => list(list(int));
let run: unit => unit;
} = {
let logl = l => l |> Array.of_list |> Js.log;
let concatmap = (xs: list('a), f) => {
List.concat(List.map(x => f(x), xs));
};
let twoSum = (n, xs) => {
let ixs = Belt.List.zip([0, ...range(1, List.length(xs))], xs);
concatmap(ixs, ((i, x)) =>
concatmap(drop(i, ixs), ((j, y)) => x + y == n ? [[i, j]] : [])
);
};
let run = () => {
Printf.printf("1. Two Sum :\n");
let res = twoSum(21, [0, 2, 11, 19, 90, 10]);
res |> logl;
};
};
【问题讨论】:
-
能否提供您所指的“TwoSum 问题”的链接
-
@cfrick 请参考此链接“leetcode.com/problems/two-sum”
标签: algorithm clojure functional-programming reason