簡體   English   中英

方案嵌套的lambda函數

[英]Scheme nested lambda functions

我很難理解如何為lambda表達式解決家庭作業問題。 我必須編寫一個帶有單個參數F的函數,這是一個謂詞函數,並返回一個與F相反的新函數。

我知道在函數的某處,我將從傳回的謂詞函數中返回非值,以返回相反的值,但是我對其余的問題描述感到困惑。 問題指出:“您將需要在lambda中使用一個lambda。由於您不知道F會接受多少個參數(實際上可能會包含一個可變數字),因此您必須使用apply和定義lambda表達式的語法需要任何數量的參數”

我不明白如何設置嵌套的lambda表達式來實現我想做的與返回F可能相反的事情。 我一直在嘗試一些不同的事情,只是想看看我是否能到達任何地方,但我不了解嵌套的lambda表達式如何足以使我到達任何地方。

(define converse
  (lambda (F) 
    (lambda
      (apply (not (F))))))

我知道這行不通,但是我需要幫助您了解如何設置嵌套的lambda表達式以執行所需的操作。

您非常接近答案:

(define converse
  (lambda (f)
    (lambda args
      (not (apply f args)))))

基本上,您缺少最里面的lambda的args參數,該參數將容納f可以接收的可變數量的參數。 並且在參數上調用f 之后將應用not 例如,將此謂詞包含兩個參數:

(define (test x y)
  (> x y))

看看它通常如何工作:

(test 10 5)
=> #t
(test 5 10)
=> #f
(test 10 10)
=> #f

現在看一下將converse應用於test之后它是如何工作的。 注意,處理兩個參數沒有問題:

((converse test) 10 5)
=> #f
((converse test) 5 10)
=> #t
((converse test) 10 10)
=> #t

附帶說明一下:在Racket中,我們剛剛實現的converse過程已經存在,它稱為negate 我們可以像這樣輕松地實現converse

(define converse negate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM