惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
博客园 - Franky
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
B
Blog RSS Feed
雷峰网
雷峰网
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
美团技术团队
云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
G
Google Developers Blog
T
Tailwind CSS Blog
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
月光博客
月光博客
Engineering at Meta
Engineering at Meta

博客园 - linkcd

linkcd胡扯职业生涯规划(二): 关于 人 linkcd胡扯职业生涯规划(一): 关于定位 如何才能用好Email? 让Switch-Case/If-Else-If-Else从你系统中走开 [翻译]每个作者都应该懂的统计学 Part I Castle.MircoKernel Class Diagram - Part I 一个不错的scheme入门PPT 人格类型 测试结果 .Net 2.0 下Data Container性能比较: Binary Serialize Dataset vs Custom Classes 智能替换DataTable.Select中会导致错误的单引号 - linkcd - 博客园 Nullable Type is an immutable type Why does Dataset NOT serialize its BinaryFormat property? (ADO.net 2.0) Undocumented Keywords in C# System.Int32&是个啥? 《4个程序员的一天》(续) 由idior的问题想到的 4个程序员的一天 n久以前写的火星文 Solution for SICP 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
回FantasySoft
linkcd · 2005-07-20 · via 博客园 - linkcd

FantasySoft兄的贴在这里

hehe,其实我是偷懒没用那些复杂的函数来当op,直接把+传进去吧了。Scheme里面,数据和函数都是一回事,没有区别的。

如果op是个复杂的函数,还是需要先吧这个函数定义出来,再传进去。
比如现在我们op操作符不再是加法这么简单,而是要算x和y的平方和是多少,即:
x^2 + y^2 = ?

如何用scheme来做呢?

首先我们的Foo的定义不用变,还是
(define (Foo op x y)
  (op x y))

然后,我们来定义新的op,叫sum-sq
(define (sum-sq x y)
  (+ (* x x) (* y y)))

最后来看看结果是不是正确:
(Foo sum-sq 3 4)
得25

运算过程嘛,就是
(Foo sum-sq 3 4)

->

((lambda (op x y)
   (op x y))
 sum-sq
 3
 4)

->

((lambda (op x y)
   (op x y))
 (lambda (x y)
   (+ (* x x) (* y y)))
 3
 4)

->

((lambda (x y)
   (+ (* x x) (* y y)))
 3
 4)

->

(+ (* 3 3) (* 4 4))

->25

别看我写那么复杂,其实是从DrScheme的Stepper上面copy过来的,呵呵

再说说scheme的语法吧,scheme的表达式都是用括号括起来的。括号左边第一个就是该表达式的运算符,后面的都是参数。在scheme里面调函数,就是(函数体 参数1 参数2 ...)。如果你要在函数里面调函数,就要用无数的括号来括你的表达式....这括号一多,看起来就头晕了...也算是Lisp/scheme一个不太方便的地方吧.