racket

    9熱度

    3回答

    在流程可以定義以下程序正確的語法: (define (proc . vars) (display (length vars))) 這將讓你成參數的任何款項發送給PROC。但是,當我嘗試做這種方式: (define proc (lambda (. vars) (display (length vars)))) 我得到以下錯誤: read: illegal use of

    0熱度

    1回答

    我寫了下面的語法規則: (define-syntax match-rewriter (syntax-rules() ((_ (patt body) ...) (λ (x) (match x (patt body) ... (_ x)))))) ,如果沒有發現匹配,而不是拋出異常基本上是match-lambda只不過它返回它的參數。 現在我想寫一個函數let_as_

    0熱度

    2回答

    我需要實現一個參數的函數 - obj - 返回一個方案表達式,計算時,將返回obj副本。 關於如何解決問題的任何想法?

    1熱度

    1回答

    作爲一個練習,我試圖重寫代表let*的源代碼作爲嵌套的一元讓。這是我最大的努力: (define let*→nested-unary-lets (match-lambda (`(let* (()) ,<exprs>) `(let() ,<exprs>)) (`(let* ((,<var> ,<val>)) ,<exprs>) `(let ((,<v

    0熱度

    1回答

    我正在使用匹配lambda來重寫更基本的特定函數。下面是接受表示爲讓*呼叫輸入代碼串,並返回它們作爲轉換成嵌套一元串讓一個例子: (define let*→nested-unary-lets (match-lambda (`(let* (()) ,<exprs>) `(let() ,<exprs>)) (`(let* ((,<var> ,<val>)) ,<

    1熱度

    1回答

    該分配用於定義一個函數,該函數接受單個列表作爲參數,並輸出列表的最大值。我覺得我的嵌套「ifs」和「let」非常過量,並且功能過早終止而不打印答案。我已經找到了一個使用遞歸正確使用的例子,但已經空了,DrRacket中的調試功能對於通過遞歸調用進行跟蹤並不是非常有用。 任何幫助表示讚賞,謝謝。 (define max (lambda (x) (let ((y (car x)))

    0熱度

    1回答

    我正在寫一個名爲annotate的函數,它使用match-lambda,通常用遞歸調用來註釋。這裏是模式匹配中的一個: (`(lambda (,<param1> . ,<params>) ,<stmts>) `(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(map annotate ,(list-append `(,<para

    1熱度

    1回答

    我正在寫一個函數註釋,它使用match-lambda通常用遞歸調用來註釋。這裏是模式和匹配之一: (`(,<param> . ,<params> (lambda (,<args>) ,<stmt> . ,<stmts>)) `(CLOSURE ENV ,(append (append `(,<param>) `(,<params>))`(,<args>)) (lambda (ENV) ,(map

    0熱度

    1回答

    我正在嘗試使用match-lambda做一些相當複雜的模式匹配。不過,我在解釋模式和匹配的語法方面遇到了很多麻煩,谷歌搜索也沒有找到像樣的參考。這似乎是它應該是簡單的 一件事是匹配字符串「(PARAMS:(Y))使用這種模式: (`(PARAMS: (,<arg>)) <match> 但它不工作。 模式: (`(PARAMS: ,<arg>) `<match> 匹配「(PARAMS:Y

    1熱度

    1回答

    在Exercise 35.4.2 from HtDP中,我實現了GUI,並有一個名爲「Remove」的按鈕,它調用一個回調函數。這是它: (define (cb-remove x) ((lambda (name result) (cond [(number? result) (remove-name name address-book)] [else (