SML - если условие с некоторым «или» - PullRequest
1 голос
/ 29 мая 2011

Я хочу создать условие if следующим образом:

if

 ((head(c) = 1) or (head(c) = ~1) or (head(c) = ~5) or (head(c) = ~17) or (head(c) = 0))
count +1
else..

возвращение функциональной головки 'a;

Это дает мне следующую ошибку: operator is not a function [tycon dismatch] operator: bool in expression

В чем проблема?спасибо.

Ответы [ 3 ]

7 голосов
/ 29 мая 2011

Я думаю, это называется orelse в SML.

5 голосов
/ 02 февраля 2013

Это называется orelse, а не просто or и andalso вместо and.Но orelse и andalso не являются функциями.Цитата из Программирование в стандарте ML '97 :

В частности, обратите внимание, что andalso и orelse не являются инфиксными функциями, поскольку они не являются строгими во втором аргументе, то естьне всегда вынуждают вычислять их второй аргумент - и такие функции не могут быть определены в строгом языке программирования, таком как Standard ML.Таким образом, мы не можем применить ключевое слово op к andalso или orelse.

1 голос
/ 09 декабря 2011

В этом примере вы также можете написать:

let val h = head c in
if List.exists (fn x => x = h) [1, ~1, ~5, ~17, 0]
then count + 1
else ...
end
...