簡體   English   中英

為什么使用成對的“點”表示法應用函數可能是Racket中的語法錯誤?

[英]Why applying functions using the pair “dot” notation can be a syntax error in Racket?

在Racket中,支持以下形式的函數定義:

(define (plus1 . x) (+ x 1))
(define (sum-all . l) (apply + l))

然后可以使用sum-all函數:

(sum-all 1 2 3)     ; => 6
(sum-all . (1 2 3)) ; => 6

但是,這不適用於plus1

(plus1 . 0) ; bad syntax error

同樣的,

(define (sum-two a . b) (+ a b))
(sum-two 1 . 2) ; bad syntax error

為什么不允許這種語法?

申請表必須是正確列表的形式,而不是(sum-two 1 . 2) 另一方面, (sum-two 1 2 . ())是。

(plus1 . x)的定義中, x旨在成為plus1正文中的列表。 的確,將plus1應用於任何參數將導致運行時錯誤。

define形式中, (define (func . args) body)意味着無論您給func提供什么參數,它們都將被放入一個名為args列表中。

但是,當您調用該函數時,將其調用為(func . 1)根本沒有任何意義。 這就是為什么這是語法錯誤。

暫無
暫無

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

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