簡體   English   中英

遞歸謂詞的例子

[英]Examples of recursive predicates

在 Stone 的Algorithms for Functional Programming 中,他給出了遞歸定義謂詞的設計模式,在 Scheme 中是

(define (check stop? continue? step)
  (rec (checker . arguments) 
    (or (apply stop? arguments) 
        (and (apply continue? arguments) 
             (apply (pipe step checker) arguments)))))

其中pipe是作者按圖解順序組合兩個函數的函數, ((pipe fg) x = (g (fx))

因此,例如,要測試函數是否為 2 的冪,您可以定義

(define power-of-two? (check (sect = <> 1) even? halve))

其中(sect = <> 1)是作者的柯里化符號,相當於lambda x: x == 1

很明顯,很多謂詞可以遞歸實現,但它沒有用。 顯然有一些遞歸謂詞不會使用這種模式,比如樹上的謂詞。

有哪些符合這種模式的經典謂詞? 我猜想測試 Cantor 集合中是否有某些東西,但這與上面的幾乎相同。

不清楚您在問什么,但您的示例是使用組合子編程的經典示例。

組合器是作為輸入函數和返回函數的函數。

組合器是函數式編程的基礎。 使用它們你可以實現一切。 例如,如果您將對象的數據結構定義為函數,您可以使用一些組合器組合對象並獲得一個新對象。

您示例中的組合器似乎對組合一些 monad 很有用。

暫無
暫無

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

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