[英]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.