F#不包含一些在哈斯克爾(主要是因爲F#程序員通常更喜歡編程的明確的風格,只在最明顯的情況下,使用pointfree風格中提供的基本功能,它不會影響可讀性)。
但是你可以定義這樣幾個基本的組合子:
// turns curried function into non-curried function and back
let curry f (a, b) = f a b
let uncurry f a b = f (a, b)
// applies the function to the first/second element of a tuple
let first f (a, b) = (f a, b)
let second f (a, b) = (a, f b)
現在,您可以實現添加使用組合算符兩個字符串的長度的功能如下:
let addLengths =
uncurry (((first String.length) >> (second String.length)) >> (curry (+)))
這種構造兩個功能將String.length
應用於元組的第一個/第二個元素,然後進行組合,然後使用+
添加元組的元素。整個東西被包裝在uncurry
中,所以你得到string -> string -> int
類型的功能。
你應該使用「無點」而不是「無意義」。這是標準術語。 :) – 2010-06-04 03:19:04