gpt4 book ai didi

function - 将表单定义为函数名称?

转载 作者:行者123 更新时间:2023-12-02 20:21:36 27 4
gpt4 key购买 nike

我想知道这段代码在Scheme中的含义:

(define ((K x) y) x)

(define (((S x) y) z)
((x z) (y z)))

整个文件是here .

这个方案合法吗? (K x) 是一个参数化函数,类似于 Java 中的泛型函数吗?我查了一下MIT Scheme reference ,似乎没有提到这种定义。

最佳答案

在 MIT 计划中尝试一下是可行的

(define ((K x) y) x)
;Value: k

((k 3) 4)
;Value: 3

显然,这些是 combinatorial logicKS 组合器的定义。 SKI calculus .

我们可以显式定义相同的函数,

(define k (lambda (x) (lambda (y) x)))
;Value: k

((k 3) 4)
;Value: 3

显然,MIT-Scheme 为我们做到了这一点,就像 (define (fun foo) bar) 之类的常规定义被翻译为 (define fun (lambda (foo)酒吧))

S 组合器将显式定义为

(define S (lambda (x) (lambda (y) (lambda (z) 
((x z) (y z))))))

(define ((add a) b) (+ a b))
;Value: add

(define (add1 a) (+ a 1))
;Value: add1

(((s add) add1) 3)
;Value: 7

这就是currying语言(例如 Haskell)可以工作,其中每个函数都是一个参数的函数。 Haskell 在这方面非常接近组合逻辑,根本没有使用括号,我们可以简单地编写相同的定义:

_K x y = x
_S x y z = x z (y z)

因此 _S (+) (1+) 3 生成 7

关于function - 将表单定义为函数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19584596/

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