【发布时间】:2019-06-05 08:38:19
【问题描述】:
我目前正在自学函数式编程。
我正在尝试翻译以下内容:
(define a 3)
(define b (+ a 1))
(* (cond ((> a b) a)
((< a b) b)
(else -1))
(+ a 1))
进入 JavaScript(使用 Ramda)。
可以使用嵌套三元组,但我喜欢使用 Ramda 的 cond 函数。这是我所做的:
const a = 3;
const b = 3 + 1;
cond([[() => a > b, () => a], [() => a < b, () => b], [T, () => -1]])() * (a + 1)
我遇到的问题是我必须使用这些函数(例如() => 3)而不仅仅是它们的值(例如a)。
有没有办法避免这些功能?或者在 JavaScript 中是否有另一种更好的方法(甚至可能没有 Rambda)?
我想避免使用if、for 和switch 等语句。
解决此问题的另一种方法是使用:
import gt from "ramda/src/gt";
import lt from "ramda/src/lt";
const a = () => 3;
const b = () => a() + 1;
cond([[gt(a, b), a], [lt(a, b), b], [T, () => -1]])() * (a() + 1);
这使a 和b 变得复杂,因为它们总是必须被调用(参见a() + 1)。
编辑:
由于某种原因,我将a 和b 定义为函数的最后一个代码不起作用????
【问题讨论】:
标签: javascript functional-programming lisp ramda.js mit-scheme