【问题标题】:Scheme: About cond方案:关于cond
【发布时间】:2012-09-24 08:39:03
【问题描述】:

(cond ((test-1) (expression-1)))

当我使用条件时,我可以给出(表达式-1)中的几个函数吗?

像这样:

(cond ((= 1 1) ((fun1) (fun2)) )

【问题讨论】:

    标签: lisp scheme


    【解决方案1】:

    begin 实际上是可选的——cond(至少在 Scheme 和 Emacs Lisp 中)在每个测试表达式之后采用多个表达式,并在隐式 begin 中依次计算它们

    (cond ((= 1 1) (fun1 ...) (fun2 ...))
          (t (something-else)))
    

    在 Scheme 中使用 #t 而不是 t

    【讨论】:

    • Common Lisp 的每个 cond 子句中也有一个隐含的 prognbegin 等效项)。我认为 Clojure 是不同的,因为它没有额外的括号对包裹每个子句。
    【解决方案2】:

    是的,您可以通过将它们包装在begin 中来执行多个表达式,如下所示

    (cond ((= 1 1) (begin (fun1) (fun2))) 
    

    注意:begin 表达式的返回值将是最后一个表达式的结果,即在示例中,返回值将是 fun2 执行的结果

    【讨论】:

    • 对于cond,您甚至不需要在结果中使用begin(但是,您必须将它用于if)。这样就足够了:(cond ((= 1 1) (fun1) (fun2)))
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多