首页 > 其他分享 >CS61A_lab12_macro

CS61A_lab12_macro

时间:2023-04-21 10:23:18浏览次数:59  
标签:scm OK -- macro CS61A filter lst lab12 define

 

(define-macro (def func args body)
  `(define ,(cons func args) ,body))

分析:

定义一个万能的函数定义,那就要模拟函数定义的样子。ok,函数定义是什么样子的呢? eg:

(define (filter-lst fn lst)
(if (null? lst) nil
    (if (fn (car lst))
        (cons (car lst) (filter-lst fn (cdr lst)))
        (filter-lst fn (cdr lst)))))

可以观察到,函数名以及参数是在一个括号里面的,那么我们也就模拟在一个参数里面呗

【ps:scheme中调用函数时,参数和函数名也是在一个括号里面,即参数不再需要参数,这里就与c,c++,python产生了区别。

eg:(area-circle 2) 而在python [area-circle(2)]

【 ,(cons func args) 】

这个样子就将函数名和参数连接起来了形成了一个列表。那么前面的逗号有什么作用呢?

逗号就是插值,注意到在【  `(define ,(cons func args) ,body)) 】中最前面有【 `】 符号,就是让后面的表达式变成字符串的形式,而我们要计算啊,所以在前面加一个逗号就会计算其中的式子。

例如:

scm> '(1 x 3)
? (1 x 3)
-- OK! --

scm> (define x 2)
? x
-- OK! --

scm> `(1 x 3)
? (1 x 3)
-- OK! --

scm> `(1 ,x 3)
? (1 2 3)
-- OK! --

scm> '(1 ,x 3)
? (1 ,x 3)
-- OK! --

scm> `(,1 x 3)
? (1 x 3)
-- OK! --

scm> `,(+ 1 x 3)
? 6
-- OK! --

 

 

再例如

 

(define-macro (list-of map-expr for var in lst if filter-expr)
`(map (lambda (,var) ,map-expr) (filter (lmabda (,var) ,filter-expr),lst))
)

 



标签:scm,OK,--,macro,CS61A,filter,lst,lab12,define
From: https://www.cnblogs.com/xuenima/p/17337547.html

相关文章

  • CS61A_hw07
     #langsicp(define(uniques)(if(null?s)nil(cons(cars)(unique(filter(lambfa(x)(not(eq?x(cars))))(cdrs))))))这是一个Scheme函数,名......
  • stata 显示所有macro
    .macrolistzong:a421a422S_level:95F1:helpadvice;F2:describe;F7:saveF8:useS_ADO:BASE;SITE;.;PERSONAL;PLUS;OLDPLACES_StataMP:MPS_StataSE:SES_OS:......
  • C-宏 (macro)
    定义宏(definemacro)>宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式.>>解释器或编译器在遇到宏时会自动进行这一模式替换.对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器.#define宏名(记号)内容定义和使用#define......
  • CS61A_lab08
    题目:Writethegeneratorfunction make_generators_generator,whichtakesazero-argumentgeneratorfunction g andreturnsageneratorthatyieldsgenerators.Foreachelement e yieldedbythegeneratorobjectreturnedbycalling g,anewgeneratorobjec......
  • glib gmacros.h
    /*GLIB-LibraryofusefulroutinesforCprogramming*Copyright(C)1995-1997PeterMattis,SpencerKimballandJoshMacDonald**Thislibraryisfreesoftware;youcanredistributeitand/or*modifyitunderthetermsoftheGNULesserGeneral......
  • CS61A_lab_07
    Problem2题目描述:代码:1definc_subseqs(s):2"""AssumingthatSisalist,returnanestedlistofallsubsequences3ofS(alistoflists)forwhichtheelementsofthesubsequence4arestrictlynondecreasing.Thesubseq......
  • CS61A_HW04
    Q6题目描述:Writeafunction has_path thattakesinatree t andastring phrase.Itreturns True ifthereisapaththatstartsfromtherootwherethe......
  • flask-宏的用法macro
    宏---类似函数macro-demo.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>宏定制</title></head><body><h3>JinJa模板宏用法:(......
  • cpp redifinition issues resolved by add macro #pragma once
    1.Without#pragmaonce  2.Whencomplement#pragmaonce,compileworked ......
  • CS61A Fall 2020 Homework 2 Recursion 我的思路
    HW2Description:https://inst.eecs.berkeley.edu/~cs61a/fa20/hw/hw02/我会把题目倒着放,因为通常后面的题能带给我的思考更多(也更可能做不出来......