我有一个问题,我认为相当棘手.
标准前奏包含该功能
Run Code Online (Sandbox Code Playgroud)replicate :: Int -> a -> [a]以下看起来似乎是一个合理的定义
Run Code Online (Sandbox Code Playgroud)replicate n x = take n [x,x,..]但实际上这还不够.为什么不?
我知道该replicate函数定义为:
replicate :: Int -> a -> [a]
replicate n x = take n (repeat x)
Run Code Online (Sandbox Code Playgroud)
并repeat定义为:
repeat :: a -> [a]
repeat x = xs where xs = x:xs
Run Code Online (Sandbox Code Playgroud)
定义是否不充分(来自问题),因为它使用无限列表?
练习是:
一群n人想拍一张合影.每个人都可以在他或她想要放在照片上的人旁边给出偏好.要解决的问题是找到满足最大数量的首选项的展示位置.
我到目前为止编写的代码:
include "globals.mzn";
% input variables
int: n;
int: n_prefs;
array[1..n_prefs, 1..2] of var 1..n: prefs;
% FDV:s
array [1..n] of var 1..n: photo_arrangement;
var 0..n_prefs: cost;
constraint
all_different(photo_arrangement)
% MORE Constraints
solve maximize cost;
output [show( photo_arrangement )]
Run Code Online (Sandbox Code Playgroud)
n是照片中的人数
n_prefs是首选项的数量
prefs是包含所有首选项的矩阵
主要思想是有一个包含1到n人的数组,以及我们想要最大化的成本变量.如何根据偏好更改成本变量?
我的第一个想法是写这样的东西
paste :: Region -> Image a -> Image a -> Image a
paste (Image bol) img1 img2 = if bol
then -- do the pasting
else -- well do nothing
Run Code Online (Sandbox Code Playgroud)
但我不知道怎么做粘贴.有人能指出我正确的方向吗?