gpt4 book ai didi

clojure - 你能翻译 Functional Languages 101 中的这两个例子吗? (方案 -> Clojure)

转载 作者:行者123 更新时间:2023-12-04 22:16:30 25 4
gpt4 key购买 nike

得到了这些我想了解的例子,但它们在 Scheme 中。我想在 Clojure 中使用它们:D

示例 1 - 计算列表的长度


(define length
(lambda (ll)
(cond
((null? ll) 0)
(#t (add1
(length (cdr ll)))))))

示例 2 - 对列表的每个元素进行平方

(define squares
(lambda (li)
(cond
((null? li) ())
(#t (cons
(* (char li) (char li))
(squares(cdr
li)))))))

示例 3 - “map”函数(如在 map/reduce 中)

(define map (lambda (func lst)
(cond ((null? lst) ())
(#t (cons (func (car lst))
(map func (cdr lst)))))))

curry “ map ”

(define map2
(lambda (func)
(lambda (lst)
(cond ((null? lst) ())
(#t (cons (func (car lst))
((map2 func) (cdr lst)))))))

动机
这些示例来自关于函数式编程的演示文稿,其他人可能对此感兴趣: Functional Languages 101: What’s All the Fuss About?

一旦您提交答案,我希望您同意将其作为评论发布在该演示文稿中,以便 Clojure 人员了解原始代码

最佳答案

列表长度:

(defn my-length [lst]
(loop [len 0 x lst]
(if (empty? x)
len
(recur (+ 1 len) (rest x)))))

user=> (my-length '(1))
1
user=> (my-length '(1 2 3 4))
4
user=> (my-length '())
0

对列表的每个元素进行平方:
(defn squares [lst]
(loop [sqrs '() x lst]
(if (empty? x)
(reverse sqrs)
(recur (cons (* (first x) (first x)) sqrs) (rest x)))))

user=> (squares '(1 2 3 4))
(1 4 9 16)

map :
(defn my-map [func lst]
(loop [res '() x lst]
(if (empty? x)
(reverse res)
(recur (cons (func (first x)) res) (rest x)))))

user=> (my-map (fn [x] (* x 2)) '(1 2 3))
(2 4 6)

map 2:

请参阅 nickik 的解决方案。

关于clojure - 你能翻译 Functional Languages 101 中的这两个例子吗? (方案 -> Clojure),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3941239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com