小编Sup*_*ell的帖子

Prolog if else语法

我似乎无法让我的if else声明工作.

  1. 约翰,弗雷德和哈利是男人,玛丽,朱莉,苏珊和安妮是女人.
  2. John有金色头发,而Fred和Harry有黑发.
  3. 朱莉和苏珊是金发女郎,玛丽和安妮是黑发女郎.
  4. Rich是每个拥有黄金的人 - 弗雷德和朱莉在我们的例子中.
  5. 男性只喜欢女性,反之亦然.此外,约翰和哈利喜欢富人,约翰喜欢金发,弗雷德喜欢黑发.
  6. 玛丽和朱莉都喜欢黑发人,朱莉同时喜欢富人.
male(john).
male(fred).
male(harry). 

female(mary).
female(julie).
female(susan).
female(anne).

hasblonde(X):-(male(X),X = john);(female(X),X = susan);(female(X),X = julie).

hasdarkhair(X):-(male(X),X = harry);(male(X),X = fred).

hasbrunette(X):-(female(X),X = mary);(female(X),X = anne).

isrich(X):-(female(julie),X=julie);(male(fred),X=fred).


likes(male(X),female(Y));likes(female(X),male(Y)):-likes(X,Y).    
likes(X,Y):-
 ((X==julie)->
    ((hasdarkhair(Y))->
        (female(X), male(Y));
        male(X));
    female(X),male(Y));
 ((X==julie)->
    ((isrich(Y))->
        (female(X), male(Y));
        male(X));
    female(X),male(Y));
 ((X=mary)->
    ((hasdarkhair(Y))->
        (female(X), male(Y));
        male(X));
    female(X),male(Y));
 ((X=john)->
    ((isrich(Y))->
        (female(X), male(Y));
        female(X));
    male(X),female(Y));
((X=harry)->
    ((isrich(Y))->
        (female(X), male(Y));
        female(X));
    male(X),female(Y));    
 ((X=fred)->
        ((hasbrunette(Y))->
            (female(X), male(Y));
            female(X));
    male(X),female(Y)).
Run Code Online (Sandbox Code Playgroud)

我想(Statement) - >(如果是,则运行此语句);(如果为false则运行此语句).是Prolog的正确方法.无论我写什么,为什么会这样

likes(MaleName,FemaleName) 
likes(FemaleName,MaleName)
Run Code Online (Sandbox Code Playgroud)

它返回true?

prolog zebra-puzzle

4
推荐指数
1
解决办法
870
查看次数

初学者:F#中的表达

我想改写这个

//finds the max of 3 numbers
let max3 (n1, n2, n3) = let mx1 = if (n1 > n2) then n1 else n2 in if (mx1 > n3) then mx1 else n3;
Run Code Online (Sandbox Code Playgroud)

不使用"in"

我想出了这个

let max3 (n1, n2, n3) = 
   let mx1 = 
      if (n1 > n2) 
      then n1 
      else n2
   let mx2=
      if (mx1 > n3) 
      then mx1 
      else n3;;
Run Code Online (Sandbox Code Playgroud)

说,未完成,并期待一个表达.

不知道为什么.mx2是为了获得更高的集合值并将其移动到其范围内的下一个函数.

我也希望能够这样做,以便我不使用任何let表达式.请理解这种语言的任何帮助都非常友好

编辑:任何人都可以回答我的问题吗?在F#中使用任何let表达式也可能出现这样的问题吗?

f# functional-programming

3
推荐指数
1
解决办法
99
查看次数

标签 统计

f# ×1

functional-programming ×1

prolog ×1

zebra-puzzle ×1