2016-04-09 29 views
2

Şema *, argümanlarının ürününü döndürür. Bunun semantik nelerdirÇarpma operatörü

(*) => 1 
(* 2) => 2 

: o 1 döndürür argüman olmadan denir olursa veya bir argümanla bu argüman döner? Herhangi bir değeri nasıl iade edebilir? Çarpmayı gerçekleştirmek için örtülü olarak 1 argümanını ekliyor görünmektedir. Bu nerede açıklanmaktadır? Aşağıdaki karşıdan karşıya gelirken

Bu soru

zihnimde ortaya çıkan: 1 çoğalması için kimlik çünkü

Açıkçası bu, ama oldukça bu yerde sevk göremez. Kısaca, neden argüman 1 ürünüdür?

+0

Obstrüksiyon, tabi ki. : P – cat

+0

"ve" ve "veya", argüman olmadan çağrıldığında aynı şekilde çalıştığına dikkat edin: '(ve)', 't' döndürür ve' (ya da '' '' '' '' '' '' '' '' '' döndürür. Alexis'in cevabının söylediği gibi, dili daha içsel olarak tutarlı hale getirir ve kodunuzun ele alması gereken köşe durumlarını azaltır. –

cevap

3

Bu, + ve * öğelerinin kullanışlı bir özelliğidir: her ikisi de bağımsız değişkenler çağrıldığında ilgili işlemler için kimliği döndürür. (+)'un 0 döndürmesi, sadece bir hata atmak yerine, (apply + list-of-numbers) boş liste için bir liste toplama ortak bir deyim oluşturduğundan, muhtemelen daha yararlıdır. Benzer şekilde, bir listedeki tüm sayıların ürününü almak için *'u kullanabilirsiniz, ancak bu muhtemelen daha az yararlıdır.

Yine de, + için analog * en az sıfır argüman davranış anlamda yapar iddia edecek kadar güçlü olduğunu düşünüyorum. Bunu yapmanın, bu kadar çok hataları önleyeceğini düşünmüyorum, ve bazı kullanışlı kodların yazılmasını zorlaştırabilir. Bence kimliğin geri döndürülmesinin, dilin “pürüzsüzlüğünü” artırdığı gerçeğini (daha içsel olarak tutarlı), şemanın böyle temiz ve prensipli bir dil gibi hissetmesinin nedenlerinden biri olduğunu düşünüyorum.